mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-20 09:27:58 +01:00
Add :styenable, :stydisable, :stytoggle
This commit is contained in:
@@ -1021,7 +1021,7 @@ lookup:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (/\.css$/.test(filename))
|
else if (/\.css$/.test(filename))
|
||||||
storage.styles.registerSheet(uri.spec, true);
|
storage.styles.registerSheet(uri.spec, false, true);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let heredoc = "";
|
let heredoc = "";
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ function Styles(name, store)
|
|||||||
// Can't reference liberator or Components inside Styles --
|
// Can't reference liberator or Components inside Styles --
|
||||||
// they're members of the window object, which disappear
|
// they're members of the window object, which disappear
|
||||||
// with this window.
|
// with this window.
|
||||||
|
const self = this;
|
||||||
const util = modules.util;
|
const util = modules.util;
|
||||||
const sleep = liberator.sleep;
|
const sleep = liberator.sleep;
|
||||||
const storage = modules.storage;
|
const storage = modules.storage;
|
||||||
@@ -260,7 +261,35 @@ function Styles(name, store)
|
|||||||
const namespace = '@namespace html "' + XHTML + '";\n' +
|
const namespace = '@namespace html "' + XHTML + '";\n' +
|
||||||
'@namespace xul "' + XUL + '";\n' +
|
'@namespace xul "' + XUL + '";\n' +
|
||||||
'@namespace liberator "' + NS.uri + '";\n';
|
'@namespace liberator "' + NS.uri + '";\n';
|
||||||
const Sheet = new Struct("name", "sites", "css", "ref", "agent");
|
|
||||||
|
const Sheet = new Struct("name", "id", "sites", "css", "system", "agent");
|
||||||
|
Sheet.prototype.__defineGetter__("fullCSS", function wrapCSS() {
|
||||||
|
let filter = this.sites;
|
||||||
|
let css = this.css;
|
||||||
|
if (filter[0] == "*")
|
||||||
|
return namespace + css;
|
||||||
|
let selectors = filter.map(function (part) (/[*]$/.test(part) ? "url-prefix" :
|
||||||
|
/[\/:]/.test(part) ? "url"
|
||||||
|
: "domain")
|
||||||
|
+ '("' + part.replace(/"/g, "%22").replace(/[*]$/, "") + '")')
|
||||||
|
.join(", ");
|
||||||
|
return namespace + "/* Liberator style #" + this.id + " */ @-moz-document " + selectors + "{\n" + css + "\n}\n";
|
||||||
|
});
|
||||||
|
Sheet.prototype.__defineGetter__("enabled", function () this._enabled);
|
||||||
|
Sheet.prototype.__defineSetter__("enabled", function (on) {
|
||||||
|
this._enabled = Boolean(on);
|
||||||
|
if (on)
|
||||||
|
{
|
||||||
|
self.registerSheet(cssUri(this.fullCSS));
|
||||||
|
if (this.agent)
|
||||||
|
self.registerSheet(cssUri(this.fullCSS), true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.unregisterSheet(cssUri(this.fullCSS));
|
||||||
|
self.unregisterSheet(cssUri(this.fullCSS), true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let cssUri = function (css) "chrome-data:text/css," + window.encodeURI(css);
|
let cssUri = function (css) "chrome-data:text/css," + window.encodeURI(css);
|
||||||
|
|
||||||
@@ -269,6 +298,8 @@ function Styles(name, store)
|
|||||||
let userNames = {};
|
let userNames = {};
|
||||||
let systemNames = {};
|
let systemNames = {};
|
||||||
|
|
||||||
|
let id = 0;
|
||||||
|
|
||||||
this.__iterator__ = function () Iterator(userSheets.concat(systemSheets));
|
this.__iterator__ = function () Iterator(userSheets.concat(systemSheets));
|
||||||
this.__defineGetter__("systemSheets", function () Iterator(systemSheets));
|
this.__defineGetter__("systemSheets", function () Iterator(systemSheets));
|
||||||
this.__defineGetter__("userSheets", function () Iterator(userSheets));
|
this.__defineGetter__("userSheets", function () Iterator(userSheets));
|
||||||
@@ -295,30 +326,20 @@ function Styles(name, store)
|
|||||||
if (name && name in names)
|
if (name && name in names)
|
||||||
this.removeSheet(system, name);
|
this.removeSheet(system, name);
|
||||||
|
|
||||||
let sheet = sheets.filter(function (s) s.sites.join(",") == filter && s.css == css)[0];
|
let sheet = Sheet(name, id++, filter.split(",").filter(util.identity), css, null, system, agent);
|
||||||
if (!sheet)
|
|
||||||
sheet = new Sheet(name, filter.split(",").filter(util.identity), css, null, agent);
|
|
||||||
|
|
||||||
if (sheet.ref == null) // Not registered yet
|
try
|
||||||
{
|
{
|
||||||
sheet.ref = [];
|
sheet.enabled = true;
|
||||||
try
|
|
||||||
{
|
|
||||||
this.registerSheet(cssUri(wrapCSS(sheet)));
|
|
||||||
if (sheet.agent)
|
|
||||||
this.registerAgentSheet(cssUri(wrapCSS(sheet)));
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{
|
|
||||||
return e.echoerr || e;
|
|
||||||
}
|
|
||||||
sheets.push(sheet);
|
|
||||||
}
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
return e.echoerr || e;
|
||||||
|
}
|
||||||
|
sheets.push(sheet);
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
{
|
|
||||||
sheet.ref.push(name);
|
|
||||||
names[name] = sheet;
|
names[name] = sheet;
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -381,6 +402,11 @@ function Styles(name, store)
|
|||||||
this.removeSheet = function (system, name, filter, css, index)
|
this.removeSheet = function (system, name, filter, css, index)
|
||||||
{
|
{
|
||||||
let self = this;
|
let self = this;
|
||||||
|
if (arguments.length == 0)
|
||||||
|
{
|
||||||
|
var matches = [system];
|
||||||
|
system = sheet.system;
|
||||||
|
}
|
||||||
let sheets = system ? systemSheets : userSheets;
|
let sheets = system ? systemSheets : userSheets;
|
||||||
let names = system ? systemNames : userNames;
|
let names = system ? systemNames : userNames;
|
||||||
|
|
||||||
@@ -391,25 +417,20 @@ function Styles(name, store)
|
|||||||
if (filter == undefined)
|
if (filter == undefined)
|
||||||
filter = "";
|
filter = "";
|
||||||
|
|
||||||
let matches = this.findSheets(system, name, filter, css, index);
|
if (!matches)
|
||||||
|
matches = this.findSheets(system, name, filter, css, index);
|
||||||
if (matches.length == 0)
|
if (matches.length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (let [, sheet] in Iterator(matches.reverse()))
|
for (let [, sheet] in Iterator(matches.reverse()))
|
||||||
{
|
{
|
||||||
|
sheet.enabled = false;
|
||||||
if (name)
|
if (name)
|
||||||
{
|
|
||||||
if (sheet.ref.indexOf(name) > -1)
|
|
||||||
sheet.ref.splice(sheet.ref.indexOf(name), 1);
|
|
||||||
delete names[name];
|
delete names[name];
|
||||||
}
|
if (sheets.indexOf(sheet) > -1)
|
||||||
if (!sheet.ref.length)
|
sheets.splice(sheets.indexOf(sheet), 1);
|
||||||
{
|
|
||||||
this.unregisterSheet(cssUri(wrapCSS(sheet)));
|
/* Re-add if we're only changing the site filter. */
|
||||||
this.unregisterAgentSheet(cssUri(wrapCSS(sheet)));
|
|
||||||
if (sheets.indexOf(sheet) > -1)
|
|
||||||
sheets.splice(sheets.indexOf(sheet), 1);
|
|
||||||
}
|
|
||||||
if (filter)
|
if (filter)
|
||||||
{
|
{
|
||||||
let sites = sheet.sites.filter(function (f) f != filter);
|
let sites = sheet.sites.filter(function (f) f != filter);
|
||||||
@@ -424,16 +445,17 @@ function Styles(name, store)
|
|||||||
* Register a user style sheet at the given URI.
|
* Register a user style sheet at the given URI.
|
||||||
*
|
*
|
||||||
* @param {string} uri The URI of the sheet to register.
|
* @param {string} uri The URI of the sheet to register.
|
||||||
|
* @param {boolean} agent If true, sheet is registered as an agent sheet.
|
||||||
* @param {boolean} reload Whether to reload any sheets that are
|
* @param {boolean} reload Whether to reload any sheets that are
|
||||||
* already registered.
|
* already registered.
|
||||||
*/
|
*/
|
||||||
this.registerSheet = function (uri, reload)
|
this.registerSheet = function (uri, agent, reload)
|
||||||
{
|
{
|
||||||
if (reload)
|
if (reload)
|
||||||
this.unregisterSheet(uri);
|
this.unregisterSheet(uri, agent);
|
||||||
uri = ios.newURI(uri, null, null);
|
uri = ios.newURI(uri, null, null);
|
||||||
if (reload || !sss.sheetRegistered(uri, sss.USER_SHEET))
|
if (reload || !sss.sheetRegistered(uri, agent ? sss.AGENT_SHEET : sss.USER_SHEET))
|
||||||
sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
|
sss.loadAndRegisterSheet(uri, agent ? sss.AGENT_SHEET : sss.USER_SHEET);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -441,53 +463,12 @@ function Styles(name, store)
|
|||||||
*
|
*
|
||||||
* @param {string} uri The URI of the sheet to unregister.
|
* @param {string} uri The URI of the sheet to unregister.
|
||||||
*/
|
*/
|
||||||
this.unregisterSheet = function (uri)
|
this.unregisterSheet = function (uri, agent)
|
||||||
{
|
{
|
||||||
uri = ios.newURI(uri, null, null);
|
uri = ios.newURI(uri, null, null);
|
||||||
if (sss.sheetRegistered(uri, sss.USER_SHEET))
|
if (sss.sheetRegistered(uri, agent ? sss.AGENT_SHEET : sss.USER_SHEET))
|
||||||
sss.unregisterSheet(uri, sss.USER_SHEET);
|
sss.unregisterSheet(uri, agent ? sss.AGENT_SHEET : sss.USER_SHEET);
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME
|
|
||||||
/**
|
|
||||||
* Register an agent style sheet.
|
|
||||||
*
|
|
||||||
* @param {string} uri The URI of the sheet to register.
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
this.registerAgentSheet = function (uri)
|
|
||||||
{
|
|
||||||
this.unregisterAgentSheet(uri);
|
|
||||||
uri = ios.newURI(uri, null, null);
|
|
||||||
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregister an agent style sheet.
|
|
||||||
*
|
|
||||||
* @param {string} uri The URI of the sheet to unregister.
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
this.unregisterAgentSheet = function (uri)
|
|
||||||
{
|
|
||||||
uri = ios.newURI(uri, null, null);
|
|
||||||
if (sss.sheetRegistered(uri, sss.AGENT_SHEET))
|
|
||||||
sss.unregisterSheet(uri, sss.AGENT_SHEET);
|
|
||||||
};
|
|
||||||
|
|
||||||
function wrapCSS(sheet)
|
|
||||||
{
|
|
||||||
let filter = sheet.sites;
|
|
||||||
let css = sheet.css;
|
|
||||||
if (filter[0] == "*")
|
|
||||||
return namespace + css;
|
|
||||||
let selectors = filter.map(function (part) (/[*]$/.test(part) ? "url-prefix" :
|
|
||||||
/[\/:]/.test(part) ? "url"
|
|
||||||
: "domain")
|
|
||||||
+ '("' + part.replace(/"/g, "%22").replace(/[*]$/, "") + '")')
|
|
||||||
.join(", ");
|
|
||||||
return namespace + "@-moz-document " + selectors + "{\n" + css + "\n}\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let (array = util.Array)
|
let (array = util.Array)
|
||||||
{
|
{
|
||||||
@@ -567,12 +548,17 @@ liberator.registerObserver("load_commands", function () {
|
|||||||
if (!css)
|
if (!css)
|
||||||
{
|
{
|
||||||
let list = Array.concat([i for (i in styles.userNames)],
|
let list = Array.concat([i for (i in styles.userNames)],
|
||||||
[i for (i in styles.userSheets) if (!i[1].ref.length)]);
|
[i for (i in styles.userSheets) if (!i[1].name)]);
|
||||||
let str = template.tabular(["", "Filter", "CSS"],
|
let str = template.tabular(["", "Name", "Filter", "CSS"],
|
||||||
["padding: 0 1em 0 1ex; vertical-align: top", "padding: 0 1em 0 0; vertical-align: top"],
|
["min-width: 1em; text-align: center; color: red; font-weight: bold;",
|
||||||
([k, v[1].join(","), v[2]]
|
"padding: 0 1em 0 1ex; vertical-align: top;",
|
||||||
for ([i, [k, v]] in Iterator(list))
|
"padding: 0 1em 0 0; vertical-align: top;"],
|
||||||
if ((!filter || v[1].indexOf(filter) >= 0) && (!name || v[0] == name))));
|
([sheet.enabled ? "" : "\u00d7",
|
||||||
|
key,
|
||||||
|
sheet.sites.join(","),
|
||||||
|
sheet.css]
|
||||||
|
for ([i, [key, sheet]] in Iterator(list))
|
||||||
|
if ((!filter || sheet.sites.indexOf(filter) >= 0) && (!name || sheet.name == name))));
|
||||||
commandline.echo(str, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
commandline.echo(str, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -620,18 +606,52 @@ liberator.registerObserver("load_commands", function () {
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
commands.add(["dels[tyle]"],
|
[
|
||||||
"Remove a user style sheet",
|
|
||||||
function (args)
|
|
||||||
{
|
{
|
||||||
styles.removeSheet(false, args["-name"], args[0], args.literalArg, args["-index"]);
|
name: ["stylee[nable]", "stye[nable]"],
|
||||||
|
desc: "Enable a user style sheet",
|
||||||
|
action: function (sheet) sheet.enabled = true,
|
||||||
|
filter: function (sheet) !sheet.enabled
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: ["styled[isable]", "styd[isable]"],
|
||||||
|
desc: "Disable a user style sheet",
|
||||||
|
action: function (sheet) sheet.enabled = false,
|
||||||
|
filter: function (sheet) sheet.enabled
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ["stylet[oggle]", "styt[oggle]"],
|
||||||
|
desc: "Toggle a user style sheet",
|
||||||
|
action: function (sheet) sheet.enabled = !sheet.enabled
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ["dels[tyle]"],
|
||||||
|
desc: "Remove a user style sheet",
|
||||||
|
action: function (sheet) styles.removeSheet(sheet)
|
||||||
|
}
|
||||||
|
].forEach(function (cmd) {
|
||||||
|
commands.add(cmd.name, cmd.desc,
|
||||||
|
function (args)
|
||||||
|
{
|
||||||
|
styles.findSheets(false, args["-name"], args[0], args.literalArg, args["-index"])
|
||||||
|
.forEach(cmd.action);
|
||||||
|
},
|
||||||
{
|
{
|
||||||
completer: function (context) { context.completions = styles.sites.map(function (site) [site, ""]); },
|
completer: function (context) { context.completions = styles.sites.map(function (site) [site, ""]); },
|
||||||
literal: 1,
|
literal: 1,
|
||||||
options: [[["-index", "-i"], commands.OPTION_INT, null, function () [[i, <>{s.sites.join(",")}: {s.css.replace("\n", "\\n")}</>] for ([i, s] in styles.userSheets)]],
|
options: [[["-index", "-i"], commands.OPTION_INT, null,
|
||||||
[["-name", "-n"], commands.OPTION_STRING, null, function () [[k, v.css] for ([k, v] in Iterator(styles.userNames))]]]
|
function (context) {
|
||||||
|
context.compare = CompletionContext.Sort.number;
|
||||||
|
return [[i, <>{sheet.sites.join(",")}: {sheet.css.replace("\n", "\\n")}</>]
|
||||||
|
for ([i, sheet] in styles.userSheets)
|
||||||
|
if (!cmd.filter || cmd.filter(sheet))]
|
||||||
|
}],
|
||||||
|
[["-name", "-n"], commands.OPTION_STRING, null,
|
||||||
|
function () [[name, sheet.css]
|
||||||
|
for ([name, sheet] in Iterator(styles.userNames))
|
||||||
|
if (!cmd.filter || cmd.filter(sheet))]]]
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
commands.add(["hi[ghlight]"],
|
commands.add(["hi[ghlight]"],
|
||||||
"Set the style of certain display elements",
|
"Set the style of certain display elements",
|
||||||
|
|||||||
@@ -287,9 +287,10 @@ var observers = {};
|
|||||||
var timers = {};
|
var timers = {};
|
||||||
|
|
||||||
var storage = {
|
var storage = {
|
||||||
|
alwaysReload: [],
|
||||||
newObject: function newObject(key, constructor, store, type, options, reload)
|
newObject: function newObject(key, constructor, store, type, options, reload)
|
||||||
{
|
{
|
||||||
if (!(key in keys) || reload)
|
if (!(key in keys) || reload || key in this.alwaysReload)
|
||||||
{
|
{
|
||||||
if (key in this && !reload)
|
if (key in this && !reload)
|
||||||
throw Error;
|
throw Error;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
(this might change again, as this is REALLY inconsistent, and i don't
|
(this might change again, as this is REALLY inconsistent, and i don't
|
||||||
know if I like copying bugs)
|
know if I like copying bugs)
|
||||||
|
|
||||||
|
* add [c]:styledisable[c], [c]:styleenable[c], and [c]:styletoggle[c]
|
||||||
* add [c]:sanitize[c], 'sanitizetimespan' and 'sanitizeitems'
|
* add [c]:sanitize[c], 'sanitizetimespan' and 'sanitizeitems'
|
||||||
* add [c]:verbose[c]
|
* add [c]:verbose[c]
|
||||||
* add [c]:window[c] to run a command in a new window
|
* add [c]:window[c] to run a command in a new window
|
||||||
|
|||||||
@@ -133,4 +133,25 @@ style for [a]www.google.com,mozilla.org[a], will result in a style for
|
|||||||
(short option: *-i*)
|
(short option: *-i*)
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|:styleenable| |:stylee| +
|
||||||
|
|:styenable| |:stye| +
|
||||||
|
||:styled[isable] [-name={name} [-index={index}] [{filter}] [{css}]|| +
|
||||||
|
________________________________________________________________________________
|
||||||
|
Enable any matching styles. Arguments are the same as for [c]:delstyle[c].
|
||||||
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|:styledisable| |:styled| +
|
||||||
|
|:stydisable| |:styd| +
|
||||||
|
||:stylee[nable] [-name={name} [-index={index}] [{filter}] [{css}]|| +
|
||||||
|
________________________________________________________________________________
|
||||||
|
Disable any matching styles. Arguments are the same as for [c]:delstyle[c].
|
||||||
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|:styletoggle| |:stylet| +
|
||||||
|
|:stytoggle| |:styt| +
|
||||||
|
||:stylet[oggle] [-name={name} [-index={index}] [{filter}] [{css}]|| +
|
||||||
|
________________________________________________________________________________
|
||||||
|
Toggle any matching styles. Arguments are the same as for [c]:delstyle[c].
|
||||||
|
________________________________________________________________________________
|
||||||
|
|
||||||
// vim: set filetype=asciidoc:
|
// vim: set filetype=asciidoc:
|
||||||
|
|||||||
Reference in New Issue
Block a user