Commit 62f85230b4028963680cebe137982f1b6e3a0caa
1 parent
167edf00
Exists in
master
and in
11 other branches
Move logic that show/hide blocks to block component
Showing
9 changed files
with
223 additions
and
229 deletions
Show diff stats
| ... | ... | @@ -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 | 1 | import { Input, Component, Inject } from 'ng-forward'; |
| 2 | 2 | import { BlockEditionComponent } from './block-edition/block-edition.component'; |
| 3 | 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 | 8 | @Component({ |
| 7 | 9 | selector: 'noosfero-block', |
| 8 | 10 | templateUrl: 'app/layout/blocks/block.html', |
| 9 | 11 | directives: [BlockEditionComponent] |
| 10 | 12 | }) |
| 11 | -@Inject("$uibModal", "$scope", BlockService, NotificationService) | |
| 13 | +@Inject("$uibModal", "$scope", "$state", "$rootScope", BlockService, NotificationService, AuthService, SessionService, TranslatorService) | |
| 12 | 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 | 19 | private modalInstance: any = null; |
| 18 | 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 | 54 | openEdit() { |
| 55 | + this.editionMode = true; | |
| 23 | 56 | if (!this.originalBlock) this.originalBlock = JSON.parse(JSON.stringify(this.block)); // deep copy of block data |
| 24 | 57 | this.modalInstance = this.$uibModal.open({ |
| 25 | 58 | templateUrl: 'app/layout/blocks/block-edition/block-edition.html', |
| ... | ... | @@ -32,7 +65,8 @@ export class BlockComponent { |
| 32 | 65 | } |
| 33 | 66 | |
| 34 | 67 | save() { |
| 35 | - this.blockService.update(this.attributesToUpdate(this.block)).then(() => { | |
| 68 | + this.editionMode = false; | |
| 69 | + this.blockService.update(this.attributesToUpdate()).then(() => { | |
| 36 | 70 | this.closeEdit(); |
| 37 | 71 | this.notificationService.success({ title: "block.edition.success.title", message: "block.edition.success.message" }); |
| 38 | 72 | }); |
| ... | ... | @@ -43,20 +77,59 @@ export class BlockComponent { |
| 43 | 77 | } |
| 44 | 78 | |
| 45 | 79 | cancel() { |
| 80 | + this.editionMode = false; | |
| 46 | 81 | this.block = this.originalBlock; |
| 47 | 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 | 109 | return <any>{ |
| 52 | 110 | id: this.block.id, |
| 53 | - display: this.block.settings.display, | |
| 111 | + display: (<any>this.block.settings).display, | |
| 54 | 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 | 133 | private closeEdit() { |
| 61 | 134 | if (this.modalInstance) { |
| 62 | 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 | 2 | <div ng-show="displayActions" class="actions" permission="ctrl.block.permissions" permission-action="allow_edit"> |
| 3 | 3 | <button type="submit" class="btn btn-xs btn-default" ng-click="ctrl.openEdit()"><i class="fa fa-edit fa-fw"></i></button> |
| 4 | 4 | </div> | ... | ... |
src/app/layout/boxes/box.html
| 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 | 3 | </div> | ... | ... |
src/app/layout/boxes/boxes.component.spec.ts
| ... | ... | @@ -53,35 +53,4 @@ describe("Boxes Component", () => { |
| 53 | 53 | expect(helper.component.boxesOrder(properties['boxes'][0])).toEqual(1); |
| 54 | 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 | 3 | @Component({ |
| 6 | 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 | 7 | export class BoxesComponent { |
| 12 | 8 | |
| 13 | 9 | @Input() boxes: noosfero.Box[]; |
| 14 | 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 | 12 | boxesOrder(box: noosfero.Box) { |
| 43 | 13 | if (box.position === 2) return 0; |
| 44 | 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 | -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 | -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 | -} |