Commit dfcf1ced8218feebd9b848d730bdca6cf82fd10a

Authored by Evandro Junior
2 parents c87b1f47 3c4173e9

Merge branch 'ngforward' of softwarepublico.gov.br:noosfero-themes/angular-theme into ngforward

* 'ngforward' of softwarepublico.gov.br:noosfero-themes/angular-theme:
  Call typings install for dev-scripts
  Ignore generated vendor file
  Migrate noosfero activities to ngforward
.gitignore
... ... @@ -10,3 +10,4 @@ src/commons.js*
10 10 src/noosfero-specs.js*
11 11 typings
12 12 npm-debug.log
  13 +src/vendor.bundle.js*
... ...
package.json
... ... @@ -12,7 +12,7 @@
12 12 "test-single": "karma start --single-run",
13 13 "test-and-coverage": "karma start & npm run remap-coverage",
14 14 "test": "webpack -w --test",
15   - "postinstall": "npm install -g bower && bower install && typings install",
  15 + "postinstall": "npm install -g bower && bower install && typings install && cd dev-scripts && typings install",
16 16 "start": "concurrently \"webpack -w\" \"gulp serve\"",
17 17 "generate-indexes": "ts-node --project ./dev-scripts ./dev-scripts/generate-index-modules.ts"
18 18 },
... ...
src/app/components/noosfero-activities/activities.component.js
... ... @@ -1,14 +0,0 @@
1   -(function() {
2   - 'use strict';
3   -
4   - angular
5   - .module('noosferoApp')
6   - .component('noosferoActivities', {
7   - restrict: 'E',
8   - bindings: {
9   - activities: '<'
10   - },
11   - templateUrl: 'app/components/noosfero-activities/activities.html'
12   - });
13   -
14   -})();
src/app/components/noosfero-activities/activities.component.spec.ts 0 → 100644
... ... @@ -0,0 +1,36 @@
  1 +import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builder';
  2 +import {Pipe, Input, provide, Component} from 'ng-forward';
  3 +import {provideFilters} from '../../../spec/helpers';
  4 +
  5 +import {NoosferoActivities} from './activities.component';
  6 +
  7 +const tcb = new TestComponentBuilder();
  8 +
  9 +const htmlTemplate: string = '<noosfero-activities [activities]="ctrl.activities"></noosfero-activities>';
  10 +
  11 +
  12 +describe("Components", () => {
  13 +
  14 + describe("Noosfero Activities", () => {
  15 +
  16 + beforeEach(angular.mock.module("templates"));
  17 +
  18 + @Component({
  19 + selector: 'test-container-component',
  20 + template: htmlTemplate,
  21 + directives: [NoosferoActivities],
  22 + providers: provideFilters("truncateFilter", "stripTagsFilter")
  23 + })
  24 + class BlockContainerComponent {
  25 + activities = [{ name: "activity1", verb: "create_article" }, { name: "activity2", verb: "create_article" }];
  26 + }
  27 +
  28 + it("render a noosfero activity tag for each activity", done => {
  29 + tcb.createAsync(BlockContainerComponent).then(fixture => {
  30 + expect(fixture.debugElement.queryAll("noosfero-activity").length).toEqual(2);
  31 + done();
  32 + });
  33 + });
  34 + });
  35 +
  36 +});
... ...
src/app/components/noosfero-activities/activities.component.ts
1   -(function() {
2   - 'use strict';
  1 +import {Component, Input} from "ng-forward";
  2 +import {NoosferoActivity} from "./activity/activity.component";
  3 +import {Activity} from "../../models/interfaces";
3 4  
4   - angular
5   - .module('noosferoApp')
6   - .component('noosferoActivities', {
7   - bindings: {
8   - activities: '<'
9   - },
10   - templateUrl: 'app/components/noosfero-activities/activities.html'
11   - });
  5 +@Component({
  6 + selector: "noosfero-activities",
  7 + templateUrl: 'app/components/noosfero-activities/activities.html',
  8 + directives: [NoosferoActivity]
  9 +})
  10 +export class NoosferoActivities {
12 11  
13   -})();
  12 + @Input() activities: Activity[];
  13 +
  14 +}
... ...
src/app/components/noosfero-activities/activities.html
1 1 <timeline>
2   - <timeline-event ng-repeat="activity in $ctrl.activities | orderBy: 'created_at':true">
3   - <noosfero-activity activity="activity"></noosfero-activity>
  2 + <timeline-event ng-repeat="activity in ctrl.activities | orderBy: 'created_at':true">
  3 + <noosfero-activity [activity]="activity"></noosfero-activity>
