diff options
author | Kris Maglione <kris@vimperator.org> | 2010-09-17 06:21:33 -0400 |
---|---|---|
committer | Kris Maglione <kris@vimperator.org> | 2010-09-17 06:21:33 -0400 |
commit | 1557b70f4527c166c5e933c1e2804d511b40dbb9 (patch) | |
tree | 21536d2e6d4f6cf13efe4daf9e0d7d97340bfe80 /common/modules/storage.jsm | |
parent | bfbb4b1313d00f7e5c6418d4976b87e07aa7ce5a (diff) | |
download | pentadactyl-1557b70f4527c166c5e933c1e2804d511b40dbb9.tar.gz |
Major documentation updates and formatting fixes, and many, many other changes thanks to an MQ glitch, including:
* Significant completion speed improvements
* Significantly improve startup speed, in large part by lazily
instantiating Options and Commands, lazily installing highlight
stylesheets, etc.
* Update logos and icons, fix atrocious about page
* Fix Teledactyl
* JavaScript completion now avoids accessing property values
* Add Option#persist to define which options are saved with :mkp
* Add new Dactyl component which holds add-on-specific configuration
information and removes need for separate components for each dactyl
host
* Several fixes for latest nightlies
* Significant code cleanup and many bug fixes
--HG--
rename : muttator/AUTHORS => teledactyl/AUTHORS
rename : muttator/Donors => teledactyl/Donors
rename : muttator/Makefile => teledactyl/Makefile
rename : muttator/NEWS => teledactyl/NEWS
rename : muttator/TODO => teledactyl/TODO
rename : muttator/chrome.manifest => teledactyl/chrome.manifest
rename : muttator/components/commandline-handler.js => teledactyl/components/commandline-handler.js
rename : muttator/components/protocols.js => teledactyl/components/protocols.js
rename : muttator/content/addressbook.js => teledactyl/content/addressbook.js
rename : muttator/content/compose/compose.js => teledactyl/content/compose/compose.js
rename : muttator/content/compose/compose.xul => teledactyl/content/compose/compose.xul
rename : muttator/content/compose/dactyl.dtd => teledactyl/content/compose/dactyl.dtd
rename : muttator/content/compose/dactyl.xul => teledactyl/content/compose/dactyl.xul
rename : muttator/content/config.js => teledactyl/content/config.js
rename : muttator/content/dactyl.dtd => teledactyl/content/dactyl.dtd
rename : muttator/content/logo.png => teledactyl/content/logo.png
rename : muttator/content/mail.js => teledactyl/content/mail.js
rename : muttator/content/muttator.xul => teledactyl/content/pentadactyl.xul
rename : muttator/contrib/vim/Makefile => teledactyl/contrib/vim/Makefile
rename : muttator/contrib/vim/ftdetect/muttator.vim => teledactyl/contrib/vim/ftdetect/muttator.vim
rename : muttator/contrib/vim/mkvimball.txt => teledactyl/contrib/vim/mkvimball.txt
rename : muttator/contrib/vim/syntax/muttator.vim => teledactyl/contrib/vim/syntax/muttator.vim
rename : muttator/install.rdf => teledactyl/install.rdf
rename : muttator/locale/en-US/Makefile => teledactyl/locale/en-US/Makefile
rename : muttator/locale/en-US/all.xml => teledactyl/locale/en-US/all.xml
rename : muttator/locale/en-US/autocommands.xml => teledactyl/locale/en-US/autocommands.xml
rename : muttator/locale/en-US/gui.xml => teledactyl/locale/en-US/gui.xml
rename : muttator/locale/en-US/intro.xml => teledactyl/locale/en-US/intro.xml
rename : muttator/skin/icon.png => teledactyl/skin/icon.png
Diffstat (limited to 'common/modules/storage.jsm')
-rw-r--r-- | common/modules/storage.jsm | 111 |
1 files changed, 51 insertions, 60 deletions
diff --git a/common/modules/storage.jsm b/common/modules/storage.jsm index a2c9850f..76584fd8 100644 --- a/common/modules/storage.jsm +++ b/common/modules/storage.jsm @@ -1,24 +1,7 @@ -/***** BEGIN LICENSE BLOCK ***** {{{ - Copyright ©2008-2009 by Kris Maglione <maglione.k at Gmail> - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -}}} ***** END LICENSE BLOCK *****/ +// Copyright (c) 2008-2010 by Kris Maglione <maglione.k at Gmail> +// +// This work is licensed for reuse under an MIT license. Details are +// given in the LICENSE.txt file included with this file. "use strict"; const myObject = Object; @@ -98,38 +81,6 @@ const StoreBase = Class("StoreBase", { save: function () { savePref(this); }, }); -const ObjectStore = Class("ObjectStore", StoreBase, { - _constructor: myObject, - - clear: function () { - this._object = {}; - this.fireEvent("clear"); - }, - - get: function get(key, default_) key in this._object ? this._object[key] : this.set(key, default_), - - keys: function keys() Object.keys(this._object), - - remove: function remove(key) { - var ret = this._object[key]; - delete this._object[key]; - this.fireEvent("remove", key); - }, - - set: function set(key, val) { - var defined = key in this._object; - var orig = this._object[key]; - this._object[key] = val; - if (!defined) - this.fireEvent("add", key); - else if (orig != val) - this.fireEvent("change", key); - return val; - }, - - __iterator__: function () Iterator(this._object), -}); - const ArrayStore = Class("ArrayStore", StoreBase, { _constructor: Array, @@ -176,12 +127,51 @@ const ArrayStore = Class("ArrayStore", StoreBase, { __iterator__: function () Iterator(this._object), }); +const ObjectStore = Class("ObjectStore", StoreBase, { + _constructor: myObject, + + clear: function () { + this._object = {}; + this.fireEvent("clear"); + }, + + get: function get(key, default_) + key in this._object ? this._object[key] : + arguments.length > 1 ? this.set(key, default_) : + undefined, + + keys: function keys() Object.keys(this._object), + + remove: function remove(key) { + var ret = this._object[key]; + delete this._object[key]; + this.fireEvent("remove", key); + }, + + set: function set(key, val) { + var defined = key in this._object; + var orig = this._object[key]; + this._object[key] = val; + if (!defined) + this.fireEvent("add", key); + else if (orig != val) + this.fireEvent("change", key); + return val; + }, + + __iterator__: function () Iterator(this._object), +}); + var keys = {}; var observers = {}; const Storage = Module("Storage", { alwaysReload: {}, + newObject: function newObject(key, constructor, params) { + if (params == null || !isobject(params)) + throw Error("Invalid argument type"); + if (!(key in keys) || params.reload || this.alwaysReload[key]) { if (key in this && !(params.reload || this.alwaysReload[key])) throw Error(); @@ -198,7 +188,7 @@ const Storage = Module("Storage", { }, newArray: function newArray(key, options) { - return this.newObject(key, ArrayStore, { type: Array, __proto__: options }); + return this.newObject(key, ArrayStore, update({ type: Array }, options)); }, addObserver: function addObserver(key, callback, ref) { @@ -295,7 +285,7 @@ const File = Class("File", { let file = services.create("file"); if (path instanceof Ci.nsIFile) - file = path; + file = path.QueryInterface(Ci.nsIFile); else if (/file:\/\//.test(path)) file = services.create("file:").getFileFromURLSpec(path); else { @@ -317,9 +307,8 @@ const File = Class("File", { iterDirectory: function () { if (!this.isDirectory()) throw Error("Not a directory"); - let entries = this.directoryEntries; - while (entries.hasMoreElements()) - yield File(entries.getNext().QueryInterface(Ci.nsIFile)); + for (let file in iter(this.directoryEntries)) + yield File(file); }, /** @@ -409,6 +398,8 @@ const File = Class("File", { if (!perms) perms = parseInt('0644', 8); + if (!this.exists()) // OCREAT won't creat the directory + this.create(this.NORMAL_FILE_TYPE, perms); ofstream.init(this, mode, perms, 0); let ocstream = getStream(0); @@ -567,8 +558,8 @@ const File = Class("File", { replacePathSep: function (path) path.replace("/", File.PATH_SEP, "g") }); -// catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n");} - endmodule(); +// catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack);} + // vim: set fdm=marker sw=4 sts=4 et ft=javascript: |