Commit 62f85230b4028963680cebe137982f1b6e3a0caa

Authored by Victor Costa
1 parent 167edf00

Move logic that show/hide blocks to block component

src/app/layout/blocks/block.component.spec.ts 0 → 100644
@@ -0,0 +1,135 @@ @@ -0,0 +1,135 @@
  1 +import {Component} from 'ng-forward';
  2 +import {BlockComponent} from './block.component';
  3 +import * as helpers from "../../../spec/helpers";
  4 +import {ComponentTestHelper, createClass} from '../../../spec/component-test-helper';
  5 +
  6 +const htmlTemplate: string = '<noosfero-block [block]="ctrl.block" [owner]="ctrl.profile"></noosfero-block>';
  7 +
  8 +describe("Boxes Component", () => {
  9 +
  10 + let helper: ComponentTestHelper<BlockComponent>;
  11 + beforeEach(() => {
  12 + angular.mock.module("templates");
  13 + });
  14 +
  15 + let properties = {
  16 + block: { id: 1 },
  17 + owner: {
  18 + id: 1,
  19 + identifier: 'profile-name',
  20 + type: 'Person'
  21 + }
  22 + };
  23 + beforeEach((done) => {
  24 + let cls = createClass({
  25 + template: htmlTemplate,
  26 + directives: [BlockComponent],
  27 + properties: properties,
  28 + providers: [
  29 + helpers.createProviderToValue('SessionService', helpers.mocks.sessionWithCurrentUser({})),
  30 + helpers.createProviderToValue('AuthService', helpers.mocks.authService),
  31 + helpers.createProviderToValue('$state', state),
  32 + helpers.createProviderToValue('TranslatorService', translatorService),
  33 + helpers.createProviderToValue('$uibModal', helpers.mocks.$modal),
  34 + helpers.createProviderToValue('BlockService', blockService),
  35 + helpers.createProviderToValue('NotificationService', helpers.mocks.notificationService)
  36 + ]
  37 + });
  38 + helper = new ComponentTestHelper<BlockComponent>(cls, done);
  39 + });
  40 +
  41 + let translatorService = jasmine.createSpyObj("translatorService", ["currentLanguage"]);
  42 + let blockService = jasmine.createSpyObj("blockService", ["update"]);
  43 + let state = jasmine.createSpyObj("state", ["current"]);
  44 + state.current = { name: "" };
  45 +
  46 + it("set isHomepage as false by default", () => {
  47 + expect(helper.component.isHomepage).toBeFalsy();
  48 + });
  49 +
  50 + it("set isHomepage as true when in profile home page", () => {
  51 + state.current = { name: "main.profile.home" };
  52 + helper.component.ngOnInit();
  53 + expect(helper.component.isHomepage).toBeTruthy();
  54 + });
  55 +
  56 + it("set isHomepage as true when in profile info page", () => {
  57 + state.current = { name: "main.profile.info" };
  58 + helper.component.ngOnInit();
  59 + expect(helper.component.isHomepage).toBeTruthy();
  60 + });
  61 +
  62 + it("set isHomepage as true when in profile page", () => {
  63 + state.current = { name: "main.profile.page" };
  64 + state.params = { page: "/page" };
  65 + (<noosfero.Profile>helper.component.owner).homepage = '/page';
  66 + helper.component.ngOnInit();
  67 + expect(helper.component.isHomepage).toBeTruthy();
  68 + });
  69 +
  70 + it("set isHomepage as true when in environment home page", () => {
  71 + state.current = { name: "main.environment.home" };
  72 + helper.component.owner = <noosfero.Environment>{};
  73 + helper.component.ngOnInit();
  74 + expect(helper.component.isHomepage).toBeTruthy();
  75 + });
  76 +
  77 + it("return true in canDisplay when no display option is setted", () => {
  78 + helper.component.block = <any>{};
  79 + expect(helper.component.canDisplay()).toEqual(true);
  80 + });
  81 +
  82 + it("return false in canDisplay for an invisible block", () => {
  83 + helper.component.block = <any>{ settings: { display: "never" } };
  84 + expect(helper.component.canDisplay()).toEqual(false);
  85 + });
  86 +
  87 + it("return false in canDisplay with except_home_page in homepage", () => {
  88 + helper.component.block = <any>{ settings: { display_user: "except_home_page" } };
  89 + expect(helper.component.canDisplay()).toEqual(false);
  90 + });
  91 +
  92 + it("return false in canDisplay with home_page_only outside homepage", () => {
  93 + helper.component.block = <any>{ settings: { display_user: "home_page_only" } };
  94 + expect(helper.component.canDisplay()).toEqual(false);
  95 + });
  96 +
  97 + it("return true in canDisplay when display_user is all for logged user", () => {
  98 + helper.component.block = <any>{ settings: { display_user: "all" } };
  99 + expect(helper.component.canDisplay()).toEqual(true);
  100 + });
  101 +
  102 + it("return true in canDisplay when display_user is all for not logged user", () => {
  103 + helper.component.currentUser = null;
  104 + helper.component.block = <any>{ settings: { display_user: "all" } };
  105 + expect(helper.component.canDisplay()).toEqual(true);
  106 + });
  107 +
  108 + it("return false in canDisplay when display_user is logged for not logged user", () => {
  109 + helper.component.currentUser = null;
  110 + helper.component.block = <any>{ settings: { display_user: "logged" } };
  111 + expect(helper.component.canDisplay()).toEqual(false);
  112 + });
  113 +
  114 + it("return false in canDisplay when display_user is not_logged for logged user", () => {
  115 + helper.component.block = <any>{ settings: { display_user: "not_logged" } };
  116 + expect(helper.component.canDisplay()).toEqual(false);
  117 + });
  118 +
  119 + it("return false in canDisplay when current language is not equal to language in block settings", () => {
  120 + helper.component['translatorService'].currentLanguage = jasmine.createSpy("currentLanguage").and.returnValue("pt");
  121 + helper.component.block = <any>{ settings: { language: "en" } };
  122 + expect(helper.component.canDisplay()).toEqual(false);
  123 + });
  124 +
  125 + it("return false in canDisplay when hide is true", () => {
  126 + helper.component.block = <any>{ id: 1, hide: true };
  127 + expect(helper.component.canDisplay()).toEqual(false);
  128 + });
  129 +
  130 + it("return true in canDisplay when hide is not true", () => {
  131 + helper.component.block = <any>{ id: 1, hide: false };
  132 + expect(helper.component.canDisplay()).toEqual(true);
  133 + });
  134 +
  135 +});
