From eaaf6a36bdd63375f136b4b308e5144c9960d2e4 Mon Sep 17 00:00:00 2001 From: Gunther Brunner Date: Thu, 13 Mar 2014 21:03:41 +0900 Subject: [PATCH] - Add Local settings. - Add Language settings synced back. --- bower.json | 5 +- lib/middleware/webpack.js | 3 +- res/app/components/stf/settings/index.js | 3 + res/app/settings/index.js | 1 + .../settings/language/language-controller.js | 34 ++++----- res/app/settings/language/language-service.js | 75 +++++++++++++------ res/app/settings/local/index.js | 13 ++++ .../local/local-settings-controller.js | 24 ++++++ res/app/settings/local/local-settings.jade | 11 +++ res/app/settings/settings.jade | 9 +-- webpack.config.js | 9 ++- 11 files changed, 137 insertions(+), 50 deletions(-) create mode 100644 res/app/settings/local/index.js create mode 100644 res/app/settings/local/local-settings-controller.js create mode 100644 res/app/settings/local/local-settings.jade diff --git a/bower.json b/bower.json index b0844f32..50952643 100644 --- a/bower.json +++ b/bower.json @@ -12,7 +12,6 @@ "Snap.svg": "~0.2.0", "angular-localForage": "~0.0.2", "ng-table": "~0.3.1", - "angular-ui-bootstrap": "~0.10.0", "jquery.terminal": "~0.8.4", "stf-site": "git@ghe.amb.ca.local:stf/stf-site.git", "angular-gettext": "~0.2.5", @@ -20,7 +19,9 @@ "ui-bootstrap-alerts": "~0.1.5", "angular-sanitize": "~1.2.14", "requirejs": "~2.1.11", - "stf-graphics": "git@ghe.amb.ca.local:stf/stf-graphics.git" + "stf-graphics": "git@ghe.amb.ca.local:stf/stf-graphics.git", + "angular-bootstrap": "~0.10.0", + "angular-dialog-service": "~3.1.0" }, "private": true, "resolutions": { diff --git a/lib/middleware/webpack.js b/lib/middleware/webpack.js index 30dda3bc..5a23297e 100644 --- a/lib/middleware/webpack.js +++ b/lib/middleware/webpack.js @@ -6,7 +6,8 @@ var webpackOptions = require('../../webpack.config.js') var overrideOptions = { debug: true, - devtool: 'eval' + devtool: 'source-map' + //devtool: 'eval' } var finalOptions = _.assign(webpackOptions, overrideOptions) diff --git a/res/app/components/stf/settings/index.js b/res/app/components/stf/settings/index.js index d48edeb5..f379d3f0 100644 --- a/res/app/components/stf/settings/index.js +++ b/res/app/components/stf/settings/index.js @@ -4,4 +4,7 @@ require('angular-localForage') module.exports = angular.module('stf/settings', [ 'LocalForageModule' ]) + .config(['$localForageProvider', function ($localForageProvider) { + $localForageProvider.setPrefix('stf.v0'); + }]) .factory('SettingsService', require('./settings-service')) diff --git a/res/app/settings/index.js b/res/app/settings/index.js index 7958ba28..5bad217e 100644 --- a/res/app/settings/index.js +++ b/res/app/settings/index.js @@ -1,4 +1,5 @@ module.exports = angular.module('ui-settings', [ + require('./local').name, require('./language').name ]) .config(['$routeProvider', function ($routeProvider) { diff --git a/res/app/settings/language/language-controller.js b/res/app/settings/language/language-controller.js index aa00c687..0f402dd9 100644 --- a/res/app/settings/language/language-controller.js +++ b/res/app/settings/language/language-controller.js @@ -1,23 +1,23 @@ -module.exports = function ($scope, LanguageService, SettingsService) { //gettextCatalog, +module.exports = function ($scope, LanguageService, SettingsService) { // SettingsService.sync($scope, 'Language', { // language: LanguageService.detectedLanguage // }) - //SettingsService.set('') - - - SettingsService.set('valueCrazy', 35) - SettingsService.set('valueCrazyNew', {one: 1, two: 35.3, three: '日本語', four: [1, 2, 3, 4]}) - - - - - //console.log('he') - //console.log(SettingsService.get('valueCrazy')) - -// $scope.$watch('language', function (newValue) { -// gettextCatalog.currentLanguage = newValue +// SettingsService.bind($scope, { +// key: 'language', +// defaultValue: LanguageService.selectedLanguage // }) -// -// $scope.supportedLanguages = LanguageService.supportedLanguages + + LanguageService.getSelectedLanguage().then(function (data) { + $scope.language = data + console.log('real', data) + }) + + $scope.$watch('language', function (newValue, oldValue) { + if (newValue !== oldValue) { + LanguageService.setSelectedLanguage(newValue) + } + }) + + $scope.supportedLanguages = LanguageService.supportedLanguages } diff --git a/res/app/settings/language/language-service.js b/res/app/settings/language/language-service.js index 33d26ede..7920b64b 100644 --- a/res/app/settings/language/language-service.js +++ b/res/app/settings/language/language-service.js @@ -1,23 +1,56 @@ -//var _ = require('lodash') +var _ = require('lodash') -module.exports = function LanguageServiceFactory() { -// var LanguageService = {} -// -// LanguageService.supportedLanguages = [ -// {code: 'en', name: 'English'}, -// {code: 'ja', name: '日本語'} -// ] -// -// var browserLocale = navigator.language || navigator.userLanguage || 'en-US' -// var browserLanguage = browserLocale.substring(0, 2) -// var detectedLanguage = _.some(LanguageService.supportedLanguages, {code: browserLanguage}) ? browserLanguage : 'en' -// var defaultLanguage = 'ja' -// LanguageService.detectedLanguage = defaultLanguage -// LanguageService.selectedLanguage = defaultLanguage -// -// LanguageService.getSelectedLanguage = function () { -// return LanguageService.selectedLanguage = defaultLanguage //WebStorage.get('Language.language') || defaultLanguage -// } -// -// return LanguageService +module.exports = function LanguageServiceFactory(SettingsService, $q, gettextCatalog) { + var LanguageService = {} + + LanguageService.supportedLanguages = [ + {code: 'en', name: 'English'}, + {code: 'ja', name: '日本語'} + ] + + var browserLocale = navigator.language || navigator.userLanguage || 'en-US' + var browserLanguage = browserLocale.substring(0, 2) + var detectedLanguage = _.some(LanguageService.supportedLanguages, {code: browserLanguage}) ? browserLanguage : 'en' + var defaultLanguage = 'ja' + LanguageService.detectedLanguage = defaultLanguage + LanguageService.selectedLanguage = null + + // TODO: Can't this be refactored to something like this? + // SettingsService.sync(LanguageService.selectedLanguage, 'Language', { + // selected: LanguageService.detectedLanguage + // }) + + LanguageService.getSelectedLanguage = function () { + var deferred = $q.defer() + if (LanguageService.selectedLanguage) { + deferred.resolve(LanguageService.selectedLanguage) + } else { + SettingsService.get('Language.selected').then(function (data) { + if (data) { + deferred.resolve(data) + } else { + LanguageService.setSelectedLanguage(LanguageService.detectedLanguage).then(function () { + deferred.resolve(LanguageService.detectedLanguage) + }) + } + }) + } + return deferred.promise + } + + // Initialize gettextCatalog + LanguageService.getSelectedLanguage() + + + LanguageService.setSelectedLanguage = function (lang) { + var deferred = $q.defer() + LanguageService.selectedLanguage = lang + gettextCatalog.currentLanguage = lang + SettingsService.set('Language.selected', lang).then(function () { + deferred.resolve(lang) + }) + return deferred.promise + } + + return LanguageService } diff --git a/res/app/settings/local/index.js b/res/app/settings/local/index.js new file mode 100644 index 00000000..552aed46 --- /dev/null +++ b/res/app/settings/local/index.js @@ -0,0 +1,13 @@ +require('angular-bootstrap') +require('angular-dialog-service/dialogs') +require('angular-dialog-service/dialogs.css') + +module.exports = angular.module('ui-local-settings', [ + require('stf/settings').name, + 'ui.bootstrap', + //'dialogs' +]) + .run(["$templateCache", function ($templateCache) { + $templateCache.put('settings/local/local-settings.jade', require('./local-settings.jade')) + }]) + .controller('LocalSettingsCtrl', require('./local-settings-controller')) diff --git a/res/app/settings/local/local-settings-controller.js b/res/app/settings/local/local-settings-controller.js new file mode 100644 index 00000000..959c4434 --- /dev/null +++ b/res/app/settings/local/local-settings-controller.js @@ -0,0 +1,24 @@ +module.exports = function ($scope, SettingsService) { + + $scope.resetSettings = function () { + SettingsService.clearAll() + } + + $scope.savedTo = SettingsService.getDriver() + +// $scope.resetSettings = function () { +// var title = 'Reset Settings'; +// var msg = 'Are you sure you want to revert all settings to their default values?'; +// var btns = [ +// {result: 'cancel', label: 'Cancel'}, +// {result: 'ok', label: 'OK', cssClass: 'btn-primary'} +// ]; +// $dialog.messageBox(title, msg, btns) +// .open() +// .then(function (result) { +// if (result === 'ok') { +// //SettingsService.clearAll(); +// } +// }); +// }; +} diff --git a/res/app/settings/local/local-settings.jade b/res/app/settings/local/local-settings.jade new file mode 100644 index 00000000..248c3719 --- /dev/null +++ b/res/app/settings/local/local-settings.jade @@ -0,0 +1,11 @@ +.widget-container.fluid-height(ng-controller='LocalSettingsCtrl') + .heading + i.fa.fa-save + span(translate) Local Settings + .widget-content.padded + button(ng-click='resetSettings()').btn.btn-danger + i.fa.fa-trash-o + span(translate) Reset Settings + + p + span.text-muted(translate) Saved to: {{savedTo}} diff --git a/res/app/settings/settings.jade b/res/app/settings/settings.jade index 97cd494f..ecefa87c 100644 --- a/res/app/settings/settings.jade +++ b/res/app/settings/settings.jade @@ -1,14 +1,7 @@ div(pane='center') .row .col-md-4 - .widget-container.fluid-height - .heading - i.fa.fa-save - span(translate) Local storage - .widget-content.padded - button(ng-click='resetSettings()').btn.btn-danger - i.fa.fa-trash-o - span(translate) Reset Settings + div(ng-include='"settings/local/local-settings.jade"') .col-md-4 div(ng-include='"settings/language/language.jade"') .col-md-4 diff --git a/webpack.config.js b/webpack.config.js index ea03dad2..19ce8a79 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -18,6 +18,7 @@ module.exports = { './node_modules' ], alias: { + 'angular-bootstrap': 'angular-bootstrap/ui-bootstrap-tpls', 'localforage': 'localforage/dist/localforage.js', 'socket.io': 'socket.io-client/dist/socket.io', 'oboe': 'oboe/dist/oboe-browser' @@ -39,7 +40,9 @@ module.exports = { { test: /angular\.js/, loader: 'exports?angular'}, { test: /angular-route\.js/, loader: 'imports?angular=angular'}, { test: /oboe-browser\.js/, loader: 'imports?define=>false!exports?oboe'}, - { test: /localforage\.js/, loader: 'script'} + { test: /localforage\.js/, loader: 'script'}, + { test: /ui-bootstrap-tpls\.js/, loader: 'script'}, + { test: /dialogs\.js/, loader: 'script'} ], noParse: [ // pathutil.resource('bower_components') @@ -49,6 +52,10 @@ module.exports = { new webpack.ResolverPlugin( new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('bower.json', ['main']) ), + new webpack.ResolverPlugin( + new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('.bower.json', ['main']) + ) + // new webpack.ResolverPlugin( // new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('package.json', ['main']) // )