1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-05 11:15:46 +01:00

move Option constructor to Options, move

Options.{getPref,setPref,getFirefoxPref,setFirefoxPref} to a slot in
vimperator.options and move all option initialisation to Options()
This commit is contained in:
Doug Kearns
2007-08-06 12:52:33 +00:00
parent 0ab80a8d3a
commit 6508cb8c65
4 changed files with 108 additions and 102 deletions

View File

@@ -722,7 +722,7 @@ function QuickMarks() //{{{
var marks = {};
// load the saved quickmarks -- TODO: change to sqlite
var saved_marks = Options.getPref("quickmarks", "").split("\n");
var saved_marks = vimperator.options.getPref("quickmarks", "").split("\n");
for (var i = 0; i < saved_marks.length - 1; i += 2)
{
marks[saved_marks[i]] = saved_marks[i + 1];
@@ -783,7 +783,7 @@ function QuickMarks() //{{{
saved_marks += i + "\n";
saved_marks += marks[i] + "\n";
}
Options.setPref("quickmarks", saved_marks);
vimperator.options.setPref("quickmarks", saved_marks);
}
//}}}
} //}}}

View File

@@ -26,72 +26,6 @@ the provisions above, a recipient may use your version of this file under
the terms of any one of the MPL, the GPL or the LGPL.
}}} ***** END LICENSE BLOCK *****/
function Option(names, type, extra_info) //{{{
{
if (!names || !type)
return null;
this.name = names[0];
this.names = names;
this.type = type;
this.setter = function(value) { Options.setPref(this.name, value); };
this.getter = function() { return Options.getPref(this.name); };
if (extra_info)
{
if (extra_info.usage)
this.usage = extra_info.usage;
else
this.usage = this.names;
this.help = extra_info.help || null;
this.short_help = extra_info.short_help || null;
// "", 0 are valid default values
if (extra_info.default_value !== undefined)
this.default_value = extra_info.default_value;
else
this.default_value = null;
if (extra_info.setter)
this.setter = extra_info.setter;
if (extra_info.getter)
this.getter = extra_info.getter;
this.completer = extra_info.completer || null;
this.validator = extra_info.validator || null;
}
// add noOPTION variant of boolean OPTION to this.names
if (this.type == "boolean")
{
this.names = [];
for (var i = 0; i < names.length; i++)
{
this.names.push(names[i]);
this.names.push("no" + names[i]);
}
}
// NOTE: forced defaults need to use Options.getPref
Option.prototype.__defineGetter__("value", function() { return this.getter.call(this); });
Option.prototype.__defineSetter__("value", function(value) { this.setter.call(this, value); });
// TODO: add is[Type]() queries for use in set()?
// : add isValid() or just throw an exception?
this.hasName = function(name)
{
for (var i = 0; i < this.names.length; i++)
{
if (this.names[i] == name)
return true;
}
return false;
}
} //}}}
function Options() //{{{
{
////////////////////////////////////////////////////////////////////////////////
@@ -182,9 +116,9 @@ function Options() //{{{
}
catch (e)
{
//alert("error: " + e);
pref = default_value;
}
return pref;
}
@@ -227,6 +161,22 @@ function Options() //{{{
document.title = window.content.document.title + " - " + value; // not perfect fix, but good enough
}
//
// firefox preferences which we need to be changed to work well with vimperator
//
// work around firefox popup blocker
var popup_allowed_events = loadPreference('dom.popup_allowed_events', 'change click dblclick mouseup reset submit');
if (!popup_allowed_events.match("keypress"))
storePreference('dom.popup_allowed_events', popup_allowed_events + " keypress");
// TODO: should we be resetting these in destroy too?
// we have our own typeahead find implementation
storePreference('accessibility.typeaheadfind.autostart', false);
storePreference('accessibility.typeaheadfind', false); // actually the above setting should do it, but has no effect in firefox
storePreference("browser.startup.page", 3); // start with saved session
/////////////////////////////////////////////////////////////////////////////}}}
////////////////////// PUBLIC SECTION //////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{
@@ -248,30 +198,104 @@ function Options() //{{{
// TODO: separate Preferences from Options? Would these utility functions
// be better placed in the 'core' vimperator namespace somewhere?
Options.setPref = function(name, value)
this.setPref = function(name, value)
{
return storePreference(name, value, true);
}
Options.getPref = function(name, forced_default)
this.getPref = function(name, forced_default)
{
return loadPreference(name, forced_default, true);
}
Options.setFirefoxPref = function(name, value)
this.setFirefoxPref = function(name, value)
{
return storePreference(name, value);
}
Options.getFirefoxPref = function(name, forced_default)
this.getFirefoxPref = function(name, forced_default)
{
return loadPreference(name, forced_default);
}
this.destroy = function()
{
// reset some modified firefox prefs
if (this.getFirefoxPref('dom.popup_allowed_events', 'change click dblclick mouseup reset submit')
== popup_allowed_events + " keypress")
this.setFirefoxPref('dom.popup_allowed_events', popup_allowed_events);
}
/////////////////////////////////////////////////////////////////////////////}}}
////////////////////// DEFAULT OPTIONS /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{
function Option(names, type, extra_info) //{{{
{
if (!names || !type)
return null;
this.name = names[0];
this.names = names;
this.type = type;
this.setter = function(value) { storePreference(this.name, value, true); };
this.getter = function() { return loadPreference(this.name, true); };
if (extra_info)
{
if (extra_info.usage)
this.usage = extra_info.usage;
else
this.usage = this.names;
this.help = extra_info.help || null;
this.short_help = extra_info.short_help || null;
// "", 0 are valid default values
if (extra_info.default_value !== undefined)
this.default_value = extra_info.default_value;
else
this.default_value = null;
if (extra_info.setter)
this.setter = extra_info.setter;
if (extra_info.getter)
this.getter = extra_info.getter;
this.completer = extra_info.completer || null;
this.validator = extra_info.validator || null;
}
// add noOPTION variant of boolean OPTION to this.names
if (this.type == "boolean")
{
this.names = [];
for (var i = 0; i < names.length; i++)
{
this.names.push(names[i]);
this.names.push("no" + names[i]);
}
}
// NOTE: forced defaults need to use vimperator.options.getPref
this.__defineGetter__("value", function() { return this.getter.call(this); });
this.__defineSetter__("value", function(value) { this.setter.call(this, value); });
// TODO: add is[Type]() queries for use in set()?
// : add isValid() or just throw an exception?
this.hasName = function(name)
{
for (var i = 0; i < this.names.length; i++)
{
if (this.names[i] == name)
return true;
}
return false;
}
} //}}}
const DEFAULT_HINTTAGS = "//*[@onclick or @onmouseover or @onmousedown or @onmouseup or @oncommand or @class='lk' or @class='s'] | " +
"//input[not(@type='hidden')] | //a | //area | //iframe | //textarea | //button | //select | " +
"//xhtml:*[@onclick or @onmouseover or @onmousedown or @onmouseup or @oncommand or @class='lk' or @class='s'] | " +
@@ -347,7 +371,7 @@ function Options() //{{{
"<li><b>T</b>: toolbar</li>" +
"<li><b>b</b>: bookmark bar</li>" +
"<li><b>s</b>: original Firefox statusbar</li></ul>",
setter: function(value) { Options.setPref("guioptions", value); setGuiOptions(value); },
setter: function(value) { this.setPref("guioptions", value); setGuiOptions(value); },
default_value: "",
validator: function (value) { if (/[^mTbs]/.test(value)) return false; else return true; }
}
@@ -422,7 +446,7 @@ function Options() //{{{
"<li><b>1</b>: Show tab bar only if more than one tab is open</li>" +
"<li><b>2</b>: Always show tab bar</li></ul>" +
"NOTE: Not fully implemented yet and buggy with stal=0",
setter: function(value) { Options.setPref("showtabline", value); setShowTabline(value); },
setter: function(value) { this.setPref("showtabline", value); setShowTabline(value); },
default_value: 2,
validator: function (value) { if (value>=0 && value <=2) return true; else return false; }
}
@@ -433,7 +457,7 @@ function Options() //{{{
help: "Vimperator changes the browser title from \"Title of web page - Mozilla Firefox\" to " +
"\"Title of web page - Vimperator\".<br/>If you don't like that, you can restore it with: " +
"<code class=\"command\">:set titlestring=Mozilla Firefox</code>.",
setter: function(value) { Options.setPref("titlestring", value); setTitleString(value); },
setter: function(value) { this.setPref("titlestring", value); setTitleString(value); },
default_value: "Vimperator"
}
));