src/app/layout/blocks/block.component.ts
1 import { Input, Component, Inject } from 'ng-forward'; 1 import { Input, Component, Inject } from 'ng-forward';
2 import { BlockEditionComponent } from './block-edition/block-edition.component'; 2 import { BlockEditionComponent } from './block-edition/block-edition.component';
3 import { BlockService } from '../../../lib/ng-noosfero-api/http/block.service'; 3 import { BlockService } from '../../../lib/ng-noosfero-api/http/block.service';
4 -import {NotificationService} from '../../shared/services/notification.service'; 4 +import { NotificationService } from '../../shared/services/notification.service';
  5 +import { AuthService, SessionService, AuthEvents } from "../../login";
  6 +import { TranslatorService } from "../../shared/services/translator.service";
5 7
6 @Component({ 8 @Component({
7 selector: 'noosfero-block', 9 selector: 'noosfero-block',
8 templateUrl: 'app/layout/blocks/block.html', 10 templateUrl: 'app/layout/blocks/block.html',
9 directives: [BlockEditionComponent] 11 directives: [BlockEditionComponent]
10 }) 12 })
11 -@Inject("$uibModal", "$scope", BlockService, NotificationService) 13 +@Inject("$uibModal", "$scope", "$state", "$rootScope", BlockService, NotificationService, AuthService, SessionService, TranslatorService)
12 export class BlockComponent { 14 export class BlockComponent {
13 15
14 - @Input() block: any;  
15 - @Input() owner: any; 16 + @Input() block: noosfero.Block;
  17 + @Input() owner: noosfero.Profile | noosfero.Environment;
16 18
17 private modalInstance: any = null; 19 private modalInstance: any = null;
18 originalBlock: noosfero.Block; 20 originalBlock: noosfero.Block;
19 21
20 - constructor(private $uibModal: any, private $scope: ng.IScope, private blockService: BlockService, private notificationService: NotificationService) { } 22 + currentUser: noosfero.User;
  23 + isHomepage = true;
  24 + editionMode = false;
  25 +
  26 + constructor(private $uibModal: any,
  27 + private $scope: ng.IScope,
  28 + private $state: ng.ui.IStateService,
  29 + private $rootScope: ng.IRootScopeService,
  30 + private blockService: BlockService,
  31 + private notificationService: NotificationService,
  32 + private authService: AuthService,
  33 + private session: SessionService,
  34 + private translatorService: TranslatorService) {
  35 +
  36 + this.currentUser = this.session.currentUser();
  37 + this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => {
  38 + this.currentUser = this.session.currentUser();
  39 + this.verifyHomepage();
  40 + });
  41 + this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => {
  42 + this.currentUser = this.session.currentUser();
  43 + this.verifyHomepage();
  44 + });
  45 + this.$rootScope.$on("$stateChangeSuccess", (event: ng.IAngularEvent, toState: ng.ui.IState) => {
  46 + this.verifyHomepage();
  47 + });
  48 + }
  49 +
  50 + ngOnInit() {
  51 + this.verifyHomepage();
  52 + }