4 4 </timeline-event>
5 5 </timeline>
... ...
src/app/components/noosfero-activities/activity/activity.component.js
... ... @@ -1,24 +0,0 @@
1   -(function() {
2   - 'use strict';
3   -
4   - angular
5   - .module('noosferoApp')
6   - .component('noosferoActivity', {
7   - restrict: 'E',
8   - bindings: {
9   - activity: '<'
10   - },
11   - templateUrl: 'app/components/noosfero-activities/activity/activity.html',
12   - replace: true,
13   - controller: ActivityController
14   - });
15   -
16   - /** @ngInject */
17   - function ActivityController() {
18   - var vm = this;
19   - vm.getActivityTemplate = function(activity) {
20   - return 'app/components/noosfero-activities/activity/' + activity.verb + '.html';
21   - }
22   - }
23   -
24   -})();
src/app/components/noosfero-activities/activity/activity.component.spec.ts 0 → 100644
... ... @@ -0,0 +1,38 @@
  1 +import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builder';
  2 +import {Pipe, Input, provide, Component} from 'ng-forward';
  3 +import {provideFilters} from '../../../../spec/helpers';
  4 +
  5 +import {NoosferoActivity} from './activity.component';
  6 +
  7 +const tcb = new TestComponentBuilder();
  8 +
  9 +const htmlTemplate: string = '<noosfero-activity [activity]="ctrl.activity"></noosfero-activity>';
  10 +
  11 +
  12 +describe("Components", () => {
  13 +
  14 + describe("Noosfero Activity", () => {
  15 +
  16 + beforeEach(angular.mock.module("templates"));
  17 +
  18 + @Component({
  19 + selector: 'test-container-component',
  20 + template: htmlTemplate,
  21 + directives: [NoosferoActivity],
  22 + providers: provideFilters("truncateFilter", "stripTagsFilter")
  23 + })
  24 + class BlockContainerComponent {
  25 + activity = { name: "activity1", verb: "create_article" };
  26 + }
  27 +
  28 + it("render the specific template for an activity verb", done => {
  29 + tcb.createAsync(BlockContainerComponent).then(fixture => {
  30 + let component: NoosferoActivity = fixture.debugElement.componentViewChildren[0].componentInstance;
  31 + expect(component.getActivityTemplate()).toEqual('app/components/noosfero-activities/activity/create_article.html');
  32 + expect(fixture.debugElement.queryAll(".activity.create_article").length).toEqual(1);
  33 + done();
  34 + });
  35 + });
  36 + });
  37 +
  38 +});
... ...
src/app/components/noosfero-activities/activity/activity.component.ts 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +import {Component, Input} from "ng-forward";
  2 +import {Activity} from "../../../models/interfaces";
  3 +
  4 +@Component({
  5 + selector: "noosfero-activity",
  6 + templateUrl: 'app/components/noosfero-activities/activity/activity.html'
  7 +})
  8 +export class NoosferoActivity {
  9 +
  10 + @Input() activity: Activity;
  11 +
  12 + getActivityTemplate() {
  13 + return 'app/components/noosfero-activities/activity/' + this.activity.verb + '.html';
  14 + }
  15 +
  16 +}
... ...
src/app/components/noosfero-activities/activity/activity.html
1   -<div class="activity">
2   - <ng-include src="$ctrl.getActivityTemplate($ctrl.activity)"></ng-include>
  1 +<div class="activity {{ctrl.activity.verb}}">
  2 + <ng-include src="ctrl.getActivityTemplate()"></ng-include>
3 3 </div>
... ...
src/app/components/noosfero-activities/activity/add_member_in_community.html
... ... @@ -4,10 +4,10 @@
4 4 <timeline-panel>
5 5 <timeline-heading>
6 6 <h4 class="timeline-title">
7   - <a ui-sref="main.profile.info({profile: $ctrl.activity.user.identifier})"><strong ng-bind="$ctrl.activity.user.name"></strong></a>
  7 + <a ui-sref="main.profile.info({profile: ctrl.activity.user.identifier})"><strong ng-bind="ctrl.activity.user.name"></strong></a>
8 8 <span> has joined the community</span>
9 9 </h4>
10   - <p><small class="text-muted"><i class="fa fa-clock-o"></i> <span am-time-ago="$ctrl.activity.created_at"></span></small></p>
  10 + <p><small class="text-muted"><i class="fa fa-clock-o"></i> <span am-time-ago="ctrl.activity.created_at"></span></small></p>
11 11 </timeline-heading>
12 12 <div class="timeline-body"></div>
13 13 </timeline-panel>
... ...
src/app/components/noosfero-activities/activity/create_article.html
... ... @@ -4,22 +4,22 @@
4 4 <timeline-panel>
5 5 <timeline-heading>
6 6 <h4 class="timeline-title">
7   - <a ui-sref="main.profile.info({profile: $ctrl.activity.user.identifier})"><strong ng-bind="$ctrl.activity.user.name"></strong></a>
  7 + <a ui-sref="main.profile.info({profile: ctrl.activity.user.identifier})"><strong ng-bind="ctrl.activity.user.name"></strong></a>
8 8 <span> has published on </span>
9   - <a ui-sref="main.profile.info({profile: $ctrl.activity.target.article.profile.identifier})">
10   - <strong ng-bind="$ctrl.activity.target.article.profile.name"></strong></span>
  9 + <a ui-sref="main.profile.info({profile: ctrl.activity.target.article.profile.identifier})">
  10 + <strong ng-bind="ctrl.activity.target.article.profile.name"></strong></span>
