mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-11 04: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:
@@ -722,7 +722,7 @@ function QuickMarks() //{{{
|
|||||||
|
|
||||||
var marks = {};
|
var marks = {};
|
||||||
// load the saved quickmarks -- TODO: change to sqlite
|
// 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)
|
for (var i = 0; i < saved_marks.length - 1; i += 2)
|
||||||
{
|
{
|
||||||
marks[saved_marks[i]] = saved_marks[i + 1];
|
marks[saved_marks[i]] = saved_marks[i + 1];
|
||||||
@@ -783,7 +783,7 @@ function QuickMarks() //{{{
|
|||||||
saved_marks += i + "\n";
|
saved_marks += i + "\n";
|
||||||
saved_marks += marks[i] + "\n";
|
saved_marks += marks[i] + "\n";
|
||||||
}
|
}
|
||||||
Options.setPref("quickmarks", saved_marks);
|
vimperator.options.setPref("quickmarks", saved_marks);
|
||||||
}
|
}
|
||||||
//}}}
|
//}}}
|
||||||
} //}}}
|
} //}}}
|
||||||
|
|||||||
@@ -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.
|
the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
}}} ***** END LICENSE BLOCK *****/
|
}}} ***** 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() //{{{
|
function Options() //{{{
|
||||||
{
|
{
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -182,9 +116,9 @@ function Options() //{{{
|
|||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
//alert("error: " + e);
|
|
||||||
pref = default_value;
|
pref = default_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pref;
|
return pref;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,6 +161,22 @@ function Options() //{{{
|
|||||||
document.title = window.content.document.title + " - " + value; // not perfect fix, but good enough
|
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 //////////////////////////////////////////
|
////////////////////// PUBLIC SECTION //////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////{{{
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
@@ -248,30 +198,104 @@ function Options() //{{{
|
|||||||
|
|
||||||
// TODO: separate Preferences from Options? Would these utility functions
|
// TODO: separate Preferences from Options? Would these utility functions
|
||||||
// be better placed in the 'core' vimperator namespace somewhere?
|
// be better placed in the 'core' vimperator namespace somewhere?
|
||||||
Options.setPref = function(name, value)
|
this.setPref = function(name, value)
|
||||||
{
|
{
|
||||||
return storePreference(name, value, true);
|
return storePreference(name, value, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Options.getPref = function(name, forced_default)
|
this.getPref = function(name, forced_default)
|
||||||
{
|
{
|
||||||
return loadPreference(name, forced_default, true);
|
return loadPreference(name, forced_default, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Options.setFirefoxPref = function(name, value)
|
this.setFirefoxPref = function(name, value)
|
||||||
{
|
{
|
||||||
return storePreference(name, value);
|
return storePreference(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Options.getFirefoxPref = function(name, forced_default)
|
this.getFirefoxPref = function(name, forced_default)
|
||||||
{
|
{
|
||||||
return loadPreference(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 /////////////////////////////////////////
|
////////////////////// 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'] | " +
|
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 | " +
|
"//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'] | " +
|
"//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>T</b>: toolbar</li>" +
|
||||||
"<li><b>b</b>: bookmark bar</li>" +
|
"<li><b>b</b>: bookmark bar</li>" +
|
||||||
"<li><b>s</b>: original Firefox statusbar</li></ul>",
|
"<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: "",
|
default_value: "",
|
||||||
validator: function (value) { if (/[^mTbs]/.test(value)) return false; else return true; }
|
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>1</b>: Show tab bar only if more than one tab is open</li>" +
|
||||||
"<li><b>2</b>: Always show tab bar</li></ul>" +
|
"<li><b>2</b>: Always show tab bar</li></ul>" +
|
||||||
"NOTE: Not fully implemented yet and buggy with stal=0",
|
"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,
|
default_value: 2,
|
||||||
validator: function (value) { if (value>=0 && value <=2) return true; else return false; }
|
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 " +
|
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: " +
|
"\"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>.",
|
"<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"
|
default_value: "Vimperator"
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ function CommandLine() //{{{
|
|||||||
var multiline_callback = null;
|
var multiline_callback = null;
|
||||||
|
|
||||||
// load the commandline history
|
// load the commandline history
|
||||||
var hist = Options.getPref("commandline_history", "");
|
var hist = vimperator.options.getPref("commandline_history", "");
|
||||||
history = hist.split("\n");
|
history = hist.split("\n");
|
||||||
|
|
||||||
// TODO: these styles should be moved to the .css file
|
// 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 ...
|
// it would be better if we had a destructor in javascript ...
|
||||||
this.destroy = function()
|
this.destroy = function()
|
||||||
{
|
{
|
||||||
Options.setPref("commandline_history", history.join("\n"));
|
vimperator.options.setPref("commandline_history", history.join("\n"));
|
||||||
}
|
}
|
||||||
//}}}
|
//}}}
|
||||||
} //}}}
|
} //}}}
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ const vimperator = (function() //{{{
|
|||||||
*/
|
*/
|
||||||
log: function(msg, level)
|
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);
|
console_service.logStringMessage('vimperator: ' + msg);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -365,9 +365,9 @@ const vimperator = (function() //{{{
|
|||||||
quit: function(save_session)
|
quit: function(save_session)
|
||||||
{
|
{
|
||||||
if (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
|
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();
|
goQuitApplication();
|
||||||
},
|
},
|
||||||
@@ -626,32 +626,18 @@ const vimperator = (function() //{{{
|
|||||||
vimperator.registerCallback("submit", vimperator.modes.EX, function(command) { vimperator.execute(command); } );
|
vimperator.registerCallback("submit", vimperator.modes.EX, function(command) { vimperator.execute(command); } );
|
||||||
vimperator.registerCallback("complete", vimperator.modes.EX, function(str) { return exTabCompletion(str); } );
|
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
|
// first time intro message
|
||||||
if (Options.getPref("firsttime", true))
|
if (vimperator.options.getPref("firsttime", true))
|
||||||
{
|
{
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
vimperator.help(null, null, null, { inTab: true });
|
vimperator.help(null, null, null, { inTab: true });
|
||||||
Options.setPref("firsttime", false);
|
vimperator.options.setPref("firsttime", false);
|
||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
//gURLBar.blur(); // TODO: needed anymore?
|
//gURLBar.blur(); // TODO: needed anymore?
|
||||||
vimperator.focusContent();
|
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
|
// finally, read a ~/.vimperatorrc
|
||||||
// make sourcing asynchronous, otherwise commands that open new tabs won't work
|
// make sourcing asynchronous, otherwise commands that open new tabs won't work
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
@@ -683,12 +669,8 @@ const vimperator = (function() //{{{
|
|||||||
// save our preferences
|
// save our preferences
|
||||||
vimperator.commandline.destroy();
|
vimperator.commandline.destroy();
|
||||||
vimperator.events.destroy();
|
vimperator.events.destroy();
|
||||||
|
vimperator.options.destroy();
|
||||||
vimperator.quickmarks.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"
|
// @param value MUST be a string, it can have the following form: "+20%", "200%", "-30"
|
||||||
|
|||||||
Reference in New Issue
Block a user