mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
60 lines
2.0 KiB
JavaScript
60 lines
2.0 KiB
JavaScript
// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
function ItemPinHelper(aUnpinnedPrefName) {
|
|
this._prefKey = aUnpinnedPrefName;
|
|
}
|
|
|
|
// Cache preferences on a static variable shared
|
|
// by all instances registered to the same pref key.
|
|
ItemPinHelper._prefValue = {};
|
|
|
|
ItemPinHelper.prototype = {
|
|
_getPrefValue: function _getPrefValue() {
|
|
if (ItemPinHelper._prefValue[this._prefKey])
|
|
return ItemPinHelper._prefValue[this._prefKey];
|
|
|
|
try {
|
|
// getComplexValue throws if pref never set. Really.
|
|
let prefValue = Services.prefs.getComplexValue(this._prefKey, Ci.nsISupportsString);
|
|
ItemPinHelper._prefValue[this._prefKey] = JSON.parse(prefValue.data);
|
|
} catch(e) {
|
|
ItemPinHelper._prefValue[this._prefKey] = [];
|
|
}
|
|
|
|
return ItemPinHelper._prefValue[this._prefKey];
|
|
},
|
|
|
|
_setPrefValue: function _setPrefValue(aNewValue) {
|
|
let stringified = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
|
|
stringified.data = JSON.stringify(aNewValue);
|
|
|
|
Services.prefs.setComplexValue(this._prefKey, Ci.nsISupportsString, stringified);
|
|
ItemPinHelper._prefValue[this._prefKey] = aNewValue;
|
|
},
|
|
|
|
isPinned: function isPinned(aItemId) {
|
|
// Bookmarks are visible on StartUI (pinned) by default
|
|
return this._getPrefValue().indexOf(aItemId) === -1;
|
|
},
|
|
|
|
setUnpinned: function setPinned(aItemId) {
|
|
let unpinned = this._getPrefValue();
|
|
unpinned.push(aItemId);
|
|
this._setPrefValue(unpinned);
|
|
},
|
|
|
|
setPinned: function unsetPinned(aItemId) {
|
|
let unpinned = this._getPrefValue();
|
|
|
|
let index = unpinned.indexOf(aItemId);
|
|
unpinned.splice(index, 1);
|
|
|
|
this._setPrefValue(unpinned);
|
|
},
|
|
}
|