mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-23 10:57:58 +01:00
Merge.
This commit is contained in:
@@ -4,6 +4,7 @@ TOP = $(shell pwd)
|
||||
OS = $(shell uname -s)
|
||||
BUILD_DATE = $(shell date "+%Y/%m/%d %H:%M:%S")
|
||||
BASE = $(TOP)/../common
|
||||
GOOGLE_PROJ = vimperator-labs
|
||||
|
||||
LOCALEDIR = locale
|
||||
DOC_FILES = $(wildcard $(LOCALEDIR)/*/*.xml)
|
||||
@@ -56,6 +57,7 @@ help:
|
||||
@echo " make jar - build a JAR ($(JAR))"
|
||||
@echo " make xpi - build an XPI ($(XPI_NAME))"
|
||||
@echo " make release - updates update.rdf (this is not for you)"
|
||||
@echo " make release - uploads to Google Code (this is not for you)"
|
||||
@echo " make clean - clean up"
|
||||
@echo " make distclean - clean up more"
|
||||
@echo
|
||||
@@ -72,6 +74,19 @@ jar: $(JAR)
|
||||
|
||||
release: $(XPI) $(RDF)
|
||||
|
||||
# This is not for you!
|
||||
dist: $(XPI)
|
||||
[ -n "$(featured)" ] && labels="$$labels,Featured"; \
|
||||
proj=$$(echo -n $(NAME) | sed 's/\(.\).*/\1/' | tr a-z A-Z); \
|
||||
proj="$$proj$$(echo $(NAME) | sed 's/.//')"; \
|
||||
[ -z "$$description" ] && description="$$proj $(VERSION) Release"; \
|
||||
\
|
||||
labels=$$(echo -n "$$labels,Project-$$proj" | sed 's/^,*//g'); \
|
||||
\
|
||||
googlecode_upload -s "$$description" -l "$$labels" \
|
||||
-p "$(GOOGLE_PROJ)" -u "$(GOOGLE_USER)" -w "$(GOOGLE_PASS)" \
|
||||
-- "$(XPI)"
|
||||
|
||||
$(RDF): $(RDF_IN) Makefile
|
||||
@echo "Preparing release..."
|
||||
$(SED) -e "s,###VERSION###,$(VERSION),g" \
|
||||
|
||||
@@ -249,7 +249,7 @@ function Bookmarks() //{{{
|
||||
statusline.updateUrl();
|
||||
};
|
||||
|
||||
var cache = storage.newObject("bookmark-cache", Cache, false);
|
||||
var cache = storage.newObject("bookmark-cache", Cache, { store: false });
|
||||
storage.addObserver("bookmark-cache", bookmarkObserver, window);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////}}}
|
||||
|
||||
@@ -99,7 +99,7 @@ function Browser() //{{{
|
||||
}
|
||||
}
|
||||
}).init();
|
||||
}, false);
|
||||
}, { store: false });
|
||||
storage.addObserver("private-mode",
|
||||
function (key, event, value) {
|
||||
autocommands.trigger("PrivateMode", { state: value });
|
||||
|
||||
@@ -1,15 +1,28 @@
|
||||
<!DOCTYPE document SYSTEM "chrome://liberator/content/liberator.dtd">
|
||||
|
||||
<!-- Header {{{1 -->
|
||||
<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"
|
||||
xmlns:exsl="http://exslt.org/common"
|
||||
extension-element-prefixes="str">
|
||||
|
||||
<xsl:output method="xml" indent="no"/>
|
||||
|
||||
<!-- Variable Definitions {{{1 -->
|
||||
|
||||
<xsl:variable name="tags">
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:for-each select="//@tag|//liberator:tags/text()|//liberator:tag/text()">
|
||||
<xsl:value-of select="concat(., ' ')"/>
|
||||
</xsl:for-each>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- Root {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:document">
|
||||
<html:html liberator:highlight="Help">
|
||||
<html:head>
|
||||
@@ -28,42 +41,51 @@
|
||||
</html:html>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="liberator:include" mode="pass-2">
|
||||
<xsl:apply-templates select="document(@href)/liberator:document/node()"/>
|
||||
</xsl:template>
|
||||
<!-- Table of Contents {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:dl" mode="pass-2">
|
||||
<xsl:template name="toc">
|
||||
<xsl:param name="level"/>
|
||||
<xsl:param name="context"/>
|
||||
|
||||
<xsl:variable name="tag" select="concat('h', $level)"/>
|
||||
<xsl:variable name="lasttag" select="concat('h', $level - 1)"/>
|
||||
|
||||
<xsl:variable name="nodes" select="//liberator:document/liberator:*[
|
||||
local-name() = $tag and preceding-sibling::*[local-name() = $lasttag][position() = 1 and . = $context]]"/>
|
||||
|
||||
<xsl:if test="$nodes">
|
||||
<html:ol liberator:highlight="HelpOrderedList">
|
||||
<xsl:for-each select="$nodes">
|
||||
<li>
|
||||
<html:a>
|
||||
<xsl:if test="@tag">
|
||||
<xsl:attribute name="href"><xsl:value-of select="concat('#', substring-before(concat(@tag, ' '), ' '))"/></xsl:attribute>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="node()"/>
|
||||
</html:a>
|
||||
<xsl:call-template name="toc">
|
||||
<xsl:with-param name="level" select="$level + 1"/>
|
||||
<xsl:with-param name="context" select="."/>
|
||||
</xsl:call-template>
|
||||
</li>
|
||||
</xsl:for-each>
|
||||
</html:ol>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
<xsl:template match="liberator:h1" mode="pass-2">
|
||||
<xsl:copy>
|
||||
<column/>
|
||||
<column/>
|
||||
<xsl:for-each select="liberator:dt">
|
||||
<tr>
|
||||
<xsl:apply-templates select="."/>
|
||||
<xsl:apply-templates select="following-sibling::liberator:dd[position()=1]"/>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
<xsl:apply-templates select="@*|node()"/>
|
||||
</xsl:copy>
|
||||
<html:div liberator:highlight="HelpTOC">
|
||||
<h2>Contents</h2>
|
||||
<xsl:call-template name="toc">
|
||||
<xsl:with-param name="level" select="2"/>
|
||||
<xsl:with-param name="context" select="."/>
|
||||
</xsl:call-template>
|
||||
</html:div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="liberator:tags" mode="pass-2">
|
||||
<html:div style="clear: right"/>
|
||||
<xsl:call-template name="parse-tags">
|
||||
<xsl:with-param name="text" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
<xsl:template match="liberator:tag|@tag" mode="pass-2">
|
||||
<xsl:call-template name="parse-tags">
|
||||
<xsl:with-param name="text"><xsl:value-of select="."/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
<xsl:template name="parse-tags">
|
||||
<xsl:param name="text"/>
|
||||
<tags>
|
||||
<xsl:for-each select="str:tokenize($text)">
|
||||
<html:a id="{.}"><tag><xsl:value-of select="."/></tag></html:a>
|
||||
</xsl:for-each>
|
||||
</tags>
|
||||
</xsl:template>
|
||||
<!-- Items {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:item" mode="pass-2">
|
||||
<xsl:copy>
|
||||
@@ -93,17 +115,13 @@
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<span>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$type = 'boolean'">
|
||||
<xsl:attribute name="highlight" namespace="http://vimperator.org/namespaces/liberator">Boolean</xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:when test="$type = 'number'">
|
||||
<xsl:attribute name="highlight" namespace="http://vimperator.org/namespaces/liberator">Number</xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:when test="$type = 'charlist'">
|
||||
<xsl:attribute name="highlight" namespace="http://vimperator.org/namespaces/liberator">String</xsl:attribute>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:attribute name="highlight" namespace="http://vimperator.org/namespaces/liberator">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$type = 'boolean'">Boolean</xsl:when>
|
||||
<xsl:when test="$type = 'number'">Number</xsl:when>
|
||||
<xsl:when test="$type = 'charlist'">String</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
<xsl:apply-templates/>
|
||||
</span>
|
||||
</xsl:otherwise>
|
||||
@@ -111,19 +129,41 @@
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Tag Definitions {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:tags" mode="pass-2">
|
||||
<html:div style="clear: right"/>
|
||||
<xsl:call-template name="parse-tags">
|
||||
<xsl:with-param name="text" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
<xsl:template match="liberator:tag|@tag" mode="pass-2">
|
||||
<xsl:call-template name="parse-tags">
|
||||
<xsl:with-param name="text"><xsl:value-of select="."/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
<xsl:template name="parse-tags">
|
||||
<xsl:param name="text"/>
|
||||
<tags>
|
||||
<xsl:for-each select="str:tokenize($text)">
|
||||
<html:a id="{.}"><tag><xsl:value-of select="."/></tag></html:a>
|
||||
</xsl:for-each>
|
||||
</tags>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Tag Links {{{1 -->
|
||||
|
||||
<xsl:template name="linkify-tag">
|
||||
<xsl:param name="contents"/>
|
||||
<xsl:variable name="tag" select="str:tokenize($contents, ' [')[1]"/>
|
||||
<html:a href="liberator://help-tag/{$tag}" style="color: inherit;">
|
||||
<xsl:if test="
|
||||
//liberator:tags[contains(concat(' ', ., ' '), concat(' ', $tag, ' '))] |
|
||||
//liberator:tag[contains(concat(' ', ., ' '), concat(' ', $tag, ' '))] |
|
||||
//@tag[contains(concat(' ', ., ' '), concat(' ', $tag, ' '))]">
|
||||
<xsl:if test="contains($tags, concat(' ', $tag, ' '))">
|
||||
<xsl:attribute name="href">#<xsl:value-of select="$tag"/></xsl:attribute>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="$contents"/>
|
||||
</html:a>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="liberator:o" mode="pass-2">
|
||||
<xsl:copy>
|
||||
<xsl:call-template name="linkify-tag">
|
||||
@@ -145,8 +185,14 @@
|
||||
</xsl:call-template>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- HTML-ish elements {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:ul" mode="pass-2">
|
||||
<html:ul liberator:highlight="HelpList"><xsl:apply-templates select="@*|node()"/></html:ul>
|
||||
</xsl:template>
|
||||
<xsl:template match="liberator:ol" mode="pass-2">
|
||||
<html:ol><xsl:apply-templates select="@*|node()"/></html:ol>
|
||||
<html:ol liberator:highlight="HelpOrderedList"><xsl:apply-templates select="@*|node()"/></html:ol>
|
||||
</xsl:template>
|
||||
<xsl:template match="liberator:ex" mode="pass-2">
|
||||
<xsl:copy>
|
||||
@@ -156,23 +202,43 @@
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="liberator:dl" mode="pass-2">
|
||||
<xsl:copy>
|
||||
<column/>
|
||||
<column/>
|
||||
<xsl:for-each select="liberator:dt">
|
||||
<tr>
|
||||
<xsl:apply-templates select="."/>
|
||||
<xsl:apply-templates select="following-sibling::liberator:dd[position()=1]"/>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="liberator:link" mode="pass-2">
|
||||
<html:a href="{@topic}"><xsl:apply-templates select="@*|node()"/></html:a>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Special Element Templates {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:pan[liberator:handle]">
|
||||
<form style="text-align:center" xmlns="http://www.w3.org/1999/xhtml"
|
||||
action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<input type="hidden" name="cmd" value="_s-xclick"/>
|
||||
<input type="image" src="chrome://liberator/content/x-click-but21.gif" border="0" name="submit" alt="Donate with PayPal"/>
|
||||
<input type="image" src="chrome://liberator/content/x-click-but21.png" border="0" name="submit" alt="Donate with PayPal"/>
|
||||
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
|
||||
"/>
|
||||
</form>
|
||||
</xsl:template>
|
||||
|
||||
<!-- This does't work. Why?
|
||||
<xsl:include href="chrome://liberator/content/overlay.xsl"/>
|
||||
-->
|
||||
<!-- Process Inclusions {{{1 -->
|
||||
|
||||
<xsl:template match="liberator:include" mode="pass-2">
|
||||
<xsl:apply-templates select="document(@href)/liberator:document/node()"/>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Process Overlays {{{1 -->
|
||||
|
||||
<xsl:variable name="overlay" select="concat('liberator://help-overlay/', /liberator:document/@name)"/>
|
||||
<xsl:variable name="overlaydoc" select="document($overlay)/liberator:overlay"/>
|
||||
|
||||
@@ -218,6 +284,8 @@
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Process Tree {{{1 -->
|
||||
|
||||
<xsl:template match="@*|node()" mode="pass-2">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*|node()"/>
|
||||
@@ -228,4 +296,4 @@
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
|
||||
<!-- vim:se ft=xslt sts=4 sw=4 et: -->
|
||||
<!-- vim:se ft=xslt sts=4 sw=4 et fdm=marker: -->
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* @constant
|
||||
* @property {string} The default highlighting rules. They have the
|
||||
* form:
|
||||
* rule ::= selector space css
|
||||
* rule ::= selector space space+ css
|
||||
* selector ::= group
|
||||
* | group "," css-selector
|
||||
* | group "," css-selector "," scope
|
||||
@@ -44,21 +44,21 @@ Highlights.prototype.CSS = <![CDATA[
|
||||
CmdOutput white-space: pre;
|
||||
|
||||
CompGroup
|
||||
CompGroup:not(:first-of-type) margin-top: .5em;
|
||||
CompTitle color: magenta; background: white; font-weight: bold;
|
||||
CompTitle>* padding: 0 .5ex;
|
||||
CompMsg font-style: italic; margin-left: 16px;
|
||||
CompGroup:not(:first-of-type) margin-top: .5em;
|
||||
CompTitle color: magenta; background: white; font-weight: bold;
|
||||
CompTitle>* padding: 0 .5ex;
|
||||
CompMsg font-style: italic; margin-left: 16px;
|
||||
CompItem
|
||||
CompItem[selected] background: yellow;
|
||||
CompItem>* padding: 0 .5ex;
|
||||
CompIcon width: 16px; min-width: 16px; display: inline-block; margin-right: .5ex;
|
||||
CompIcon>img max-width: 16px; max-height: 16px; vertical-align: middle;
|
||||
CompResult width: 45%; overflow: hidden;
|
||||
CompDesc color: gray; width: 50%;
|
||||
CompLess text-align: center; height: 0; line-height: .5ex; padding-top: 1ex;
|
||||
CompLess::after content: "\2303" /* Unicode up arrowhead */
|
||||
CompMore text-align: center; height: .5ex; line-height: .5ex; margin-bottom: -.5ex;
|
||||
CompMore::after content: "\2304" /* Unicode down arrowhead */
|
||||
CompItem[selected] background: yellow;
|
||||
CompItem>* padding: 0 .5ex;
|
||||
CompIcon width: 16px; min-width: 16px; display: inline-block; margin-right: .5ex;
|
||||
CompIcon>img max-width: 16px; max-height: 16px; vertical-align: middle;
|
||||
CompResult width: 45%; overflow: hidden;
|
||||
CompDesc color: gray; width: 50%;
|
||||
CompLess text-align: center; height: 0; line-height: .5ex; padding-top: 1ex;
|
||||
CompLess::after content: "\2303" /* Unicode up arrowhead */
|
||||
CompMore text-align: center; height: .5ex; line-height: .5ex; margin-bottom: -.5ex;
|
||||
CompMore::after content: "\2304" /* Unicode down arrowhead */
|
||||
|
||||
Gradient height: 1px; margin-bottom: -1px; margin-top: -1px;
|
||||
GradientLeft background-color: magenta;
|
||||
@@ -73,10 +73,10 @@ Highlights.prototype.CSS = <![CDATA[
|
||||
LineNr color: orange; background: white;
|
||||
Question color: green; background: white; font-weight: bold;
|
||||
|
||||
StatusLine color: white; background: black;
|
||||
StatusLineBroken color: black; background: #FFa0a0 /* light-red */
|
||||
StatusLineSecure color: black; background: #a0a0FF /* light-blue */
|
||||
StatusLineExtended color: black; background: #a0FFa0 /* light-green */
|
||||
StatusLine color: white; background: black;
|
||||
StatusLineBroken color: black; background: #FFa0a0 /* light-red */
|
||||
StatusLineSecure color: black; background: #a0a0FF /* light-blue */
|
||||
StatusLineExtended color: black; background: #a0FFa0 /* light-green */
|
||||
|
||||
TabClose,.tab-close-button
|
||||
TabIcon,.tab-icon
|
||||
@@ -154,9 +154,9 @@ Highlights.prototype.CSS = <![CDATA[
|
||||
HelpLink,liberator|*>html|a text-decoration: none;
|
||||
HelpLink:hover text-decoration: underline;
|
||||
|
||||
HelpList,liberator|ul display: block; list-style: outside disc;
|
||||
HelpOrderedList,liberator|*>html:ol display: block; list-style: outside decimal;
|
||||
HelpListItem,liberator|li display: list-item; margin-left: 1.5em;
|
||||
HelpList display: block; list-style: outside disc;
|
||||
HelpOrderedList display: block; list-style: outside decimal;
|
||||
HelpListItem,liberator|li display: list-item;
|
||||
|
||||
HelpNote,liberator|note display: block; margin: 1em 0em;
|
||||
HelpNote::before content: "Note: "; color: red; font-weight: bold;
|
||||
@@ -175,6 +175,9 @@ Highlights.prototype.CSS = <![CDATA[
|
||||
HelpSubhead,liberator|h2 display: block; margin: 1em 0; padding-bottom: .2ex; border-bottom-width: 1px; font-size: 1.2em; font-weight: bold; color: #527BBD; clear: both;
|
||||
HelpSubsubhead,liberator|h3 display: block; margin: 1em 0; padding-bottom: .2ex; font-size: 1.1em; font-weight: bold; color: #527BBD; clear: both;
|
||||
|
||||
HelpTOC
|
||||
HelpTOC>ol ol margin-left: -1em;
|
||||
|
||||
HelpTab,liberator|dl display: table; width: 100%; margin: 1em 0; border-bottom-width: 1px; border-top-width: 1px; padding: .5ex 0; table-layout: fixed;
|
||||
HelpTabColumn,liberator|column display: table-column;
|
||||
HelpTabColumn:first-child width: 25%;
|
||||
@@ -300,11 +303,11 @@ function Highlights(name, store)
|
||||
*/
|
||||
this.loadCSS = function (css)
|
||||
{
|
||||
css.replace(/^(\s*\S*\s+)\{((?:.|\n)*?)\}\s*$/gm, function (_, _1, _2) _1 + _2.replace(/\n\s*/g, " "))
|
||||
css.replace(/^(\s*\S*\s+)\{((?:.|\n)*?)\}\s*$/gm, function (_, _1, _2) _1 + " " + _2.replace(/\n\s*/g, " "))
|
||||
.split("\n").filter(function (s) /\S/.test(s))
|
||||
.forEach(function (style)
|
||||
{
|
||||
style = Highlight.apply(Highlight, Array.slice(style.match(/^\s*([^,\s]+)(?:,([^,\s]+)?)?(?:,([^,\s]+))?\s*(.*)$/), 1));
|
||||
style = Highlight.apply(Highlight, Array.slice(style.match(/^\s*((?:[^,\s]|\s\S)+)(?:,((?:[^,\s]|\s\S)+)?)?(?:,((?:[^,\s]|\s\S)+))?\s*(.*)$/), 1));
|
||||
if (/^[>+ ]/.test(style.selector))
|
||||
style.selector = self.selector(style.class) + style.selector;
|
||||
|
||||
@@ -581,12 +584,12 @@ let (array = util.Array)
|
||||
/**
|
||||
* @property {Styles}
|
||||
*/
|
||||
const styles = storage.newObject("styles", Styles, false);
|
||||
const styles = storage.newObject("styles", Styles, { store: false });
|
||||
|
||||
/**
|
||||
* @property {Highlights}
|
||||
*/
|
||||
const highlight = storage.newObject("highlight", Highlights, false);
|
||||
const highlight = storage.newObject("highlight", Highlights, { store: false });
|
||||
|
||||
if (highlight.CSS != Highlights.prototype.CSS)
|
||||
{
|
||||
@@ -785,7 +788,7 @@ liberator.registerObserver("load_commands", function () {
|
||||
args.completeArg = args.completeArg > 1 ? -1 : 0;
|
||||
|
||||
if (args.completeArg == 0)
|
||||
context.completions = [[v.class, ""] for (v in highlight)];
|
||||
context.completions = [[v.class, v.value] for (v in highlight)];
|
||||
else if (args.completeArg == 1)
|
||||
{
|
||||
let hl = highlight.get(args[0]);
|
||||
|
||||
@@ -671,7 +671,7 @@ function Tabs() //{{{
|
||||
context.anchored = false;
|
||||
context.compare = CompletionContext.Sort.unsorted;
|
||||
context.filters = [CompletionContext.Filter.textDescription];
|
||||
context.keys = { text: function ([i, item]) (i + 1) + ": " + item.state.entries[item.state.index - 1].url, description: "[1].title", icon: "[1].image" };
|
||||
context.keys = { text: function ([i, { state: s }]) (i + 1) + ": " + s.entries[s.index - 1].url, description: "[1].title", icon: "[1].image" };
|
||||
context.completions = Iterator(tabs.closedTabs);
|
||||
},
|
||||
count: true,
|
||||
|
||||
@@ -56,7 +56,7 @@ function CommandLine() //{{{
|
||||
}
|
||||
}
|
||||
}).init();
|
||||
}, false);
|
||||
}, { store: false });
|
||||
storage.addObserver("sanitize",
|
||||
function (key, event, value) {
|
||||
autocommands.trigger("Sanitize", {});
|
||||
@@ -2174,8 +2174,8 @@ function StatusLine() //{{{
|
||||
}
|
||||
else
|
||||
{
|
||||
url = url.replace(RegExp("^chrome://liberator/locale/(\\S+\\.html)#(.*)"), function (m, n1, n2) n1 + " " + decodeURIComponent(n2) + " [Help]");
|
||||
url = url.replace(RegExp("^chrome://liberator/locale/(\\S+\\.html)"), "$1 [Help]");
|
||||
url = url.replace(RegExp("^liberator://help/(\\S+)#(.*)"), function (m, n1, n2) n1 + " " + decodeURIComponent(n2) + " [Help]")
|
||||
.replace(RegExp("^liberator://help/(\\S+)"), "$1 [Help]");
|
||||
}
|
||||
|
||||
// when session information is available, add [+] when we can go
|
||||
@@ -2184,9 +2184,9 @@ function StatusLine() //{{{
|
||||
if (window.getWebNavigation)
|
||||
{
|
||||
let sh = window.getWebNavigation().sessionHistory;
|
||||
if (sh.index > 0)
|
||||
if (sh && sh.index > 0)
|
||||
modified += "+";
|
||||
if (sh.index < sh.count -1)
|
||||
if (sh && sh.index < sh.count -1)
|
||||
modified += "-";
|
||||
}
|
||||
if (liberator.has("bookmarks"))
|
||||
|
||||
@@ -276,60 +276,46 @@ const util = { //{{{
|
||||
/**
|
||||
* Generates an Asciidoc help entry.
|
||||
*
|
||||
* @param {Command|Mapping|Option} obj A liberator <b>Command</b>,
|
||||
* <b>Mapping</b> or <b>Option</b> object
|
||||
* @param {string} extraHelp Extra help text beyond the description.
|
||||
* @param {Command|Map|Option} obj A liberator <b>Command</b>,
|
||||
* <b>Map</b> or <b>Option</b> object
|
||||
* @param {XMLList} extraHelp Extra help text beyond the description.
|
||||
* @returns {string}
|
||||
*/
|
||||
generateHelp: function generateHelp(obj, extraHelp)
|
||||
{
|
||||
let start = "", end = "";
|
||||
let spec = util.identity;
|
||||
let tag = util.identity;
|
||||
if (obj instanceof Command)
|
||||
start = ":";
|
||||
tag = spec = function (cmd) <>:{cmd}</>;
|
||||
else if (obj instanceof Map && obj.count)
|
||||
spec = function (map) <><oa xmlns="">count</oa>{map}</>;
|
||||
else if (obj instanceof Option)
|
||||
start = end = "'";
|
||||
|
||||
let ret = "";
|
||||
let longHelp = false;
|
||||
if ((obj.help && obj.description) && (obj.help.length + obj.description.length) > 50)
|
||||
longHelp = true;
|
||||
|
||||
// the tags which are printed on the top right
|
||||
for (let j = obj.names.length - 1; j >= 0; j--)
|
||||
ret += "|" + start + obj.names[j] + end + "| ";
|
||||
|
||||
if (longHelp)
|
||||
ret += "+";
|
||||
|
||||
ret += "\n";
|
||||
|
||||
// the usage information
|
||||
let usage = obj.names[0];
|
||||
if (obj.specs) // for :commands
|
||||
usage = obj.specs[0];
|
||||
|
||||
usage = usage.replace(/{/, "\\\\{").replace(/}/, "\\\\}");
|
||||
usage = usage.replace(/'/, "\\'").replace(/`/, "\\`");
|
||||
ret += "||" + start + usage + end + "||";
|
||||
if (usage.length > 15)
|
||||
ret += " +";
|
||||
|
||||
ret += "\n________________________________________________________________________________\n";
|
||||
|
||||
// the actual help text
|
||||
if (obj.description)
|
||||
{
|
||||
ret += obj.description + "."; // the help description
|
||||
if (extraHelp)
|
||||
ret += " +\n" + extraHelp;
|
||||
spec = function (opt) <o xmlns="">{opt}</o>;
|
||||
tag = function (opt) <>'{opt}'</>;
|
||||
}
|
||||
else
|
||||
ret += "Sorry, no help available";
|
||||
|
||||
// add more space between entries
|
||||
ret += "\n________________________________________________________________________________\n\n\n";
|
||||
// E4X has its warts.
|
||||
let br = <>
|
||||
</>;
|
||||
|
||||
return ret;
|
||||
default xml namespace = "";
|
||||
XML.prettyPrinting = false;
|
||||
XML.ignoreWhitespace = false;
|
||||
|
||||
return <></> +
|
||||
<item>
|
||||
<tags>{template.map(obj.names, tag, " ")}</tags>
|
||||
<spec>{spec((obj.specs || obj.names)[0])}</spec>{
|
||||
!obj.type ? "" : <>
|
||||
<type>{obj.type}</type>
|
||||
<default>{obj.defaultValue}</default></>}
|
||||
<description>{
|
||||
obj.description ? br+<p>{obj.description.replace(/\.?$/, ".")}</p> : "" }{
|
||||
extraHelp ? br+extraHelp : "" }{
|
||||
!(extraHelp || obj.description) ? br+<p>Sorry, no help available.</p> : "" }
|
||||
</description>
|
||||
</item>.toXMLString();
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -306,14 +306,14 @@ var timers = {};
|
||||
|
||||
var storage = {
|
||||
alwaysReload: {},
|
||||
newObject: function newObject(key, constructor, store, type, options, reload)
|
||||
newObject: function newObject(key, constructor, params)
|
||||
{
|
||||
if (!(key in keys) || reload || this.alwaysReload[key])
|
||||
if (!(key in keys) || params.reload || this.alwaysReload[key])
|
||||
{
|
||||
if (key in this && !(reload || this.alwaysReload[key]))
|
||||
if (key in this && !(params.reload || this.alwaysReload[key]))
|
||||
throw Error();
|
||||
let load = function () loadPref(key, store, type || Object);
|
||||
keys[key] = new constructor(key, store, load, options || {});
|
||||
let load = function () loadPref(key, params.store, params.type || Object);
|
||||
keys[key] = new constructor(key, params.store, load, params);
|
||||
timers[key] = new Timer(1000, 10000, function () storage.save(key));
|
||||
this.__defineGetter__(key, function () keys[key]);
|
||||
}
|
||||
@@ -322,12 +322,12 @@ var storage = {
|
||||
|
||||
newMap: function newMap(key, store, options)
|
||||
{
|
||||
return this.newObject(key, ObjectStore, store, null, options);
|
||||
return this.newObject(key, ObjectStore, store, options);
|
||||
},
|
||||
|
||||
newArray: function newArray(key, store, options)
|
||||
{
|
||||
return this.newObject(key, ArrayStore, store, Array, options);
|
||||
return this.newObject(key, ArrayStore, store, { type: Array, __proto__: options });
|
||||
},
|
||||
|
||||
addObserver: function addObserver(key, callback, ref)
|
||||
|
||||
@@ -2,27 +2,18 @@ Priority list:
|
||||
1-9 as in Vim (9 = required for next release, 5 = would be nice, 1 = probably not)
|
||||
|
||||
ARCHITECTURE:
|
||||
- modular help system
|
||||
- I made a quick attempt at parameterizing it using attributes but it
|
||||
breaks Asciidoc formatting in certain unpredictable (to me at least)
|
||||
contexts. --djk
|
||||
- move as much as possible to common/*
|
||||
- decide on how to document Arrays in our jsdoc(ish) documentation. Is there
|
||||
even a documentation tool that can parse our source sensibly?
|
||||
- update build system to generate config specific components from templates in
|
||||
common/components/* and copy others -
|
||||
a739cdeab8f1648fd771f17d8a4885533032376f attempt at linking didn't work.
|
||||
- decide on how to document Arrays in our jsdoc(ish) documentation. Host docs
|
||||
on the website - is there even a documentation tool that can parse our source
|
||||
sensibly?
|
||||
|
||||
BUGS:
|
||||
- add window resize support to hints
|
||||
- searching backwards incrementally does not work i.e. with 'incsearch' set
|
||||
- Motion keys (j/k/h/l/^F/^B/...) don't scroll scrollable block elements.
|
||||
|
||||
- insert abbreviations broken on <space>
|
||||
- :sidebar improvements (:sidebar! Downloads while downloads is open should refocus the sidebar)
|
||||
- ;s saves the page rather than the image
|
||||
- RC file is sourced once per window
|
||||
- :undo seems to be effected by whether the tabstrip state
|
||||
- :undo seems to be effected by the tabstrip state
|
||||
|
||||
(recent CVS regressions):
|
||||
- visual caret mode is broken, requires a manual page focus first anyway or
|
||||
@@ -78,7 +69,7 @@ FEATURES:
|
||||
Total time: 0.25 sec
|
||||
--Kris
|
||||
|
||||
8 allow for multiple ex commands separated with | (see #107)
|
||||
8 allow for multiple ex commands separated with | (see #24)
|
||||
8 <C-o>/<C-i> should work as in vim (i.e., save page positions as well as
|
||||
locations in the history list).
|
||||
7 use ctrl-n/p in insert mode for word completion
|
||||
@@ -92,13 +83,12 @@ FEATURES:
|
||||
7 The output of the pageinfo-command should contain the security-information of ssl-encrypted sites
|
||||
7 Add :every command
|
||||
6 :mksession
|
||||
6 support private mode (and :set [no]private): http://ehsanakhgari.org/blog/2008-11-08/prepare-your-add-private-browsing
|
||||
6 add [count] support to :b* and :tab* commands where missing
|
||||
6 registers
|
||||
Here, unlike Vim, y and "*y would be equivalent. That is, the pasteboard would
|
||||
always be the default register. --Ted
|
||||
6 check/correct spellings in insert mode with some mappings
|
||||
6 add more autocommands (TabClose, TabOpen, TabChanged any more?)
|
||||
6 add more autocommands (TabClose, TabOpen, TabChanged etc)
|
||||
6 jump to the next heading with ]h, next image ]i, previous textbox [t and so on
|
||||
6 :grep support (needs location list)
|
||||
6 pipe selected text/link/website to an external command
|
||||
|
||||
Reference in New Issue
Block a user