1 // Copyright (c) 2014 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 var application = requireNative('application');
6 var common = requireNative('widget_common');
11 var widgetStringInfo = {
13 "description" : empty,
18 "authorEmail" : empty,
24 function defineReadOnlyProperty(object, key, value) {
25 Object.defineProperty(object, key, {
30 value = window.innerWidth;
31 } else if (key == "height") {
32 value = window.innerHeight;
33 } else if (value == empty) {
34 value = extension.internal.sendSyncMessage(
35 { cmd: 'GetWidgetInfo', widgetKey: key });
43 for (var key in widgetStringInfo) {
44 defineReadOnlyProperty(exports, key, widgetStringInfo[key]);
47 var WidgetStorage = function() {
48 var _keyList = new Array();
49 var _itemStorage = new Object();
51 var _SetItem = function(itemKey, itemValue) {
52 var result = extension.internal.sendSyncMessage({
53 cmd: 'SetPreferencesItem',
54 preferencesItemKey: String(itemKey),
55 preferencesItemValue: String(itemValue) });
58 if (_itemStorage[String(itemKey)] == undefined)
59 _keyList.push(String(itemKey));
60 _itemStorage[String(itemKey)] = String(itemValue);
63 throw new common.CustomDOMException(
64 common.CustomDOMException.NO_MODIFICATION_ALLOWED_ERR,
65 'The object can not be modified.');
69 var _GetSetter = function(itemKey) {
70 var _itemKey = itemKey;
71 return function(itemValue) {
72 return _SetItem(_itemKey, itemValue);
76 var _GetGetter = function(itemKey) {
77 var _itemKey = itemKey;
79 return _itemStorage[String(_itemKey)];
83 this.init = function() {
84 var result = extension.internal.sendSyncMessage(
85 { cmd: 'GetAllItems' });
86 for (var itemKey in result) {
87 var itemValue = result[String(itemKey)];
88 _itemStorage[String(itemKey)] = itemValue;
89 this.__defineSetter__(String(itemKey), _GetSetter(itemKey));
90 this.__defineGetter__(String(itemKey), _GetGetter(itemKey));
91 _keyList.push(String(itemKey));
95 this.__defineGetter__('length', function() {
96 return _keyList.length;
99 this.key = function(index) {
100 return _keyList[index];
103 this.getItem = function(itemKey) {
104 return _itemStorage[String(itemKey)];
107 this.setItem = function(itemKey, itemValue) {
108 return _SetItem(itemKey, itemValue);
111 this.removeItem = function(itemKey) {
112 var result = extension.internal.sendSyncMessage({
113 cmd: 'RemovePreferencesItem',
114 preferencesItemKey: String(itemKey) });
117 delete this[itemKey];
118 delete _itemStorage[itemKey];
119 _keyList.splice(_keyList.indexOf(String(itemKey)), 1);
121 throw new common.CustomDOMException(
122 common.CustomDOMException.NO_MODIFICATION_ALLOWED_ERR,
123 'The object can not be modified.');
127 this.clear = function() {
129 var result = extension.internal.sendSyncMessage({
130 cmd: 'ClearAllItems' });
135 for (var i = _keyList.length-1; i >= 0; --i) {
136 // if the itemKey is still in DB(e.g. readonly),
137 // we should keep it in JS side.
138 var exists = extension.internal.sendSyncMessage({
140 preferencesItemKey: _keyList[i] });
143 delete this[_keyList[i]];
144 delete _itemStorage[_keyList[i]];
145 _keyList.splice(i, 1);
153 var widgetStorage = new WidgetStorage();
154 exports.preferences = widgetStorage;
156 exports.toString = function() {
157 return '[object Widget]';
160 Object.defineProperty(exports, 'preferences', {
164 return widgetStorage;