diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-30 12:23:34 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-30 12:23:34 +0200 |
commit | abd5ef4c4c6ad3cf8e879f6c4b9181b077165952 (patch) | |
tree | 11052b0a6c61569b5041ca0237053b870905ba46 | |
parent | 4c728e789f50510f07822e61633a8b3c383daf12 (diff) |
finish content controller
-rw-r--r-- | js/.jshintrc | 1 | ||||
-rw-r--r-- | js/build/app.js | 77 | ||||
-rw-r--r-- | js/controller/ContentController.js | 14 | ||||
-rw-r--r-- | js/karma.conf.js | 1 | ||||
-rw-r--r-- | js/service/SettingsResource.js | 25 | ||||
-rw-r--r-- | js/tests/unit/controller/ContentControllerSpec.js | 20 | ||||
-rw-r--r-- | js/tests/unit/service/SettingsResourceSpec.js | 44 |
7 files changed, 176 insertions, 6 deletions
diff --git a/js/.jshintrc b/js/.jshintrc index 1138c1c93..eb9bb2859 100644 --- a/js/.jshintrc +++ b/js/.jshintrc @@ -25,6 +25,7 @@ "jquery": true, "globals": { "angular": true, + "moment": true, "app": true, "OC": true, "csrfToken": true, diff --git a/js/build/app.js b/js/build/app.js index ecab1f33c..27cd1ba6f 100644 --- a/js/build/app.js +++ b/js/build/app.js @@ -190,9 +190,9 @@ var $__build_47_app__ = function () { function (Publisher, FeedResource, ItemResource, SettingsResource, data, $route, $routeParams) { 'use strict'; var $__0 = this; - this.isAutoPagingEnabled = true; ItemResource.clear(); Publisher.publishAll(data); + this.isAutoPagingEnabled = true; this.getItems = function () { return ItemResource.getAll(); }; @@ -269,7 +269,16 @@ var $__build_47_app__ = function () { }); }; this.getRelativeDate = function (timestamp) { - console.log(timestamp); + if (timestamp !== undefined && timestamp !== '') { + try { + throw undefined; + } catch (languageCode) { + languageCode = SettingsResource.get('language'); + return moment.unix(timestamp).lang(languageCode).fromNow(); + } + } else { + return ''; + } }; } ]); @@ -802,6 +811,57 @@ var $__build_47_app__ = function () { 'use strict'; var $__0 = this; this.settings = {}; + this.defaultLanguageCode = 'en'; + this.supportedLanguageCodes = [ + 'ar-ma', + 'ar', + 'bg', + 'ca', + 'cs', + 'cv', + 'da', + 'de', + 'el', + 'en-ca', + 'en-gb', + 'eo', + 'es', + 'et', + 'eu', + 'fi', + 'fr-ca', + 'fr', + 'gl', + 'he', + 'hi', + 'hu', + 'id', + 'is', + 'it', + 'ja', + 'ka', + 'ko', + 'lv', + 'ms-my', + 'nb', + 'ne', + 'nl', + 'pl', + 'pt-br', + 'pt', + 'ro', + 'ru', + 'sk', + 'sl', + 'sv', + 'th', + 'tr', + 'tzm-la', + 'tzm', + 'uk', + 'zh-cn', + 'zh-tw' + ]; this.receive = function (data) { for (var $__3 = items(data)[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) { try { @@ -819,6 +879,9 @@ var $__build_47_app__ = function () { value = $__8[1]; } { + if (key === 'language') { + value = $__0.processLanguageCode(value); + } $traceurRuntime.setProperty($__0.settings, key, value); } } @@ -839,6 +902,16 @@ var $__build_47_app__ = function () { data: data }); }; + this.processLanguageCode = function (languageCode) { + languageCode = languageCode.replace('_', '-').toLowerCase(); + if ($__0.supportedLanguageCodes.indexOf(languageCode) < 0) { + languageCode = languageCode.split('-')[0]; + } + if ($__0.supportedLanguageCodes.indexOf(languageCode) < 0) { + languageCode = $__0.defaultLanguageCode; + } + return languageCode; + }; } ]); (function (window, document, $) { diff --git a/js/controller/ContentController.js b/js/controller/ContentController.js index 5a75f68ab..1af22ea5c 100644 --- a/js/controller/ContentController.js +++ b/js/controller/ContentController.js @@ -12,13 +12,15 @@ function (Publisher, FeedResource, ItemResource, SettingsResource, data, $route, $routeParams) { 'use strict'; - this.isAutoPagingEnabled = true; - + // dont cache items across multiple route changes ItemResource.clear(); // distribute data to models based on key Publisher.publishAll(data); + + this.isAutoPagingEnabled = true; + this.getItems = () => { return ItemResource.getAll(); }; @@ -101,9 +103,13 @@ function (Publisher, FeedResource, ItemResource, SettingsResource, data, }); }; - // TBD this.getRelativeDate = (timestamp) => { - console.log(timestamp); + if (timestamp !== undefined && timestamp !== '') { + let languageCode = SettingsResource.get('language'); + return moment.unix(timestamp).lang(languageCode).fromNow(); + } else { + return ''; + } }; });
\ No newline at end of file diff --git a/js/karma.conf.js b/js/karma.conf.js index 02ca523f1..daa7beca6 100644 --- a/js/karma.conf.js +++ b/js/karma.conf.js @@ -38,6 +38,7 @@ module.exports = function (config) { files: [ 'vendor/jquery/dist/jquery.js', 'vendor/momentjs/moment.js', + 'vendor/momentjs/min/langs.js', 'vendor/bootstrap/tooltip.js', 'vendor/angular/angular.js', 'vendor/angular-mocks/angular-mocks.js', diff --git a/js/service/SettingsResource.js b/js/service/SettingsResource.js index 26b26145d..30982a916 100644 --- a/js/service/SettingsResource.js +++ b/js/service/SettingsResource.js @@ -13,9 +13,20 @@ app.service('SettingsResource', function ($http, BASE_URL) { 'use strict'; this.settings = {}; + this.defaultLanguageCode = 'en'; + this.supportedLanguageCodes = [ + 'ar-ma', 'ar', 'bg', 'ca', 'cs', 'cv', 'da', 'de', 'el', 'en-ca', + 'en-gb', 'eo', 'es', 'et', 'eu', 'fi', 'fr-ca', 'fr', 'gl', 'he', 'hi', + 'hu', 'id', 'is', 'it', 'ja', 'ka', 'ko', 'lv', 'ms-my', 'nb', 'ne', + 'nl', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'th', 'tr', + 'tzm-la', 'tzm', 'uk', 'zh-cn', 'zh-tw' + ]; this.receive = (data) => { for (let [key, value] of items(data)) { + if (key === 'language') { + value = this.processLanguageCode(value); + } this.settings[key] = value; } }; @@ -37,4 +48,18 @@ app.service('SettingsResource', function ($http, BASE_URL) { }); }; + this.processLanguageCode = (languageCode) => { + languageCode = languageCode.replace('_', '-').toLowerCase(); + + if (this.supportedLanguageCodes.indexOf(languageCode) < 0) { + languageCode = languageCode.split('-')[0]; + } + + if (this.supportedLanguageCodes.indexOf(languageCode) < 0) { + languageCode = this.defaultLanguageCode; + } + + return languageCode; + }; + });
\ No newline at end of file diff --git a/js/tests/unit/controller/ContentControllerSpec.js b/js/tests/unit/controller/ContentControllerSpec.js index 99eff3add..9fe769ffa 100644 --- a/js/tests/unit/controller/ContentControllerSpec.js +++ b/js/tests/unit/controller/ContentControllerSpec.js @@ -398,4 +398,24 @@ describe('ContentController', () => { expect(ctrl.autoPagingEnabled()).toBe(true); })); + + it('should return relative date', inject(($controller, + SettingsResource) => { + + SettingsResource.receive({language: 'en'}); + let ctrl = $controller('ContentController', { + data: {}, + }); + + expect(ctrl.getRelativeDate(12)).not.toBe(''); + })); + + + it('should return relative date empty', inject(($controller) => { + let ctrl = $controller('ContentController', { + data: {}, + }); + + expect(ctrl.getRelativeDate('')).toBe(''); + })); }); diff --git a/js/tests/unit/service/SettingsResourceSpec.js b/js/tests/unit/service/SettingsResourceSpec.js index 912e342d1..68399707a 100644 --- a/js/tests/unit/service/SettingsResourceSpec.js +++ b/js/tests/unit/service/SettingsResourceSpec.js @@ -47,4 +47,48 @@ describe('SettingsResource', () => { }); + it('should set language codes', inject((SettingsResource) => { + let codes = [ + 'ar-ma', 'ar', 'bg', 'ca', 'cs', 'cv', 'da', 'de', 'el', 'en-ca', + 'en-gb', 'eo', 'es', 'et', 'eu', 'fi', 'fr-ca', 'fr', 'gl', 'he', + 'hu', 'id', 'is', 'it', 'ja', 'ka', 'ko', 'lv', 'ms-my', 'nb', 'ne', + 'nl', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'th', 'tr', + 'tzm-la', 'tzm', 'uk', 'zh-cn', 'zh-tw', 'hi' + ]; + + for (let code of codes) { + SettingsResource.receive({ + language: code + }); + expect(SettingsResource.get('language')).toBe(code); + } + })); + + + it('should set default language codes', inject((SettingsResource) => { + SettingsResource.receive({ + language: 'abc' + }); + expect(SettingsResource.get('language')).toBe('en'); + })); + + + it('should fix broken language codes', inject((SettingsResource) => { + SettingsResource.receive({ + language: 'EN_CA' + }); + expect(SettingsResource.get('language')).toBe('en-ca'); + })); + + + it('should fall back to more general language code', inject(( + SettingsResource) => { + + SettingsResource.receive({ + language: 'EN_US' + }); + expect(SettingsResource.get('language')).toBe('en'); + })); + + });
\ No newline at end of file |