Commit 30411d64be306f017ae4c242ce16929a7c62774b
1 parent
e80763e4
Exists in
master
and in
35 other branches
Fix article component
Showing
5 changed files
with
50 additions
and
54 deletions
Show diff stats
src/app/components/noosfero-articles/article/article.directive.ts
1 | import { bundle, Input, Inject, Component, Directive } from 'ng-forward'; | 1 | import { bundle, Input, Inject, Component, Directive } from 'ng-forward'; |
2 | +import {NoosferoArticleBlog} from "../blog/blog.component"; | ||
2 | 3 | ||
3 | @Component({ | 4 | @Component({ |
4 | selector: 'noosfero-default-article', | 5 | selector: 'noosfero-default-article', |
5 | - templateUrl: 'app/components/noosfero-articles/article/article.html', | ||
6 | - providers: ['$injector', '$compile'] | 6 | + templateUrl: 'app/components/noosfero-articles/article/article.html' |
7 | }) | 7 | }) |
8 | export class ArticleView { | 8 | export class ArticleView { |
9 | + | ||
10 | + @Input() article: any; | ||
11 | + @Input() profile: any; | ||
12 | + | ||
9 | constructor() { | 13 | constructor() { |
10 | console.log("ARTICLE VIEW"); | 14 | console.log("ARTICLE VIEW"); |
11 | } | 15 | } |
12 | } | 16 | } |
13 | 17 | ||
14 | -/** | ||
15 | -* <noosfero-article></noosfero-article> | ||
16 | -* | ||
17 | -* | ||
18 | -*/ | ||
19 | - | ||
20 | -@Directive({ | ||
21 | - selector: '[noosfero-article]', | ||
22 | - providers: [] | 18 | +@Component({ |
19 | + selector: 'noosfero-article', | ||
20 | + template: '<div></div>', | ||
21 | + directives: [ArticleView, NoosferoArticleBlog] | ||
23 | }) | 22 | }) |
24 | -@Inject("$element") | ||
25 | -@Inject("$scope") | ||
26 | -@Inject("$injector") | ||
27 | -@Inject("$compile") | 23 | +@Inject("$element", "$scope", "$injector", "$compile") |
28 | export class ArticleDirective { | 24 | export class ArticleDirective { |
29 | 25 | ||
30 | - constructor($element: any, $scope: ng.IScope, private $injector: ng.auto.IInjectorService, private $compile: ng.ICompileService) { | ||
31 | - var specificDirective = 'noosfero' + $scope["vm"].article.type; | ||
32 | - if ($injector.has(specificDirective + 'Directive')) { | ||
33 | - var directiveName = specificDirective.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); | ||
34 | - $element.replaceWith($compile('<' + directiveName + ' article="vm.article" profile="vm.profile"></' + directiveName + '>')($scope)); | ||
35 | - //$element.html($compile('<' + directiveName + ' article="vm.article" profile="vm.profile"></' + directiveName + '>')(scope)) | ||
36 | - } else { | ||
37 | - //TODO | 26 | + @Input() article: any; |
27 | + @Input() profile: any; | ||
28 | + directiveName: string; | ||
29 | + | ||
30 | + ngOnInit() { | ||
31 | + let specificDirective = 'noosfero' + this.article.type; | ||
32 | + this.directiveName = "noosfero-default-article"; | ||
33 | + if (this.$injector.has(specificDirective + 'Directive')) { | ||
34 | + this.directiveName = specificDirective.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); | ||
38 | } | 35 | } |
36 | + this.$element.replaceWith(this.$compile('<' + this.directiveName + ' [article]="ctrl.article" [profile]="ctrl.profile"></' + this.directiveName + '>')(this.$scope)); | ||
39 | } | 37 | } |
40 | -} | ||
41 | 38 | ||
42 | -//bundle('noosferoApp', ArticleDirective).publish(); | 39 | + constructor(private $element: any, private $scope: ng.IScope, private $injector: ng.auto.IInjectorService, private $compile: ng.ICompileService) { |
40 | + | ||
41 | + } | ||
42 | +} |
src/app/components/noosfero-articles/article/article.html
1 | <div class="article"> | 1 | <div class="article"> |
2 | <div class="page-header"> | 2 | <div class="page-header"> |
3 | - <h3 ng-bind="vm.article.title"></h3> | 3 | + <h3 ng-bind="ctrl.article.title"></h3> |
4 | </div> | 4 | </div> |
5 | 5 | ||
6 | <div class="sub-header clearfix"> | 6 | <div class="sub-header clearfix"> |
7 | <div class="page-info pull-right small text-muted"> | 7 | <div class="page-info pull-right small text-muted"> |
8 | <span class="time"> | 8 | <span class="time"> |
9 | - <i class="fa fa-clock-o"></i> <span am-time-ago="vm.article.created_at"></span> | 9 | + <i class="fa fa-clock-o"></i> <span am-time-ago="ctrl.article.created_at"></span> |
10 | </span> | 10 | </span> |
11 | - <span class="author" ng-if="vm.article.author"> | 11 | + <span class="author" ng-if="ctrl.article.author"> |
12 | <i class="fa fa-user"></i> | 12 | <i class="fa fa-user"></i> |
13 | - <a ui-sref="main.profile({profile: vm.article.author.identifier})"> | ||
14 | - <span class="author-name" ng-bind="vm.article.author.name"></span> | 13 | + <a ui-sref="main.profile({profile: ctrl.article.author.identifier})"> |
14 | + <span class="author-name" ng-bind="ctrl.article.author.name"></span> | ||
15 | </a> | 15 | </a> |
16 | </span> | 16 | </span> |
17 | </div> | 17 | </div> |
18 | </div> | 18 | </div> |
19 | 19 | ||
20 | <div class="page-body"> | 20 | <div class="page-body"> |
21 | - <div ng-bind-html="vm.article.body"></div> | 21 | + <div ng-bind-html="ctrl.article.body"></div> |
22 | </div> | 22 | </div> |
23 | </div> | 23 | </div> |
src/app/components/noosfero-articles/blog/blog.component.ts
1 | -import {Component, Input} from "ng-forward"; | 1 | +import {Component, Input, Inject} from "ng-forward"; |
2 | 2 | ||
3 | 3 | ||
4 | @Component({ | 4 | @Component({ |
5 | selector: "noosfero-blog", | 5 | selector: "noosfero-blog", |
6 | - templateUrl: "app/components/noosfero-articles/blog/blog.html", | ||
7 | - inputs: ["article", "profile"] | 6 | + templateUrl: "app/components/noosfero-articles/blog/blog.html" |
8 | }) | 7 | }) |
8 | +@Inject("noosfero", "$scope") | ||
9 | export class NoosferoArticleBlog { | 9 | export class NoosferoArticleBlog { |
10 | + | ||
10 | @Input() article; | 11 | @Input() article; |
11 | @Input() profile; | 12 | @Input() profile; |
12 | 13 | ||
@@ -14,12 +15,12 @@ export class NoosferoArticleBlog { | @@ -14,12 +15,12 @@ export class NoosferoArticleBlog { | ||
14 | private perPage: number; | 15 | private perPage: number; |
15 | private currentPage: number; | 16 | private currentPage: number; |
16 | private totalPosts: number = 0; | 17 | private totalPosts: number = 0; |
17 | - constructor(private noosferoService: any) { | ||
18 | - this.loadPage(); | 18 | + |
19 | + constructor(private noosfero: any, private $scope) { | ||
19 | } | 20 | } |
20 | 21 | ||
21 | - loadPage() { | ||
22 | - this.noosferoService.articles.one(this.article.id).customGET("children", { | 22 | + ngOnInit() { |
23 | + this.noosfero.articles.one(this.article.id).customGET("children", { | ||
23 | content_type: "TinyMceArticle", | 24 | content_type: "TinyMceArticle", |
24 | per_page: this.perPage, | 25 | per_page: this.perPage, |
25 | page: this.currentPage | 26 | page: this.currentPage |
@@ -29,4 +30,4 @@ export class NoosferoArticleBlog { | @@ -29,4 +30,4 @@ export class NoosferoArticleBlog { | ||
29 | }); | 30 | }); |
30 | } | 31 | } |
31 | 32 | ||
32 | -} | ||
33 | \ No newline at end of file | 33 | \ No newline at end of file |
34 | +} |
src/app/components/noosfero-articles/blog/blog.html
1 | <div class="blog"> | 1 | <div class="blog"> |
2 | - <div class="blog-cover" ng-show="$ctrl.article.image"> | ||
3 | - <img ng-src="{{$ctrl.article.image.url}}" class="img-responsive"> | ||
4 | - <h3 ng-bind="$ctrl.article.title"></h3> | 2 | + <div class="blog-cover" ng-show="ctrl.article.image"> |
3 | + <img ng-src="{{ctrl.article.image.url}}" class="img-responsive"> | ||
4 | + <h3 ng-bind="ctrl.article.title"></h3> | ||
5 | </div> | 5 | </div> |
6 | 6 | ||
7 | - <div class="page-header" ng-show="!$ctrl.article.image"> | ||
8 | - <h3 ng-bind="$ctrl.article.title"></h3> | 7 | + <div class="page-header" ng-show="!ctrl.article.image"> |
8 | + <h3 ng-bind="ctrl.article.title"></h3> | ||
9 | </div> | 9 | </div> |
10 | 10 | ||
11 | <div> | 11 | <div> |
12 | - <div ng-repeat="child in $ctrl.posts | orderBy: 'created_at':true"> | 12 | + <div ng-repeat="child in ctrl.posts | orderBy: 'created_at':true"> |
13 | <div class="page-header"> | 13 | <div class="page-header"> |
14 | - <a class="title" ui-sref="main.profile.page({profile: $ctrl.profile.identifier, page: child.path})"><h4 ng-bind="child.title"></h4></a> | 14 | + <a class="title" ui-sref="main.profile.page({profile: ctrl.profile.identifier, page: child.path})"><h4 ng-bind="child.title"></h4></a> |
15 | <div class="post-lead" ng-bind-html="child.body | truncate: 500: '...': true"></div> | 15 | <div class="post-lead" ng-bind-html="child.body | truncate: 500: '...': true"></div> |
16 | </div> | 16 | </div> |
17 | </div> | 17 | </div> |
18 | </div> | 18 | </div> |
19 | 19 | ||
20 | - <pagination ng-model="$ctrl.currentPage" total-items="$ctrl.totalPosts" class="pagination-sm center-block" | ||
21 | - boundary-links="true" items-per-page="$ctrl.perPage" ng-change="$ctrl.loadPage()" | 20 | + <pagination ng-model="ctrl.currentPage" total-items="ctrl.totalPosts" class="pagination-sm center-block" |
21 | + boundary-links="true" items-per-page="ctrl.perPage" ng-change="ctrl.loadPage()" | ||
22 | first-text="«" last-text="»" previous-text="‹" next-text="›"> | 22 | first-text="«" last-text="»" previous-text="‹" next-text="›"> |
23 | </pagination> | 23 | </pagination> |
24 | </div> | 24 | </div> |
src/app/content-viewer/page.html