diff options
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js')
-rw-r--r-- | framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js new file mode 100644 index 00000000..02a23909 --- /dev/null +++ b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js @@ -0,0 +1,128 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + ONOS GUI -- Util -- User Preference Service + */ +(function () { + 'use strict'; + + // injected refs + var $log, $cookies, fs; + + // internal state + var cache = {}; + + // NOTE: in Angular 1.3.5, $cookies is just a simple object, and + // cookie values are just strings. From the 1.3.5 docs: + // + // "Only a simple Object is exposed and by adding or removing + // properties to/from this object, new cookies are created/deleted + // at the end of current $eval. The object's properties can only + // be strings." + // + // We may want to upgrade the version of Angular sometime soon + // since later version support objects as cookie values. + + // NOTE: prefs represented as simple name/value pairs + // => a temporary restriction while we are encoding into cookies + /* + { + foo: 1, + bar: 0, + goo: 2 + } + + stored as "foo:1,bar:0,goo:2" + */ + + // reads cookie with given name and returns an object rep of its value + // or null if no such cookie is set + function getPrefs(name) { + var cook = $cookies[name], + bits, + obj = {}; + + if (cook) { + bits = cook.split(','); + bits.forEach(function (value) { + var x = value.split(':'); + obj[x[0]] = x[1]; + }); + + // update the cache + cache[name] = obj; + return obj; + } + // perhaps we have a cached copy.. + return cache[name]; + } + + // converts string values to numbers for selected (or all) keys + function asNumbers(obj, keys) { + if (!obj) return null; + + if (!keys) { + // do them all + angular.forEach(obj, function (v, k) { + obj[k] = Number(obj[k]); + }); + } else { + keys.forEach(function (k) { + obj[k] = Number(obj[k]); + }); + } + return obj; + } + + function setPrefs(name, obj) { + var bits = [], + str; + + angular.forEach(obj, function (value, key) { + bits.push(key + ':' + value); + }); + str = bits.join(','); + + // keep a cached copy of the object + cache[name] = obj; + + // The angular way of doing this... + // $cookies[name] = str; + // ...but it appears that this gets delayed, and doesn't 'stick' ?? + + // FORCE cookie to be set by writing directly to document.cookie... + document.cookie = name + '=' + encodeURIComponent(str); + if (fs.debugOn('prefs')) { + $log.debug('<<>> Wrote cookie <'+name+'>:', str); + } + } + + angular.module('onosUtil') + .factory('PrefsService', ['$log', '$cookies', 'FnService', + function (_$log_, _$cookies_, _fs_) { + $log = _$log_; + $cookies = _$cookies_; + fs = _fs_; + + return { + getPrefs: getPrefs, + asNumbers: asNumbers, + setPrefs: setPrefs + }; + }]); + +}()); |