| /* |
| * 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; |
| |
| // 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); |
| $log.debug('<<>> Wrote cookie <'+name+'>:', str); |
| } |
| |
| angular.module('onosUtil') |
| .factory('PrefsService', ['$log', '$cookies', |
| function (_$log_, _$cookies_) { |
| $log = _$log_; |
| $cookies = _$cookies_; |
| |
| return { |
| getPrefs: getPrefs, |
| asNumbers: asNumbers, |
| setPrefs: setPrefs |
| }; |
| }]); |
| |
| }()); |