View File

@@ -84,7 +84,7 @@ function CommandLine() //{{{
var multiline_callback = null;
// load the commandline history
var hist = Options.getPref("commandline_history", "");
var hist = vimperator.options.getPref("commandline_history", "");
history = hist.split("\n");
// TODO: these styles should be moved to the .css file
@@ -564,7 +564,7 @@ function CommandLine() //{{{
// it would be better if we had a destructor in javascript ...
this.destroy = function()
{
Options.setPref("commandline_history", history.join("\n"));
vimperator.options.setPref("commandline_history", history.join("\n"));
}
//}}}
} //}}}

View File

@@ -266,7 +266,7 @@ const vimperator = (function() //{{{
*/
log: function(msg, level)
{
// if (Options.getPref("verbose") >= level) // FIXME: hangs vimperator, probably timing issue --mst
// if (vimperator.options.getPref("verbose") >= level) // FIXME: hangs vimperator, probably timing issue --mst
console_service.logStringMessage('vimperator: ' + msg);
},
@@ -365,9 +365,9 @@ const vimperator = (function() //{{{
quit: function(save_session)
{
if (save_session)
Options.setFirefoxPref("browser.startup.page", 3); // start with saved session
vimperator.options.setFirefoxPref("browser.startup.page", 3); // start with saved session
else
Options.setFirefoxPref("browser.startup.page", 1); // start with default homepage session
vimperator.options.setFirefoxPref("browser.startup.page", 1); // start with default homepage session
goQuitApplication();
},
@@ -626,32 +626,18 @@ const vimperator = (function() //{{{
vimperator.registerCallback("submit", vimperator.modes.EX, function(command) { vimperator.execute(command); } );
vimperator.registerCallback("complete", vimperator.modes.EX, function(str) { return exTabCompletion(str); } );
// TODO: move most of the following code to Options constructor
// work around firefox popup blocker
popup_allowed_events = Options.getFirefoxPref('dom.popup_allowed_events', 'change click dblclick mouseup reset submit');
if (!popup_allowed_events.match("keypress"))
Options.setFirefoxPref('dom.popup_allowed_events', popup_allowed_events + " keypress");
// we have our own typeahead find implementation
Options.setFirefoxPref('accessibility.typeaheadfind.autostart', false);
Options.setFirefoxPref('accessibility.typeaheadfind', false); // actually the above setting should do it, but has no effect in firefox
// first time intro message
if (Options.getPref("firsttime", true))
if (vimperator.options.getPref("firsttime", true))
{
setTimeout(function() {
vimperator.help(null, null, null, { inTab: true });
Options.setPref("firsttime", false);
vimperator.options.setPref("firsttime", false);
}, 1000);
}
//gURLBar.blur(); // TODO: needed anymore?
vimperator.focusContent();
// firefox preferences which we need to be changed to work well with vimperator
Options.setFirefoxPref("browser.startup.page", 3); // start with saved session
// finally, read a ~/.vimperatorrc
// make sourcing asynchronous, otherwise commands that open new tabs won't work
setTimeout(function() {
@@ -683,12 +669,8 @@ const vimperator = (function() //{{{
// save our preferences
vimperator.commandline.destroy();
vimperator.events.destroy();
vimperator.options.destroy();
vimperator.quickmarks.destroy();
// reset some modified firefox prefs
if (Options.getFirefoxPref('dom.popup_allowed_events', 'change click dblclick mouseup reset submit')
== popup_allowed_events + " keypress")
Options.setFirefoxPref('dom.popup_allowed_events', popup_allowed_events);
},
// @param value MUST be a string, it can have the following form: "+20%", "200%", "-30"