21 53
22 openEdit() { 54 openEdit() {
  55 + this.editionMode = true;
23 if (!this.originalBlock) this.originalBlock = JSON.parse(JSON.stringify(this.block)); // deep copy of block data 56 if (!this.originalBlock) this.originalBlock = JSON.parse(JSON.stringify(this.block)); // deep copy of block data
24 this.modalInstance = this.$uibModal.open({ 57 this.modalInstance = this.$uibModal.open({
25 templateUrl: 'app/layout/blocks/block-edition/block-edition.html', 58 templateUrl: 'app/layout/blocks/block-edition/block-edition.html',
@@ -32,7 +65,8 @@ export class BlockComponent { @@ -32,7 +65,8 @@ export class BlockComponent {
32 } 65 }
33 66
34 save() { 67 save() {
35 - this.blockService.update(this.attributesToUpdate(this.block)).then(() => { 68 + this.editionMode = false;
  69 + this.blockService.update(this.attributesToUpdate()).then(() => {
36 this.closeEdit(); 70 this.closeEdit();
37 this.notificationService.success({ title: "block.edition.success.title", message: "block.edition.success.message" }); 71 this.notificationService.success({ title: "block.edition.success.title", message: "block.edition.success.message" });
38 }); 72 });
@@ -43,20 +77,59 @@ export class BlockComponent { @@ -43,20 +77,59 @@ export class BlockComponent {
43 } 77 }
44 78
45 cancel() { 79 cancel() {
  80 + this.editionMode = false;
46 this.block = this.originalBlock; 81 this.block = this.originalBlock;
47 this.closeEdit(); 82 this.closeEdit();
48 } 83 }
49 84
50 - protected attributesToUpdate(block: noosfero.Block) { 85 + canDisplay() {
  86 + return this.visible() && this.displayToUser() &&
  87 + this.displayOnLanguage(this.translatorService.currentLanguage()) &&
  88 + !this.block.hide;
  89 + }
  90 +
  91 + protected visible() {
  92 + let display = this.block.settings ? (<any>this.block.settings)['display'] : null;
  93 + return !display || ((this.isHomepage ? display !== "except_home_page" : display !== "home_page_only") && display !== "never");
  94 + }
  95 +
  96 + protected displayToUser() {
  97 + let displayUser = this.block.settings ? (<any>this.block.settings)['display_user'] : null;
  98 + return !displayUser || displayUser === "all" ||
  99 + (this.currentUser ? displayUser === "logged" : displayUser === "not_logged");
  100 + }
  101 +
  102 + protected displayOnLanguage(language: string) {
  103 + let displayLanguage = this.block.settings ? (<any>this.block.settings)['language'] : null;
  104 + return !displayLanguage || displayLanguage === "all" ||
  105 + language === displayLanguage;
  106 + }
  107 +
  108 + protected attributesToUpdate() {
51 return <any>{ 109 return <any>{
52 id: this.block.id, 110 id: this.block.id,
53 - display: this.block.settings.display, 111 + display: (<any>this.block.settings).display,
54 title: this.block.title, 112 title: this.block.title,
55 - display_user: this.block.settings.display_user,  
56 - language: this.block.settings.language 113 + display_user: (<any>this.block.settings).display_user,
  114 + language: (<any>this.block.settings).language
57 }; 115 };
58 } 116 }
59 117
  118 + protected verifyHomepage() {
  119 + if (this.owner && ["Profile", "Community", "Person"].indexOf((<any>this.owner)['type']) >= 0) {
  120 + let profile = <noosfero.Profile>this.owner;
  121 + this.isHomepage = this.$state.current.name === "main.profile.home";
  122 + if (profile.homepage) {
  123 + this.isHomepage = this.isHomepage ||
  124 + (this.$state.current.name === "main.profile.page" && profile.homepage === this.$state.params['page']);
  125 + } else {
  126 + this.isHomepage = this.isHomepage || this.$state.current.name === "main.profile.info";
  127 + }
  128 + } else {
  129 + this.isHomepage = this.$state.current.name === "main.environment.home";
  130 + }
  131 + }
  132 +
60 private closeEdit() { 133 private closeEdit() {
61 if (this.modalInstance) { 134 if (this.modalInstance) {
62 this.modalInstance.close(); 135 this.modalInstance.close();
src/app/layout/blocks/block.html
1 -<div class="noosfero-block" ng-mouseover="displayActions = true" ng-mouseleave="displayActions = false"> 1 +<div ng-show="ctrl.canDisplay() || ctrl.editionMode" ng-class="{'invisible-block': !ctrl.canDisplay()}" class="noosfero-block" ng-mouseover="displayActions = true" ng-mouseleave="displayActions = false">
2 <div ng-show="displayActions" class="actions" permission="ctrl.block.permissions" permission-action="allow_edit"> 2 <div ng-show="displayActions" class="actions" permission="ctrl.block.permissions" permission-action="allow_edit">
3 <button type="submit" class="btn btn-xs btn-default" ng-click="ctrl.openEdit()"><i class="fa fa-edit fa-fw"></i></button> 3 <button type="submit" class="btn btn-xs btn-default" ng-click="ctrl.openEdit()"><i class="fa fa-edit fa-fw"></i></button>
4 </div> 4 </div>
src/app/layout/boxes/box.html
1 <div ng-class="{'col-md-2-5': box.position!=1, 'col-md-7': box.position==1}"> 1 <div ng-class="{'col-md-2-5': box.position!=1, 'col-md-7': box.position==1}">
2 - <noosfero-block ng-repeat="block in box.blocks | displayBlocks:ctrl.isHomepage:ctrl.currentUser | orderBy: 'position'" [block]="block" [owner]="ctrl.owner"></noosfero-block> 2 + <noosfero-block ng-repeat="block in box.blocks | orderBy: 'position'" [block]="block" [owner]="ctrl.owner"></noosfero-block>
3 </div> 3 </div>
src/app/layout/boxes/boxes.component.spec.ts
@@ -53,35 +53,4 @@ describe(&quot;Boxes Component&quot;, () =&gt; { @@ -53,35 +53,4 @@ describe(&quot;Boxes Component&quot;, () =&gt; {
53 expect(helper.component.boxesOrder(properties['boxes'][0])).toEqual(1); 53 expect(helper.component.boxesOrder(properties['boxes'][0])).toEqual(1);
54 expect(helper.component.boxesOrder(properties['boxes'][1])).toEqual(0); 54 expect(helper.component.boxesOrder(properties['boxes'][1])).toEqual(0);
55 }); 55 });
56 -  
57 - it("set isHomepage as false by default", () => {  
58 - expect(helper.component.isHomepage).toBeFalsy();  
59 - });  
60 -  
61 - it("set isHomepage as true when in profile home page", () => {  
62 - state.current = { name: "main.profile.home" };  
63 - helper.component.ngOnInit();  
64 - expect(helper.component.isHomepage).toBeTruthy();  
65 - });  
66 -  
67 - it("set isHomepage as true when in profile info page", () => {  
68 - state.current = { name: "main.profile.info" };  
69 - helper.component.ngOnInit();  
70 - expect(helper.component.isHomepage).toBeTruthy();  
71 - });  
72 -  
73 - it("set isHomepage as true when in profile page", () => {  
74 - state.current = { name: "main.profile.page" };  
75 - state.params = { page: "/page" };  
76 - (<noosfero.Profile>helper.component.owner).homepage = '/page';  
77 - helper.component.ngOnInit();  
78 - expect(helper.component.isHomepage).toBeTruthy();  
79 - });  
80 -  
81 - it("set isHomepage as true when in environment home page", () => {  
82 - state.current = { name: "main.environment.home" };  
83 - helper.component.owner = <noosfero.Environment>{};  
84 - helper.component.ngOnInit();  
85 - expect(helper.component.isHomepage).toBeTruthy();  
86 - });  
87 }); 56 });
src/app/layout/boxes/boxes.component.ts
1 -import {Input, Inject, Component} from 'ng-forward';  
2 -import {SessionService, AuthService, AuthEvents} from "../../login";  
3 -import {DisplayBlocks} from "./display-blocks.filter"; 1 +import {Input, Component} from 'ng-forward';
4 2
5 @Component({ 3 @Component({
6 selector: "noosfero-boxes", 4 selector: "noosfero-boxes",
7 - templateUrl: "app/layout/boxes/boxes.html",  
8 - directives: [DisplayBlocks] 5 + templateUrl: "app/layout/boxes/boxes.html"
9 }) 6 })
10 -@Inject("SessionService", 'AuthService', "$state", "$rootScope")  
11 export class BoxesComponent { 7 export class BoxesComponent {
12 8
13 @Input() boxes: noosfero.Box[]; 9 @Input() boxes: noosfero.Box[];
14 @Input() owner: noosfero.Profile | noosfero.Environment; 10 @Input() owner: noosfero.Profile | noosfero.Environment;
15 11
16 - currentUser: noosfero.User;  
17 - isHomepage = true;  
18 -  
19 - constructor(private session: SessionService,  
20 - private authService: AuthService,  
21 - private $state: ng.ui.IStateService,  
22 - private $rootScope: ng.IRootScopeService) {  
23 -  
24 - this.currentUser = this.session.currentUser();  
25 - this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => {  
26 - this.currentUser = this.session.currentUser();  
27 - this.verifyHomepage();  
28 - });  
29 - this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => {  
30 - this.currentUser = this.session.currentUser();  
31 - this.verifyHomepage();  
32 - });  
33 - this.$rootScope.$on("$stateChangeSuccess", (event: ng.IAngularEvent, toState: ng.ui.IState) => {  
34 - this.verifyHomepage();  
35 - });  
36 - }  
37 -  
38 - ngOnInit() {  
39 - this.verifyHomepage();  
40 - }  
41 -  
42 boxesOrder(box: noosfero.Box) { 12 boxesOrder(box: noosfero.Box) {
43 if (box.position === 2) return 0; 13 if (box.position === 2) return 0;
44 return box.position; 14 return box.position;
45 } 15 }
46 -  
47 - private verifyHomepage() {  
48 - if (this.owner && ["Profile", "Community", "Person"].indexOf((<any>this.owner)['type']) >= 0) {  
49 - let profile = <noosfero.Profile>this.owner;  
50 - this.isHomepage = this.$state.current.name === "main.profile.home";  
51 - if (profile.homepage) {  
52 - this.isHomepage = this.isHomepage ||  
53 - (this.$state.current.name === "main.profile.page" && profile.homepage === this.$state.params['page']);  
54 - } else {  
55 - this.isHomepage = this.isHomepage || this.$state.current.name === "main.profile.info";  
56 - }  
57 - } else {  
58 - this.isHomepage = this.$state.current.name === "main.environment.home";  
59 - }  
60 - }  
61 } 16 }
src/app/layout/boxes/display-blocks.filter.spec.ts
@@ -1,100 +0,0 @@ @@ -1,100 +0,0 @@
1 -import {quickCreateComponent} from "../../../spec/helpers";  
2 -import {DisplayBlocks} from './display-blocks.filter';  
3 -  
4 -describe("Filters", () => {  
5 - describe("Display Blocks Filter", () => {  
6 -  
7 - let translatorService = jasmine.createSpyObj("translatorService", ["currentLanguage"]);  
8 -  
9 - it("not fail when blocks is null", done => {  
10 - let filter = new DisplayBlocks(translatorService);  
11 - expect(filter.transform(null, true, <noosfero.User>{})).toEqual([]);  
12 - done();  
13 - });  
14 -  
15 - it("return blocks when no setting is passed", done => {  
16 - let blocks = [{}];  
17 - let filter = new DisplayBlocks(translatorService);  
18 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks);  
19 - done();  
20 - });  
21 -  
22 - it("return blocks when no display is passed", done => {  
23 - let blocks = [{ setting: {} }];  
24 - let filter = new DisplayBlocks(translatorService);  
25 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks);  
26 - done();  
27 - });  
28 -  
29 - it("filter invisible blocks", done => {  
30 - let blocks = [{ settings: { display: "never" } }];  
31 - let filter = new DisplayBlocks(translatorService);  
32 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);  
33 - done();  
34 - });  
35 -  
36 - it("filter blocks with except_home_page in homepage", done => {  
37 - let blocks = [{ settings: { display: "except_home_page" } }];  
38 - let filter = new DisplayBlocks(translatorService);  
39 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);  
40 - done();  
41 - });  
42 -  
43 - it("filter blocks with home_page_only outside homepage", done => {  
44 - let blocks = [{ settings: { display: "home_page_only" } }];  
45 - let filter = new DisplayBlocks(translatorService);  
46 - expect(filter.transform(<any>blocks, false, <noosfero.User>{})).toEqual([]);  
47 - done();  
48 - });  
49 -  
50 - it("show all blocks when display_user is all for logged user", done => {  
51 - let blocks = [{ settings: { display_user: "all" } }];  
52 - let filter = new DisplayBlocks(translatorService);  
53 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks);  
54 - done();  
55 - });  
56 -  
57 - it("show all blocks when display_user is all for not logged user", done => {  
58 - let blocks = [{ settings: { display_user: "all" } }];  
59 - let filter = new DisplayBlocks(translatorService);  
60 - expect(filter.transform(<any>blocks, true, null)).toEqual(blocks);  
61 - done();  
62 - });  
63 -  
64 - it("filter blocks when display_user is logged for not logged user", done => {  
65 - let blocks = [{ settings: { display_user: "logged" } }];  
66 - let filter = new DisplayBlocks(translatorService);  
67 - expect(filter.transform(<any>blocks, true, null)).toEqual([]);  
68 - done();  
69 - });  
70 -  
71 - it("filter blocks when display_user is not_logged for logged user", done => {  
72 - let blocks = [{ settings: { display_user: "not_logged" } }];  
73 - let filter = new DisplayBlocks(translatorService);  
74 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);  
75 - done();  
76 - });  
77 -  
78 - it("filter blocks with different language", done => {  
79 - let blocks = [{ settings: { language: "en" } }];  
80 - translatorService.currentLanguage = jasmine.createSpy("currentLanguage").and.returnValue("pt");  
81 - let filter = new DisplayBlocks(translatorService);  
82 - expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);  
83 - done();  
84 - });  
85 -  
86 - it("filter blocks when hide is true", done => {  
87 - let blocks = [{ hide: true }];  
88 - let filter = new DisplayBlocks(translatorService);  
89 - expect(filter.transform(<any>blocks, true, null)).toEqual([]);  
90 - done();  
91 - });  
92 -  
93 - it("not filter blocks when hide is not true", done => {  
94 - let blocks = [{ id: 1, hide: false }, { id: 2 }];  
95 - let filter = new DisplayBlocks(translatorService);  
96 - expect(filter.transform(<any>blocks, true, null)).toEqual(blocks);  
97 - done();  
98 - });  
99 - });  
100 -});  
src/app/layout/boxes/display-blocks.filter.ts
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -import {Pipe, Inject} from "ng-forward";  
2 -import {TranslatorService} from "../../shared/services/translator.service";  
3 -  
4 -@Pipe("displayBlocks")  
5 -@Inject(TranslatorService)  
6 -export class DisplayBlocks {  
7 -  
8 - constructor(private translatorService: TranslatorService) { }  
9 -  
10 - transform(blocks: noosfero.Block[], isHomepage: boolean, currentUser: noosfero.User) {  
11 - let selected: noosfero.Block[] = [];  
12 - blocks = blocks || [];  
13 - for (let block of blocks) {  
14 - if (this.visible(block, isHomepage) && this.displayToUser(block, currentUser) &&  
15 - this.displayOnLanguage(block, this.translatorService.currentLanguage())  
16 - && !block.hide) {  
17 - selected.push(block);  
18 - }  
19 - }  
20 - return selected;  
21 - }  
22 -  
23 - private visible(block: noosfero.Block, isHomepage: boolean) {  
24 - let display = block.settings ? (<any>block.settings)['display'] : null;  
25 - return !display || ((isHomepage ? display !== "except_home_page" : display !== "home_page_only") && display !== "never");  
26 - }  
27 -  
28 - private displayToUser(block: noosfero.Block, currentUser: noosfero.User) {  
29 - let displayUser = block.settings ? (<any>block.settings)['display_user'] : null;  
30 - return !displayUser || displayUser === "all" ||  
31 - (currentUser ? displayUser === "logged" : displayUser === "not_logged");  
32 - }  
33 -  
34 - private displayOnLanguage(block: noosfero.Block, language: string) {  
35 - let displayLanguage = block.settings ? (<any>block.settings)['language'] : null;  
36 - return !displayLanguage || displayLanguage === "all" ||  
37 - language === displayLanguage;  
38 - }  
39 -}  
src/lib/ng-noosfero-api/interfaces/block.ts
@@ -5,5 +5,6 @@ namespace noosfero { @@ -5,5 +5,6 @@ namespace noosfero {
5 limit: number; 5 limit: number;
6 api_content: any; 6 api_content: any;
7 hide: boolean; 7 hide: boolean;
  8 + title: string;
8 } 9 }
9 } 10 }