Commit ffdb32a2277dbd5d5f208b555a872bbf004736a1
1 parent
57499aeb
Exists in
master
and in
26 other branches
Filter blocks by language in display blocks filter
Showing
3 changed files
with
35 additions
and
12 deletions
Show diff stats
src/app/layout/boxes/boxes.component.spec.ts
... | ... | @@ -33,12 +33,14 @@ describe("Boxes Component", () => { |
33 | 33 | providers: [ |
34 | 34 | helpers.createProviderToValue('SessionService', helpers.mocks.sessionWithCurrentUser({})), |
35 | 35 | helpers.createProviderToValue('AuthService', helpers.mocks.authService), |
36 | - helpers.createProviderToValue('$state', state) | |
36 | + helpers.createProviderToValue('$state', state), | |
37 | + helpers.createProviderToValue('TranslatorService', translatorService) | |
37 | 38 | ] |
38 | 39 | }); |
39 | 40 | helper = new ComponentTestHelper<BoxesComponent>(cls, done); |
40 | 41 | }); |
41 | 42 | |
43 | + let translatorService = jasmine.createSpyObj("translatorService", ["currentLanguage"]); | |
42 | 44 | let state = jasmine.createSpyObj("state", ["current"]); |
43 | 45 | state.current = { name: "" }; |
44 | 46 | ... | ... |
src/app/layout/boxes/display-blocks.filter.spec.ts
... | ... | @@ -4,71 +4,81 @@ import {DisplayBlocks} from './display-blocks.filter'; |
4 | 4 | describe("Filters", () => { |
5 | 5 | describe("Display Blocks Filter", () => { |
6 | 6 | |
7 | + let translatorService = jasmine.createSpyObj("translatorService", ["currentLanguage"]); | |
8 | + | |
7 | 9 | it("not fail when blocks is null", done => { |
8 | - let filter = new DisplayBlocks(); | |
10 | + let filter = new DisplayBlocks(translatorService); | |
9 | 11 | expect(filter.transform(null, true, <noosfero.User>{})).toEqual([]); |
10 | 12 | done(); |
11 | 13 | }); |
12 | 14 | |
13 | 15 | it("return blocks when no setting is passed", done => { |
14 | 16 | let blocks = [{}]; |
15 | - let filter = new DisplayBlocks(); | |
17 | + let filter = new DisplayBlocks(translatorService); | |
16 | 18 | expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks); |
17 | 19 | done(); |
18 | 20 | }); |
19 | 21 | |
20 | 22 | it("return blocks when no display is passed", done => { |
21 | 23 | let blocks = [{ setting: {} }]; |
22 | - let filter = new DisplayBlocks(); | |
24 | + let filter = new DisplayBlocks(translatorService); | |
23 | 25 | expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks); |
24 | 26 | done(); |
25 | 27 | }); |
26 | 28 | |
27 | 29 | it("filter invisible blocks", done => { |
28 | 30 | let blocks = [{ settings: { display: "never" } }]; |
29 | - let filter = new DisplayBlocks(); | |
31 | + let filter = new DisplayBlocks(translatorService); | |
30 | 32 | expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]); |
31 | 33 | done(); |
32 | 34 | }); |
33 | 35 | |
34 | 36 | it("filter blocks with except_home_page in homepage", done => { |
35 | 37 | let blocks = [{ settings: { display: "except_home_page" } }]; |
36 | - let filter = new DisplayBlocks(); | |
38 | + let filter = new DisplayBlocks(translatorService); | |
37 | 39 | expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]); |
38 | 40 | done(); |
39 | 41 | }); |
40 | 42 | |
41 | 43 | it("filter blocks with home_page_only outside homepage", done => { |
42 | 44 | let blocks = [{ settings: { display: "home_page_only" } }]; |
43 | - let filter = new DisplayBlocks(); | |
45 | + let filter = new DisplayBlocks(translatorService); | |
44 | 46 | expect(filter.transform(<any>blocks, false, <noosfero.User>{})).toEqual([]); |
45 | 47 | done(); |
46 | 48 | }); |
47 | 49 | |
48 | 50 | it("show all blocks when display_user is all for logged user", done => { |
49 | 51 | let blocks = [{ settings: { display_user: "all" } }]; |
50 | - let filter = new DisplayBlocks(); | |
52 | + let filter = new DisplayBlocks(translatorService); | |
51 | 53 | expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks); |
52 | 54 | done(); |
53 | 55 | }); |
54 | 56 | |
55 | 57 | it("show all blocks when display_user is all for not logged user", done => { |
56 | 58 | let blocks = [{ settings: { display_user: "all" } }]; |
57 | - let filter = new DisplayBlocks(); | |
59 | + let filter = new DisplayBlocks(translatorService); | |
58 | 60 | expect(filter.transform(<any>blocks, true, null)).toEqual(blocks); |
59 | 61 | done(); |
60 | 62 | }); |
61 | 63 | |
62 | 64 | it("filter blocks when display_user is logged for not logged user", done => { |
63 | 65 | let blocks = [{ settings: { display_user: "logged" } }]; |
64 | - let filter = new DisplayBlocks(); | |
66 | + let filter = new DisplayBlocks(translatorService); | |
65 | 67 | expect(filter.transform(<any>blocks, true, null)).toEqual([]); |
66 | 68 | done(); |
67 | 69 | }); |
68 | 70 | |
69 | 71 | it("filter blocks when display_user is not_logged for logged user", done => { |
70 | 72 | let blocks = [{ settings: { display_user: "not_logged" } }]; |
71 | - let filter = new DisplayBlocks(); | |
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); | |
72 | 82 | expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]); |
73 | 83 | done(); |
74 | 84 | }); | ... | ... |
src/app/layout/boxes/display-blocks.filter.ts
1 | 1 | import {Pipe, Inject} from "ng-forward"; |
2 | +import {TranslatorService} from "../../shared/services/translator.service"; | |
2 | 3 | |
3 | 4 | @Pipe("displayBlocks") |
5 | +@Inject(TranslatorService) | |
4 | 6 | export class DisplayBlocks { |
5 | 7 | |
8 | + constructor(private translatorService: TranslatorService) { } | |
9 | + | |
6 | 10 | transform(blocks: noosfero.Block[], isHomepage: boolean, currentUser: noosfero.User) { |
7 | 11 | let selected: noosfero.Block[] = []; |
8 | 12 | blocks = blocks || []; |
9 | 13 | for (let block of blocks) { |
10 | - if (this.visible(block, isHomepage) && this.displayToUser(block, currentUser)) { | |
14 | + if (this.visible(block, isHomepage) && this.displayToUser(block, currentUser) && | |
15 | + this.displayOnLanguage(block, this.translatorService.currentLanguage())) { | |
11 | 16 | selected.push(block); |
12 | 17 | } |
13 | 18 | } |
... | ... | @@ -24,4 +29,10 @@ export class DisplayBlocks { |
24 | 29 | return !displayUser || displayUser === "all" || |
25 | 30 | (currentUser ? displayUser === "logged" : displayUser === "not_logged"); |
26 | 31 | } |
32 | + | |
33 | + private displayOnLanguage(block: noosfero.Block, language: string) { | |
34 | + let displayLanguage = block.settings ? (<any>block.settings)['language'] : null; | |
35 | + return !displayLanguage || displayLanguage === "all" || | |
36 | + language === displayLanguage; | |
37 | + } | |
27 | 38 | } | ... | ... |