diff --git a/.gitignore b/.gitignore
index a2d7b49..f7a8b95 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,6 @@ typings
npm-debug.log
src/vendor.bundle.js*
.vagrant/
+*.swp
+*.swo
+*~
diff --git a/bower.json b/bower.json
index d620d14..62612d5 100644
--- a/bower.json
+++ b/bower.json
@@ -35,9 +35,10 @@
"angular-i18n": "^1.5.0",
"angular-load": "^0.4.1",
"angular-translate-interpolation-messageformat": "^2.10.0",
- "angular-bind-html-compile": "^1.2.1",
- "angular-click-outside": "^2.7.1",
- "ng-ckeditor": "^0.2.1"
+ "angular-bind-html-compile": "^1.2.1",
+ "angular-click-outside": "^2.7.1",
+ "ng-ckeditor": "^0.2.1",
+ "angular-tag-cloud": "^0.3.0"
},
"devDependencies": {
"angular-mocks": "~1.5.0"
diff --git a/gulp/styles.js b/gulp/styles.js
index acc96ae..da300a8 100644
--- a/gulp/styles.js
+++ b/gulp/styles.js
@@ -11,6 +11,8 @@ var $ = require('gulp-load-plugins')();
var wiredep = require('wiredep').stream;
var _ = require('lodash');
+var importCss = require('gulp-import-css');
+
gulp.task('styles-reload', ['styles'], function() {
return buildStyles()
.pipe(browserSync.stream());
@@ -55,5 +57,6 @@ var buildStyles = function() {
.pipe($.sass(sassOptions)).on('error', conf.errorHandler('Sass'))
.pipe($.autoprefixer()).on('error', conf.errorHandler('Autoprefixer'))
.pipe($.sourcemaps.write())
+ .pipe(importCss())
.pipe(gulp.dest(path.join(conf.paths.tmp, '/serve/app/')));
};
diff --git a/package.json b/package.json
index 79301b0..2c58139 100644
--- a/package.json
+++ b/package.json
@@ -46,8 +46,9 @@
"gulp-eslint": "~1.0.0",
"gulp-filter": "~3.0.1",
"gulp-flatten": "~0.2.0",
- "gulp-insert": "^0.5.0",
+ "gulp-import-css": "^0.1.2",
"gulp-inject": "~3.0.0",
+ "gulp-insert": "^0.5.0",
"gulp-load-plugins": "~0.10.0",
"gulp-merge-json": "^0.4.0",
"gulp-minify-css": "~1.2.1",
diff --git a/src/app/index.ts b/src/app/index.ts
index 56eda82..90d8006 100644
--- a/src/app/index.ts
+++ b/src/app/index.ts
@@ -18,7 +18,7 @@ let noosferoApp: any = bundle("noosferoApp", MainComponent, ["ngAnimate", "ngCoo
"angular-bind-html-compile", "angularMoment", "angular.filter", "akoenig.deckgrid",
"angular-timeline", "duScroll", "oitozero.ngSweetAlert",
"pascalprecht.translate", "tmh.dynamicLocale", "angularLoad",
- "angular-click-outside"]).publish();
+ "angular-click-outside", "ngTagCloud"]).publish();
NoosferoApp.angularModule = noosferoApp;
diff --git a/src/app/layout/blocks/tags/index.ts b/src/app/layout/blocks/tags/index.ts
new file mode 100644
index 0000000..e5edbc0
--- /dev/null
+++ b/src/app/layout/blocks/tags/index.ts
@@ -0,0 +1,2 @@
+/* Module Index Entry - generated using the script npm run generate-index */
+export * from "./tags-block.component";
diff --git a/src/app/layout/blocks/tags/tags-block.component.spec.ts b/src/app/layout/blocks/tags/tags-block.component.spec.ts
new file mode 100644
index 0000000..69ed146
--- /dev/null
+++ b/src/app/layout/blocks/tags/tags-block.component.spec.ts
@@ -0,0 +1,55 @@
+import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builder';
+import {Provider, Input, provide, Component} from 'ng-forward';
+import {provideFilters} from '../../../../spec/helpers';
+import {TagsBlockComponent} from './tags-block.component';
+
+const htmlTemplate: string = '';
+
+const tcb = new TestComponentBuilder();
+
+describe("Components", () => {
+ describe("Tags Block Component", () => {
+
+ let settingsObj = {};
+ let mockedEnvironmentService = {
+ getTags: (): any => {
+ return Promise.resolve({ foo: 10, bar: 20 });
+ }
+ };
+ let profile = { name: 'profile-name' };
+ beforeEach(angular.mock.module("templates"));
+
+ let state = jasmine.createSpyObj("state", ["go"]);
+
+
+ function getProviders() {
+ return [
+ new Provider('$state', { useValue: state }),
+ new Provider('EnvironmentService', {
+ useValue: mockedEnvironmentService
+ }),
+ ].concat(provideFilters("truncateFilter", "stripTagsFilter"));
+ }
+ let componentClass: any = null;
+
+ function getComponent() {
+ @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [TagsBlockComponent], providers: getProviders() })
+ class BlockContainerComponent {
+ block = { type: 'Block', settings: settingsObj };
+ owner = profile;
+ constructor() {
+ }
+ }
+ return BlockContainerComponent;
+ }
+
+
+ it("get tags from the environment service", done => {
+ tcb.createAsync(getComponent()).then(fixture => {
+ let tagsBlock: TagsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance;
+ expect(tagsBlock.tags).toEqual([{ text: "foo", weight: '10', link: '/tag/foo' }, { text: "bar", weight: '20', link: '/tag/bar' }]);
+ done();
+ });
+ });
+ });
+});
diff --git a/src/app/layout/blocks/tags/tags-block.component.ts b/src/app/layout/blocks/tags/tags-block.component.ts
new file mode 100644
index 0000000..8a3165d
--- /dev/null
+++ b/src/app/layout/blocks/tags/tags-block.component.ts
@@ -0,0 +1,45 @@
+import {Component, Inject, Input} from "ng-forward";
+import {EnvironmentService} from "../../../../lib/ng-noosfero-api/http/environment.service";
+
+@Component({
+ selector: "noosfero-tags-block",
+ templateUrl: 'app/layout/blocks/tags/tags-block.html'
+})
+@Inject(EnvironmentService, "$state")
+export class TagsBlockComponent {
+
+ @Input() block: any;
+ @Input() owner: any;
+
+ profile: any;
+ tags: any;
+ tagsLoaded: boolean = false;
+
+ constructor(private environmentService: EnvironmentService, private $state: any) {
+ this.loadTags();
+ }
+
+ loadTags() {
+ this.tags = [];
+ let tag = '';
+ let tags: any = [];
+ let that = this;
+
+ this.environmentService.getTags()
+ .then((result: any) => {
+ for (tag in result) {
+ if (result.hasOwnProperty(tag)) {
+ let size: number = result[tag];
+ tags.push({ text: tag.toString(), weight: size.toString(), link: '/tag/' + tag });
+ }
+ }
+
+ that.tagsLoaded = true;
+ that.tags = tags.slice();
+ });
+ }
+
+ ngOnInit() {
+ this.profile = this.owner;
+ }
+}
diff --git a/src/app/layout/blocks/tags/tags-block.html b/src/app/layout/blocks/tags/tags-block.html
new file mode 100644
index 0000000..d70ae5b
--- /dev/null
+++ b/src/app/layout/blocks/tags/tags-block.html
@@ -0,0 +1 @@
+
diff --git a/src/app/layout/blocks/tags/tags-block.scss b/src/app/layout/blocks/tags/tags-block.scss
new file mode 100644
index 0000000..2fb4b81
--- /dev/null
+++ b/src/app/layout/blocks/tags/tags-block.scss
@@ -0,0 +1,5 @@
+@import url('../../bower_components/angular-tag-cloud/src/css/ng-tag-cloud.css');
+
+div.ng-tag-cloud a:hover, div.ng-tag-cloud span.w10, div.ng-tag-cloud span.w8, div.ng-tag-cloud span.w9 {
+ color: #848CB2;
+}
diff --git a/src/app/main/main.component.ts b/src/app/main/main.component.ts
index 9519618..751061b 100644
--- a/src/app/main/main.component.ts
+++ b/src/app/main/main.component.ts
@@ -16,6 +16,7 @@ import {RecentDocumentsBlockComponent} from "../layout/blocks/recent-documents/r
import {ProfileImageBlockComponent} from "../layout/blocks/profile-image/profile-image-block.component";
import {RawHTMLBlockComponent} from "../layout/blocks/raw-html/raw-html-block.component";
import {StatisticsBlockComponent} from "../layout/blocks/statistics/statistics-block.component";
+import {TagsBlockComponent} from "../layout/blocks/tags/tags-block.component";
import {MembersBlockComponent} from "../layout/blocks/members/members-block.component";
import {CommunitiesBlockComponent} from "../layout/blocks/communities/communities-block.component";
@@ -99,7 +100,7 @@ export class EnvironmentContent {
LinkListBlockComponent, CommunitiesBlockComponent, HtmlEditorComponent,
MainBlockComponent, RecentDocumentsBlockComponent, Navbar, SidebarComponent, ProfileImageBlockComponent,
MembersBlockComponent, NoosferoTemplate, DateFormat, RawHTMLBlockComponent, StatisticsBlockComponent,
- LoginBlockComponent
+ LoginBlockComponent, TagsBlockComponent
].concat(plugins.mainComponents).concat(plugins.hotspots),
providers: [AuthService, SessionService, NotificationService, BodyStateClassesService]
diff --git a/src/lib/ng-noosfero-api/http/environment.service.ts b/src/lib/ng-noosfero-api/http/environment.service.ts
index 20b3eca..493a8a3 100644
--- a/src/lib/ng-noosfero-api/http/environment.service.ts
+++ b/src/lib/ng-noosfero-api/http/environment.service.ts
@@ -34,6 +34,14 @@ export class EnvironmentService {
return deferred.promise;
}
+ getTags(): ng.IPromise<{}> {
+ let p = this.restangular.one('environment').customGET('tags');
+ let deferred = this.$q.defer<{}>();
+ p.then(this.getHandleSuccessFunction<{}>(deferred));
+ p.catch(this.getHandleErrorFunction<{}>(deferred));
+ return deferred.promise;
+ }
+
/** TODO - Please, use the base class RestangularService
* (description)
*
--
libgit2 0.21.2