11 11 </a>
12 12 </h4>
13   - <p><small class="text-muted"><i class="fa fa-clock-o"></i> <span am-time-ago="$ctrl.activity.created_at"></span></small></p>
  13 + <p><small class="text-muted"><i class="fa fa-clock-o"></i> <span am-time-ago="ctrl.activity.created_at"></span></small></p>
14 14 </timeline-heading>
15 15 <div class="timeline-body">
16 16 <div class="article">
17 17 <div class="title">
18   - <a ui-sref="main.profile.page({profile: $ctrl.activity.target.article.profile.identifier, page: $ctrl.activity.target.article.path})"
19   - ng-bind="$ctrl.activity.target.article.title"></a>
  18 + <a ui-sref="main.profile.page({profile: ctrl.activity.target.article.profile.identifier, page: ctrl.activity.target.article.path})"
  19 + ng-bind="ctrl.activity.target.article.title"></a>
20 20 </div>
21 21 <div class="lead small">
22   - <div ng-bind-html="$ctrl.activity.target.article.body | stripTags | truncate: 100 : '...': true"></div>
  22 + <div ng-bind-html="ctrl.activity.target.article.body | stripTags | truncate: 100 : '...': true"></div>
23 23 </div>
24 24 </div>
25 25 </div>
... ...
src/app/components/noosfero-activities/activity/new_friendship.html
... ... @@ -4,15 +4,15 @@
4 4 <timeline-panel>
5 5 <timeline-heading>
6 6 <h4 class="timeline-title">
7   - <a ui-sref="main.profile.info({profile: $ctrl.activity.user.identifier})"><strong ng-bind="$ctrl.activity.user.name"></strong></a>
8   - <span> has made <span ng-bind="$ctrl.activity.params.friend_name.length"></span> new friend(s): </span>
  7 + <a ui-sref="main.profile.info({profile: ctrl.activity.user.identifier})"><strong ng-bind="ctrl.activity.user.name"></strong></a>
  8 + <span> has made <span ng-bind="ctrl.activity.params.friend_name.length"></span> new friend(s): </span>
9 9 <span class="comma-separated">
10   - <a class="separated-item" ui-sref="main.profile.info({profile: $ctrl.activity.params.friend_url[$index].profile})" ng-repeat="friend in $ctrl.activity.params.friend_name">
  10 + <a class="separated-item" ui-sref="main.profile.info({profile: ctrl.activity.params.friend_url[$index].profile})" ng-repeat="friend in ctrl.activity.params.friend_name">
11 11 <strong ng-bind="friend"></strong>
12 12 </a>
13 13 </span>
14 14 </h4>
15   - <p><small class="text-muted"><i class="fa fa-clock-o"></i> <span am-time-ago="$ctrl.activity.created_at"></span></small></p>
  15 + <p><small class="text-muted"><i class="fa fa-clock-o"></i> <span am-time-ago="ctrl.activity.created_at"></span></small></p>
16 16 </timeline-heading>
17 17 <div class="timeline-body"></div>
18 18 </timeline-panel>
... ...
src/app/index.ts
... ... @@ -42,8 +42,6 @@ NoosferoApp.run(noosferoAngularRunBlock);
42 42 NoosferoApp.addController("AuthController", AuthController);
43 43  
44 44  
45   -require("./components/noosfero-activities/activities.component.js");
46   -require("./components/noosfero-activities/activity/activity.component.js");
47 45 require("./components/noosfero/noosfero-template.filter.js");
48 46 require("./components/noosfero/noosfero.service.js");
49 47 require("./components/noosfero/profile-image/profile-image.component.js");
... ...
src/app/models/interfaces.ts
... ... @@ -51,6 +51,10 @@ export interface Box {
51 51 position: number;
52 52 }
53 53  
  54 +export interface Activity {
  55 + verb: string;
  56 +}
  57 +
54 58 export interface INoosferoLocalStorage extends angular.storage.ILocalStorageService {
55 59 currentUser: User;
56   -}
57 60 \ No newline at end of file
  61 +}
... ...
src/app/profile-info/profile-info.html
... ... @@ -2,5 +2,5 @@
2 2  
3 3 <div class="profile-wall">
4 4 <h4>Profile Wall</h4>
5   - <noosfero-activities activities="vm.activities"></noosfero-activities>
  5 + <noosfero-activities [activities]="vm.activities"></noosfero-activities>
6 6 </div>
... ...
src/app/profile/profile.component.ts
... ... @@ -3,12 +3,14 @@ import {ProfileInfo} from &#39;../profile-info/profile-info.component&#39;;
3 3 import {ProfileHome} from '../profile/profile-home.component';
4 4 import {Cms} from '../cms/cms.component';
5 5 import {ContentViewer} from "../content-viewer/content-viewer.component";
  6 +import {NoosferoActivities} from "../components/noosfero-activities/activities.component";
6 7  
7 8 import * as noosferoModels from "./../models/interfaces";
8 9  
9 10 @Component({
10 11 selector: 'profile',
11   - templateUrl: "app/profile/profile.html"
  12 + templateUrl: "app/profile/profile.html",
  13 + directives: [NoosferoActivities]
12 14 })
13 15 @StateConfig([
14 16 {
... ...