mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-21 18:27:57 +01:00
Get rid of silly config.helpFiles.
--HG-- branch : xslt rename : common/components/chrome-data.js => common/components/protocols.js
This commit is contained in:
@@ -97,12 +97,7 @@ function Liberator()
|
|||||||
this.__defineGetter__("helpNamespaces", function () NAMESPACES ? NAMESPACES.slice() : null);
|
this.__defineGetter__("helpNamespaces", function () NAMESPACES ? NAMESPACES.slice() : null);
|
||||||
this.__defineSetter__("helpNamespaces", function (namespaces) {
|
this.__defineSetter__("helpNamespaces", function (namespaces) {
|
||||||
if (!NAMESPACES)
|
if (!NAMESPACES)
|
||||||
NAMESPACES = Array.slice(namespaces)
|
parseHelpTags(namespaces);
|
||||||
});
|
|
||||||
this.__defineGetter__("helpFiles", function () HELP_FILES ? HELP_FILES.slice() : null);
|
|
||||||
this.__defineSetter__("helpFiles", function (files) {
|
|
||||||
if (!HELP_FILES)
|
|
||||||
parseHelpTags(files);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function xpath(doc, expression)
|
function xpath(doc, expression)
|
||||||
@@ -131,36 +126,53 @@ function Liberator()
|
|||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
this.HELP_TAGS = {};
|
this.HELP_TAGS = {};
|
||||||
this.FILE_MAP = {};
|
this.FILE_MAP = { all: "chrome://liberator/locale/all.xml" };
|
||||||
var NAMESPACES = null;
|
var NAMESPACES = null;
|
||||||
var HELP_FILES = null;
|
var HELP_FILES = null;
|
||||||
|
|
||||||
function parseHelpTags(files)
|
function XSLTProcessor(sheet)
|
||||||
{
|
{
|
||||||
const XSLT = Cc["@mozilla.org/document-transformer;1?type=xslt"].createInstance(Ci.nsIXSLTProcessor);
|
let xslt = Cc["@mozilla.org/document-transformer;1?type=xslt"].createInstance(Ci.nsIXSLTProcessor);
|
||||||
XSLT.importStylesheet(httpGet("chrome://liberator/content/help.xsl").responseXML);
|
xslt.importStylesheet(httpGet(sheet).responseXML);
|
||||||
for each (let file in files)
|
return xslt;
|
||||||
{
|
}
|
||||||
try
|
|
||||||
|
function findHelpFile(file)
|
||||||
{
|
{
|
||||||
for each (let namespace in NAMESPACES)
|
for each (let namespace in NAMESPACES)
|
||||||
{
|
{
|
||||||
let url = ["chrome://", namespace, "/locale/", file, ".xml"].join("");
|
let url = ["chrome://", namespace, "/locale/", file, ".xml"].join("");
|
||||||
let res = httpGet(url);
|
let res = httpGet(url);
|
||||||
if (res && res.responseXML.documentElement.localName == "document")
|
if (res && res.responseXML.documentElement.localName == "document")
|
||||||
|
return [url, res.responseXML];
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseHelpTags(namespaces)
|
||||||
{
|
{
|
||||||
self.FILE_MAP[file] = url;
|
NAMESPACES = Array.slice(namespaces);
|
||||||
let doc = XSLT.transformToDocument(res.responseXML);
|
let files = xpath(
|
||||||
|
XSLTProcessor("chrome://liberator/content/overlay.xsl")
|
||||||
|
.transformToDocument(httpGet(self.FILE_MAP.all).responseXML),
|
||||||
|
"//liberator:include/@href");
|
||||||
|
self.HELP_TAGS.all = "all";
|
||||||
|
const XSLT = XSLTProcessor("chrome://liberator/content/help.xsl");
|
||||||
|
for each (let file in files)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let [url, doc] = findHelpFile(file.value);
|
||||||
|
if (doc)
|
||||||
|
self.FILE_MAP[file.value] = url;
|
||||||
|
doc = XSLT.transformToDocument(doc);
|
||||||
for (let elem in xpath(doc, "//liberator:tag/text()"))
|
for (let elem in xpath(doc, "//liberator:tag/text()"))
|
||||||
self.HELP_TAGS[elem.textContent] = file;
|
self.HELP_TAGS[elem.textContent] = file.value;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
Components.utils.reportError(e);
|
Components.utils.reportError(e);
|
||||||
dump(e);
|
dump(e + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HELP_FILES = Array.slice(files);
|
HELP_FILES = Array.slice(files);
|
||||||
@@ -50,13 +50,6 @@ const configbase = { //{{{
|
|||||||
*/
|
*/
|
||||||
hostApplication: null,
|
hostApplication: null,
|
||||||
|
|
||||||
/**
|
|
||||||
* @property {[string]} A list of HTML help files available under
|
|
||||||
* chrome://liberator/locale/. Used to generate help tag indexes for
|
|
||||||
* the :help command.
|
|
||||||
*/
|
|
||||||
helpFiles: [],
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property {function} Called on liberator startup to allow for any
|
* @property {function} Called on liberator startup to allow for any
|
||||||
* arbitrary application-specific initialization code.
|
* arbitrary application-specific initialization code.
|
||||||
|
|||||||
@@ -10,9 +10,6 @@
|
|||||||
|
|
||||||
<xsl:output method="xml"/>
|
<xsl:output method="xml"/>
|
||||||
|
|
||||||
<xsl:variable name="local" select="concat('chrome://&liberator.name;/locale/', /liberator:document/@name, '.xml')"/>
|
|
||||||
<xsl:variable name="localdoc" select="document($local)/liberator:overlay"/>
|
|
||||||
|
|
||||||
<xsl:template match="liberator:document">
|
<xsl:template match="liberator:document">
|
||||||
<html:html liberator:highlight="Help">
|
<html:html liberator:highlight="Help">
|
||||||
<html:head>
|
<html:head>
|
||||||
@@ -142,6 +139,12 @@
|
|||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- This does't work. Why?
|
||||||
|
<xsl:include href="chrome://liberator/content/overlay.xsl"/>
|
||||||
|
-->
|
||||||
|
<xsl:variable name="local" select="concat('chrome://&liberator.name;/locale/', /liberator:document/@name, '.xml')"/>
|
||||||
|
<xsl:variable name="localdoc" select="document($local)/liberator:overlay"/>
|
||||||
|
|
||||||
<xsl:template name="splice-locals">
|
<xsl:template name="splice-locals">
|
||||||
<xsl:param name="elem"/>
|
<xsl:param name="elem"/>
|
||||||
<xsl:param name="tag"/>
|
<xsl:param name="tag"/>
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ const liberator = (function () //{{{
|
|||||||
|
|
||||||
options.add(["helpfile", "hf"],
|
options.add(["helpfile", "hf"],
|
||||||
"Name of the main help file",
|
"Name of the main help file",
|
||||||
"string", "intro.html");
|
"string", "intro");
|
||||||
|
|
||||||
options.add(["loadplugins", "lpl"],
|
options.add(["loadplugins", "lpl"],
|
||||||
"Load plugin scripts when starting up",
|
"Load plugin scripts when starting up",
|
||||||
@@ -1356,6 +1356,8 @@ const liberator = (function () //{{{
|
|||||||
*/
|
*/
|
||||||
findHelp: function (topic, unchunked)
|
findHelp: function (topic, unchunked)
|
||||||
{
|
{
|
||||||
|
if (topic in services.get("liberator:").FILE_MAP)
|
||||||
|
return topic;
|
||||||
unchunked = !!unchunked;
|
unchunked = !!unchunked;
|
||||||
let items = completion._runCompleter("help", topic, null, unchunked).items;
|
let items = completion._runCompleter("help", topic, null, unchunked).items;
|
||||||
let partialMatch = null;
|
let partialMatch = null;
|
||||||
@@ -1388,8 +1390,8 @@ const liberator = (function () //{{{
|
|||||||
if (!topic && !unchunked)
|
if (!topic && !unchunked)
|
||||||
{
|
{
|
||||||
let helpFile = options["helpfile"];
|
let helpFile = options["helpfile"];
|
||||||
if (config.helpFiles.indexOf(helpFile) != -1)
|
if (helpFile in services.get("liberator:").FILE_MAP)
|
||||||
liberator.open("liberator://help/" + helpFile.replace(/\.html$/, ""), { from: "help" });
|
liberator.open("liberator://help/" + helpFile, { from: "help" });
|
||||||
else
|
else
|
||||||
liberator.echomsg("Sorry, help file " + helpFile.quote() + " not found");
|
liberator.echomsg("Sorry, help file " + helpFile.quote() + " not found");
|
||||||
return;
|
return;
|
||||||
@@ -1725,7 +1727,6 @@ const liberator = (function () //{{{
|
|||||||
liberator.log("Initializing liberator object...", 0);
|
liberator.log("Initializing liberator object...", 0);
|
||||||
|
|
||||||
services.get("liberator:").helpNamespaces = [config.name.toLowerCase(), "liberator"];
|
services.get("liberator:").helpNamespaces = [config.name.toLowerCase(), "liberator"];
|
||||||
services.get("liberator:").helpFiles = config.helpFiles.map(function (f) f.replace(/\..*/, ""));
|
|
||||||
|
|
||||||
config.features.push(getPlatformFeature());
|
config.features.push(getPlatformFeature());
|
||||||
|
|
||||||
|
|||||||
72
common/content/overlay.xsl
Normal file
72
common/content/overlay.xsl
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE document SYSTEM "chrome://liberator/content/liberator.dtd">
|
||||||
|
|
||||||
|
<xsl:stylesheet version="1.0"
|
||||||
|
xmlns="http://vimperator.org/namespaces/liberator"
|
||||||
|
xmlns:liberator="http://vimperator.org/namespaces/liberator"
|
||||||
|
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:str="http://exslt.org/strings"
|
||||||
|
extension-element-prefixes="str">
|
||||||
|
|
||||||
|
<xsl:variable name="local" select="concat('chrome://&liberator.name;/locale/', /liberator:document/@name, '.xml')"/>
|
||||||
|
<xsl:variable name="localdoc" select="document($local)/liberator:overlay"/>
|
||||||
|
|
||||||
|
<xsl:template match="liberator:document">
|
||||||
|
<xsl:copy>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</xsl:copy>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="splice-locals">
|
||||||
|
<xsl:param name="elem"/>
|
||||||
|
<xsl:param name="tag"/>
|
||||||
|
<xsl:for-each select="$localdoc/*[@insertbefore=$tag]">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$localdoc/*[@replace=$tag] and not($elem[@replace])">
|
||||||
|
<xsl:for-each select="$localdoc/*[@replace=$tag]">
|
||||||
|
<xsl:apply-templates select="." mode="pass-2"/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:for-each select="$elem">
|
||||||
|
<xsl:apply-templates select="." mode="pass-2"/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
<xsl:for-each select="$localdoc/*[@insertafter=$tag]">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="liberator:document/liberator:tags|liberator:document/liberator:tag">
|
||||||
|
<xsl:call-template name="splice-locals">
|
||||||
|
<xsl:with-param name="tag" select="substring-before(concat(., ' '), ' ')"/>
|
||||||
|
<xsl:with-param name="elem" select="self::node()"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
<xsl:template match="liberator:document/*[liberator:tags]">
|
||||||
|
<xsl:call-template name="splice-locals">
|
||||||
|
<xsl:with-param name="tag" select="substring-before(concat(liberator:tags, ' '), ' ')"/>
|
||||||
|
<xsl:with-param name="elem" select="self::node()"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
<xsl:template match="liberator:*[@tag and not(@replace)]">
|
||||||
|
<xsl:call-template name="splice-locals">
|
||||||
|
<xsl:with-param name="tag" select="substring-before(concat(@tag, ' '), ' ')"/>
|
||||||
|
<xsl:with-param name="elem" select="self::node()"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="@*|node()" mode="pass-2">
|
||||||
|
<xsl:copy>
|
||||||
|
<xsl:apply-templates select="@*|node()"/>
|
||||||
|
</xsl:copy>
|
||||||
|
</xsl:template>
|
||||||
|
<xsl:template match="@*|node()">
|
||||||
|
<xsl:apply-templates select="." mode="pass-2"/>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
||||||
|
|
||||||
|
<!-- vim:se ft=xslt sts=4 sw=4 et: -->
|
||||||
@@ -97,16 +97,6 @@ const config = { //{{{
|
|||||||
|
|
||||||
hasTabbrowser: true,
|
hasTabbrowser: true,
|
||||||
|
|
||||||
// they are sorted by relevance, not alphabetically
|
|
||||||
helpFiles: [
|
|
||||||
"intro.html", "tutorial.html", "starting.html", "browsing.html",
|
|
||||||
"buffer.html", "cmdline.html", "insert.html", "options.html",
|
|
||||||
"pattern.html", "tabs.html", "hints.html", "map.html", "eval.html",
|
|
||||||
"marks.html", "repeat.html", "autocommands.html", "print.html",
|
|
||||||
"gui.html", "styling.html", "message.html", "developer.html",
|
|
||||||
"various.html", "version.html", "index.html"
|
|
||||||
],
|
|
||||||
|
|
||||||
get ignoreKeys() {
|
get ignoreKeys() {
|
||||||
delete this.ignoreKeys;
|
delete this.ignoreKeys;
|
||||||
return this.ignoreKeys = {
|
return this.ignoreKeys = {
|
||||||
|
|||||||
@@ -135,17 +135,6 @@ const config = { //{{{
|
|||||||
|
|
||||||
hasTabbrowser: true,
|
hasTabbrowser: true,
|
||||||
|
|
||||||
// TODO : Write intro.html and tutorial.html
|
|
||||||
// they are sorted by relevance, not alphabetically
|
|
||||||
helpFiles: [
|
|
||||||
"intro.html", /*"tutorial.html",*/ "starting.html", "player.html",
|
|
||||||
"browsing.html", "buffer.html", "cmdline.html", "insert.html",
|
|
||||||
"options.html", "pattern.html", "tabs.html", "hints.html", "map.html",
|
|
||||||
"eval.html", "marks.html", "repeat.html", "autocommands.html",
|
|
||||||
"print.html", "gui.html", "styling.html", "message.html",
|
|
||||||
"developer.html", "various.html", "index.html", "version.html"
|
|
||||||
],
|
|
||||||
|
|
||||||
modes: [["PLAYER", { char: "p" }]],
|
modes: [["PLAYER", { char: "p" }]],
|
||||||
|
|
||||||
get ignoreKeys() {
|
get ignoreKeys() {
|
||||||
|
|||||||
Reference in New Issue
Block a user