summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-05-30 12:23:34 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-05-30 12:23:34 +0200
commitabd5ef4c4c6ad3cf8e879f6c4b9181b077165952 (patch)
tree11052b0a6c61569b5041ca0237053b870905ba46
parent4c728e789f50510f07822e61633a8b3c383daf12 (diff)
finish content controller
-rw-r--r--js/.jshintrc1
-rw-r--r--js/build/app.js77
-rw-r--r--js/controller/ContentController.js14
-rw-r--r--js/karma.conf.js1
-rw-r--r--js/service/SettingsResource.js25
-rw-r--r--js/tests/unit/controller/ContentControllerSpec.js20
-rw-r--r--js/tests/unit/service/SettingsResourceSpec.js44
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