diff --git a/.gitignore b/.gitignore index a2d7b49..7b78d56 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ typings npm-debug.log src/vendor.bundle.js* .vagrant/ +*.sw* diff --git a/src/app/layout/blocks/person-tags-plugin-interests/index.ts b/src/app/layout/blocks/person-tags-plugin-interests/index.ts new file mode 100644 index 0000000..a1785c1 --- /dev/null +++ b/src/app/layout/blocks/person-tags-plugin-interests/index.ts @@ -0,0 +1,2 @@ +/* Module Index Entry - generated using the script npm run generate-index */ +export * from "./person-tags-plugin-interests-block.component"; diff --git a/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component.spec.ts b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component.spec.ts new file mode 100644 index 0000000..c9a96d7 --- /dev/null +++ b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component.spec.ts @@ -0,0 +1,56 @@ +import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builder'; +import {Provider, Input, provide, Component} from 'ng-forward'; +import {provideFilters} from '../../../../spec/helpers'; +import {PersonTagsPluginInterestsBlockComponent} from './person-tags-plugin-interests-block.component'; +import * as helpers from "./../../../../spec/helpers"; + +const htmlTemplate: string = ''; + +const tcb = new TestComponentBuilder(); + +describe("Components", () => { + describe("Person Tags Interests Block Component", () => { + + let settingsObj = {}; + let person = { name: "Person" }; + let mockedService = { + getTags: (profile: noosfero.Profile): any => { + return Promise.resolve({ data: ['foo', 'bar'], headers: (name: string) => { return name; } }); + } + }; + beforeEach(angular.mock.module("templates")); + + let state = jasmine.createSpyObj("state", ["go"]); + + + function getProviders() { + return [ + new Provider('$state', { useValue: state }), + new Provider('PersonService', { + useValue: mockedService + }) + ].concat(provideFilters("truncateFilter", "stripTagsFilter")); + } + let componentClass: any = null; + + function getComponent() { + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [PersonTagsPluginInterestsBlockComponent], providers: getProviders() }) + class BlockContainerComponent { + block = { type: 'Block', settings: settingsObj }; + owner = person; + constructor() { + } + } + return BlockContainerComponent; + } + + it("get tags from the person service", done => { + tcb.createAsync(getComponent()).then(fixture => { + let PersonTagsPluginInterestsBlock: PersonTagsPluginInterestsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance; + expect(PersonTagsPluginInterestsBlock.tags).toEqual(['foo', 'bar']); + done(); + }); + }); + + }); +}); diff --git a/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component.ts b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component.ts new file mode 100644 index 0000000..49d1ef2 --- /dev/null +++ b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component.ts @@ -0,0 +1,27 @@ +import {Component, Inject, Input} from "ng-forward"; +import {PersonService} from "./../../../../lib/ng-noosfero-api/http/person.service"; +import {Arrays} from "./../../../../lib/util/arrays"; + +@Component({ + selector: "noosfero-person-tags-plugin-interests-block", + templateUrl: 'app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.html' +}) +@Inject(PersonService, "$state") +export class PersonTagsPluginInterestsBlockComponent { + + @Input() block: any; + @Input() owner: any; + + profile: any; + tags: any; + + constructor(private personService: PersonService, private $state: any) { } + + ngOnInit() { + this.profile = this.owner; + this.tags = []; + this.personService.getTags(this.owner).then((result: noosfero.RestResult) => { + this.tags = result.data; + }); + } +} diff --git a/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.html b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.html new file mode 100644 index 0000000..37d0c64 --- /dev/null +++ b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.html @@ -0,0 +1,3 @@ + diff --git a/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.scss b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.scss new file mode 100644 index 0000000..8e40d16 --- /dev/null +++ b/src/app/layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.scss @@ -0,0 +1,14 @@ +.person-tags-plugin-interests { + padding: 0; + margin: 0; + + li { + list-style: none; + float: left; + padding: 5px; + margin: 5px; + text-transform: lowercase; + color: #fff; + background-color: #1E96D0; + } +} diff --git a/src/app/main/main.component.ts b/src/app/main/main.component.ts index 16b5a19..a5222b5 100644 --- a/src/app/main/main.component.ts +++ b/src/app/main/main.component.ts @@ -16,6 +16,7 @@ import {RecentDocumentsBlockComponent} from "../layout/blocks/recent-documents/r import {ProfileImageBlockComponent} from "../layout/blocks/profile-image/profile-image-block.component"; import {RawHTMLBlockComponent} from "../layout/blocks/raw-html/raw-html-block.component"; import {StatisticsBlockComponent} from "../layout/blocks/statistics/statistics-block.component"; +import {PersonTagsPluginInterestsBlockComponent} from "../layout/blocks/person-tags-plugin-interests/person-tags-plugin-interests-block.component"; import {CustomContentComponent} from "../profile/custom-content/custom-content.component"; import {MembersBlockComponent} from "../layout/blocks/members/members-block.component"; @@ -82,7 +83,7 @@ export class EnvironmentContent { * @name main.Main * @requires AuthService, Session, Notification, ArticleBlog, ArticleView, Boxes, Block, LinkListBlock, * MainBlock, RecentDocumentsBlock, Navbar, ProfileImageBlock, MembersBlock, - * NoosferoTemplate, DateFormat, RawHTMLBlock + * NoosferoTemplate, DateFormat, RawHTMLBlock, PersonTagsPluginInterestsBlock * @description * The Main controller for the Noosfero Angular Theme application. * @@ -100,7 +101,7 @@ export class EnvironmentContent { LinkListBlockComponent, CommunitiesBlockComponent, HtmlEditorComponent, ProfileComponent, MainBlockComponent, RecentDocumentsBlockComponent, Navbar, SidebarComponent, ProfileImageBlockComponent, MembersBlockComponent, NoosferoTemplate, DateFormat, RawHTMLBlockComponent, StatisticsBlockComponent, - LoginBlockComponent, CustomContentComponent, PermissionDirective + LoginBlockComponent, PersonTagsPluginInterestsBlockComponent, CustomContentComponent, PermissionDirective ].concat(plugins.mainComponents).concat(plugins.hotspots), providers: [AuthService, SessionService, NotificationService, BodyStateClassesService, "ngAnimate", "ngCookies", "ngStorage", "ngTouch", diff --git a/src/lib/ng-noosfero-api/http/person.service.ts b/src/lib/ng-noosfero-api/http/person.service.ts index a7f9b3d..04eb024 100644 --- a/src/lib/ng-noosfero-api/http/person.service.ts +++ b/src/lib/ng-noosfero-api/http/person.service.ts @@ -1,11 +1,12 @@ import { Injectable, Inject } from "ng-forward"; import {RestangularService} from "./restangular_service"; +import {ProfileService} from "./profile.service"; @Injectable() -@Inject("Restangular", "$q", "$log") +@Inject("Restangular", "$q", "$log", ProfileService) export class PersonService extends RestangularService { - constructor(Restangular: restangular.IService, $q: ng.IQService, $log: ng.ILogService) { + constructor(Restangular: restangular.IService, $q: ng.IQService, $log: ng.ILogService, protected profileService: ProfileService) { super(Restangular, $q, $log); } @@ -20,4 +21,11 @@ export class PersonService extends RestangularService { }; } + getTags(profile: noosfero.Profile): ng.IPromise> { + let p = this.getElement(profile.id).customGET('tags'); + let deferred = this.$q.defer>(); + p.then(this.getHandleSuccessFunction>(deferred)); + p.catch(this.getHandleErrorFunction>(deferred)); + return deferred.promise; + } } diff --git a/src/lib/ng-noosfero-api/http/restangular_service.ts b/src/lib/ng-noosfero-api/http/restangular_service.ts index 75d063d..d7acb09 100644 --- a/src/lib/ng-noosfero-api/http/restangular_service.ts +++ b/src/lib/ng-noosfero-api/http/restangular_service.ts @@ -79,7 +79,7 @@ export abstract class RestangularService { } } return { - data: response.data[dataKey], + data: (response.data[dataKey] || response.data), headers: response.headers }; }; -- libgit2 0.21.2