Commit bcab3c27e94b1208809542efd8d5342468aba431
1 parent
0528af25
Exists in
updated_signup_page
and in
1 other branch
Ticket #45: [WIP] Tags block
Showing
8 changed files
with
128 additions
and
2 deletions
Show diff stats
src/app/index.ts
... | ... | @@ -18,7 +18,7 @@ let noosferoApp: any = bundle("noosferoApp", MainComponent, ["ngAnimate", "ngCoo |
18 | 18 | "angular-bind-html-compile", "angularMoment", "angular.filter", "akoenig.deckgrid", |
19 | 19 | "angular-timeline", "duScroll", "oitozero.ngSweetAlert", |
20 | 20 | "pascalprecht.translate", "tmh.dynamicLocale", "angularLoad", |
21 | - "angular-click-outside"]).publish(); | |
21 | + "angular-click-outside", "ngTagCloud"]).publish(); | |
22 | 22 | |
23 | 23 | NoosferoApp.angularModule = noosferoApp; |
24 | 24 | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +// TODO | ... | ... |
... | ... | @@ -0,0 +1,38 @@ |
1 | +import {Component, Inject, Input} from "ng-forward"; | |
2 | +import {EnvironmentService} from "../../../../lib/ng-noosfero-api/http/environment.service"; | |
3 | + | |
4 | +@Component({ | |
5 | + selector: "noosfero-tags-block", | |
6 | + templateUrl: 'app/layout/blocks/tags/tags-block.html' | |
7 | +}) | |
8 | +@Inject(EnvironmentService, "$state") | |
9 | +export class TagsBlockComponent { | |
10 | + | |
11 | + @Input() block: any; | |
12 | + @Input() owner: any; | |
13 | + | |
14 | + profile: any; | |
15 | + tags: any; | |
16 | + | |
17 | + tagsLoaded: boolean = false; | |
18 | + | |
19 | + constructor(private environmentService: EnvironmentService, private $state: any) { | |
20 | + } | |
21 | + | |
22 | + ngOnInit() { | |
23 | + this.profile = this.owner; | |
24 | + this.tags = []; | |
25 | + let tag = ''; | |
26 | + | |
27 | + this.environmentService.getTags() | |
28 | + .then((result: noosfero.RestResult<{}>) => { | |
29 | + for (tag in result) { | |
30 | + if (result.hasOwnProperty(tag)) { | |
31 | + let size: number = result[tag]; | |
32 | + this.tags.push({ text: tag, weight: size, link: '/tag/' + tag }); | |
33 | + } | |
34 | + } | |
35 | + this.tagsLoaded = true; | |
36 | + }); | |
37 | + } | |
38 | +} | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +<!-- | |
2 | +<div deckgrid source="ctrl.tags" class="deckgrid"> | |
3 | + <div class="a-card panel media" ng-click="mother.ctrl.openTag(card);"> | |
4 | + <div class="header media-body"> | |
5 | + <h5 class="title media-heading" ng-bind="card.name"></h5> | |
6 | + <div class="subheader" ng-bind="card.count"></div> | |
7 | + </div> | |
8 | + </div> | |
9 | +</div> | |
10 | +--> | |
11 | +<ng-tag-cloud cloud-width="250" cloud-height="250" cloud-data="ctrl.tags"></ng-tag-cloud> | ... | ... |
... | ... | @@ -0,0 +1,65 @@ |
1 | +.block.tagsblock { | |
2 | + .deckgrid[deckgrid]::before { | |
3 | + font-size: 0; /* See https://github.com/akoenig/angular-deckgrid/issues/14#issuecomment-35728861 */ | |
4 | + visibility: hidden; | |
5 | + } | |
6 | + .author { | |
7 | + img { | |
8 | + width: 30px; | |
9 | + height: 30px; | |
10 | + } | |
11 | + } | |
12 | + .header { | |
13 | + .subheader { | |
14 | + color: #C1C1C1; | |
15 | + font-size: 10px; | |
16 | + } | |
17 | + } | |
18 | + .post-lead { | |
19 | + color: #8E8E8E; | |
20 | + font-size: 14px; | |
21 | + } | |
22 | + .article-image { | |
23 | + margin: 10px 0; | |
24 | + } | |
25 | +} | |
26 | + | |
27 | +.col-md-2-5 { | |
28 | + .deckgrid[deckgrid]::before { | |
29 | + content: '1 .deck-column'; | |
30 | + } | |
31 | +} | |
32 | + | |
33 | +.col-md-7 { | |
34 | + .block.tagsblock { | |
35 | + background-color: transparent; | |
36 | + border: 0; | |
37 | + | |
38 | + .deckgrid[deckgrid]::before { | |
39 | + content: '3 .deck-column'; | |
40 | + } | |
41 | + | |
42 | + .panel-heading { | |
43 | + display: none; | |
44 | + } | |
45 | + .panel-body { | |
46 | + padding: 0; | |
47 | + } | |
48 | + | |
49 | + .deckgrid { | |
50 | + .column { | |
51 | + float: left; | |
52 | + } | |
53 | + | |
54 | + .deck-column { | |
55 | + @extend .col-md-4; | |
56 | + padding: 0; | |
57 | + | |
58 | + .a-card { | |
59 | + padding: 10px; | |
60 | + margin: 3px; | |
61 | + } | |
62 | + } | |
63 | + } | |
64 | + } | |
65 | +} | ... | ... |
src/app/main/main.component.ts
... | ... | @@ -15,6 +15,7 @@ import {RecentDocumentsBlockComponent} from "../layout/blocks/recent-documents/r |
15 | 15 | import {ProfileImageBlockComponent} from "../layout/blocks/profile-image/profile-image-block.component"; |
16 | 16 | import {RawHTMLBlockComponent} from "../layout/blocks/raw-html/raw-html-block.component"; |
17 | 17 | import {StatisticsBlockComponent} from "../layout/blocks/statistics/statistics-block.component"; |
18 | +import {TagsBlockComponent} from "../layout/blocks/tags/tags-block.component"; | |
18 | 19 | |
19 | 20 | import {MembersBlockComponent} from "./../layout/blocks/members/members-block.component"; |
20 | 21 | import {CommunitiesBlockComponent} from "./../layout/blocks/communities/communities-block.component"; |
... | ... | @@ -98,7 +99,7 @@ export class EnvironmentContent { |
98 | 99 | LinkListBlockComponent, CommunitiesBlockComponent, HtmlEditorComponent, |
99 | 100 | MainBlockComponent, RecentDocumentsBlockComponent, Navbar, SidebarComponent, ProfileImageBlockComponent, |
100 | 101 | MembersBlockComponent, NoosferoTemplate, DateFormat, RawHTMLBlockComponent, StatisticsBlockComponent, |
101 | - LoginBlockComponent | |
102 | + LoginBlockComponent, TagsBlockComponent | |
102 | 103 | ].concat(plugins.mainComponents).concat(plugins.hotspots), |
103 | 104 | |
104 | 105 | providers: [AuthService, SessionService, NotificationService, BodyStateClassesService] | ... | ... |
src/lib/ng-noosfero-api/http/environment.service.ts
... | ... | @@ -34,6 +34,14 @@ export class EnvironmentService { |
34 | 34 | return deferred.promise; |
35 | 35 | } |
36 | 36 | |
37 | + getTags(): ng.IPromise<{}> { | |
38 | + let p = this.restangular.one('environment').customGET('tags'); | |
39 | + let deferred = this.$q.defer<{}>(); | |
40 | + p.then(this.getHandleSuccessFunction<{}>(deferred)); | |
41 | + p.catch(this.getHandleErrorFunction<{}>(deferred)); | |
42 | + return deferred.promise; | |
43 | + } | |
44 | + | |
37 | 45 | /** TODO - Please, use the base class RestangularService |
38 | 46 | * (description) |
39 | 47 | * | ... | ... |