1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-14 19:45:46 +01:00

Fix all the things. And break most of the other things, in all likelihood.

This commit is contained in:
Kris Maglione
2015-02-21 21:59:37 -08:00
parent 54f38d90d9
commit 7ee579200f
48 changed files with 1865 additions and 1572 deletions

View File

@@ -1,6 +1,6 @@
// Copyright (c) 2006-2008 by Martin Stubenschrott <stubenschrott@vimperator.org>
// Copyright (c) 2007-2011 by Doug Kearns <dougkearns@gmail.com>
// Copyright (c) 2008-2014 Kris Maglione <maglione.k at Gmail>
// Copyright (c) 2008-2015 Kris Maglione <maglione.k at Gmail>
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
@@ -77,8 +77,9 @@ var Buffer = Module("Buffer", {
/**
* Content preference methods.
*/
prefs: Class.Memoize(function ()
let (self = this) ({
prefs: Class.Memoize(function () {
let self = this;
return {
/**
* Returns a promise for the given preference name.
*
@@ -132,7 +133,8 @@ var Buffer = Module("Buffer", {
handleResult: resolve,
handleError: reject });
})
})),
};
}),
/**
* Gets a content preference for the given buffer.
@@ -495,15 +497,15 @@ var Buffer = Module("Buffer", {
let relRev = ["next", "prev"];
let rev = relRev[1 - relRev.indexOf(rel)];
function followFrame(frame) {
function iter(elems) {
function* followFrame(frame) {
function* iter(elems) {
for (let i = 0; i < elems.length; i++)
if (elems[i].rel.toLowerCase() === rel || elems[i].rev.toLowerCase() === rev)
yield elems[i];
}
let elems = frame.document.getElementsByTagName("link");
for (let elem in iter(elems))
for (let elem of iter(elems))
yield elem;
function a(regexp, elem) regexp.test(elem.textContent) === regexp.result ||
@@ -516,14 +518,14 @@ var Buffer = Module("Buffer", {
Hints.isVisible);
for (let test of [a, b])
for (let regexp in values(regexps))
for (let i in util.range(res.length, 0, -1))
for (let regexp of values(regexps))
for (let i of util.range(res.length, 0, -1))
if (test(regexp, res[i]))
yield res[i];
}
for (let frame in values(this.allFrames(null, true)))
for (let elem in followFrame(frame))
for (let frame of values(this.allFrames(null, true)))
for (let elem of followFrame(frame))
if (count-- === 0) {
if (follow)
this.followLink(elem, dactyl.CURRENT_TAB);
@@ -936,7 +938,7 @@ var Buffer = Module("Buffer", {
if (!elem) {
let area = -1;
for (let e in DOM(Buffer.SCROLLABLE_SEARCH_SELECTOR,
for (let e of DOM(Buffer.SCROLLABLE_SEARCH_SELECTOR,
this.focusedFrame.document)) {
if (Buffer.isScrollable(e, dir, horizontal)) {
let r = DOM(e).rect;
@@ -980,7 +982,7 @@ var Buffer = Module("Buffer", {
if (win.scrollMaxX > 0 || win.scrollMaxY > 0)
return win;
for (let frame in array.iterValues(win.frames))
for (let frame of array.iterValues(win.frames))
if (frame.scrollMaxX > 0 || frame.scrollMaxY > 0)
return frame;
@@ -1011,7 +1013,7 @@ var Buffer = Module("Buffer", {
: rect => rect.top;
let elems = [[e, distance(e.getBoundingClientRect())]
for (e in path.matcher(this.focusedFrame.document))]
for (e of path.matcher(this.focusedFrame.document))]
.filter(e => e[1] > FUDGE)
.sort((a, b) => a[1] - b[1]);
@@ -1048,9 +1050,12 @@ var Buffer = Module("Buffer", {
// remove all hidden frames
frames = frames.filter(frame => !(frame.document.body instanceof Ci.nsIDOMHTMLFrameSetElement))
.filter(frame => !frame.frameElement ||
let (rect = frame.frameElement.getBoundingClientRect())
rect.width && rect.height);
.filter(frame => {
if (!frame.frameElement)
return false;
let rect = frame.frameElement.getBoundingClientRect();
return rect.width && rect.height;
});
// find the currently focused frame index
let current = Math.max(0, frames.indexOf(this.focusedFrame));
@@ -1115,7 +1120,7 @@ var Buffer = Module("Buffer", {
if (bookmarkcache.isBookmarked(this.URL))
info += ", " + _("buffer.bookmarked");
let pageInfoText = [file.quote(), " [", info, "] ", title].join("");
let pageInfoText = [JSON.stringify(file), " [", info, "] ", title].join("");
dactyl.echo(pageInfoText, commandline.FORCE_SINGLELINE);
return;
}
@@ -1357,7 +1362,7 @@ var Buffer = Module("Buffer", {
/**
* Updates the zoom level of this buffer from a content preference.
*/
updateZoom: promises.task(function updateZoom() {
updateZoom: promises.task(function* updateZoom() {
let uri = this.uri;
if (prefs.get("browser.zoom.siteSpecific")) {
@@ -1482,10 +1487,10 @@ var Buffer = Module("Buffer", {
get ZOOM_MIN() prefs.get("zoom.minPercent"),
get ZOOM_MAX() prefs.get("zoom.maxPercent"),
setZoom: deprecated("buffer.setZoom", function setZoom()
let ({ buffer } = overlay.activeModules) buffer.setZoom.apply(buffer, arguments)),
bumpZoomLevel: deprecated("buffer.bumpZoomLevel", function bumpZoomLevel()
let ({ buffer } = overlay.activeModules) buffer.bumpZoomLevel.apply(buffer, arguments)),
setZoom: deprecated("buffer.setZoom",
function setZoom(...args) apply(overlay.activeModules.buffer, "setZoom", args)),
bumpZoomLevel: deprecated("buffer.bumpZoomLevel",
function bumpZoomLevel(...args) apply(overlay.activeModules.buffer, "bumpZoomLevel", args)),
/**
* Returns the currently selected word in *win*. If the selection is
@@ -1554,10 +1559,10 @@ var Buffer = Module("Buffer", {
.replace(re, ext), title]);
},
findScrollableWindow: deprecated("buffer.findScrollableWindow", function findScrollableWindow()
let ({ buffer } = overlay.activeModules) buffer.findScrollableWindow.apply(buffer, arguments)),
findScrollable: deprecated("buffer.findScrollable", function findScrollable()
let ({ buffer } = overlay.activeModules) buffer.findScrollable.apply(buffer, arguments)),
findScrollableWindow: deprecated("buffer.findScrollableWindow",
function findScrollableWindow() apply(overlay.activeModules, "findScrollableWindow", arguments)),
findScrollable: deprecated("buffer.findScrollable",
function findScrollable() apply(overlay.activeModules, "findScrollable", arguments)),
isScrollable: function isScrollable(elem, dir, horizontal) {
if (!DOM(elem).isScrollable(horizontal ? "horizontal" : "vertical"))
@@ -1632,40 +1637,43 @@ var Buffer = Module("Buffer", {
* Like scrollTo, but scrolls more smoothly and does not update
* marks.
*/
smoothScrollTo: let (timers = WeakMap())
function smoothScrollTo(node, x, y) {
let { options } = overlay.activeModules;
smoothScrollTo: new function () {
let timers = new WeakMap;
let time = options["scrolltime"];
let steps = options["scrollsteps"];
return function smoothScrollTo(node, x, y) {
let { options } = overlay.activeModules;
let elem = Buffer.Scrollable(node);
let time = options["scrolltime"];
let steps = options["scrollsteps"];
if (timers.has(node))
timers.get(node).cancel();
let elem = Buffer.Scrollable(node);
if (x == null)
x = elem.scrollLeft;
if (y == null)
y = elem.scrollTop;
if (timers.has(node))
timers.get(node).cancel();
x = node.dactylScrollDestX = Math.min(x, elem.scrollWidth - elem.clientWidth);
y = node.dactylScrollDestY = Math.min(y, elem.scrollHeight - elem.clientHeight);
let [startX, startY] = [elem.scrollLeft, elem.scrollTop];
let n = 0;
(function next() {
if (n++ === steps) {
elem.scrollLeft = x;
elem.scrollTop = y;
delete node.dactylScrollDestX;
delete node.dactylScrollDestY;
}
else {
elem.scrollLeft = startX + (x - startX) / steps * n;
elem.scrollTop = startY + (y - startY) / steps * n;
timers.set(node, util.timeout(next, time / steps));
}
}).call(this);
if (x == null)
x = elem.scrollLeft;
if (y == null)
y = elem.scrollTop;
x = node.dactylScrollDestX = Math.min(x, elem.scrollWidth - elem.clientWidth);
y = node.dactylScrollDestY = Math.min(y, elem.scrollHeight - elem.clientHeight);
let [startX, startY] = [elem.scrollLeft, elem.scrollTop];
let n = 0;
(function next() {
if (n++ === steps) {
elem.scrollLeft = x;
elem.scrollTop = y;
delete node.dactylScrollDestX;
delete node.dactylScrollDestY;
}
else {
elem.scrollLeft = startX + (x - startX) / steps * n;
elem.scrollTop = startY + (y - startY) / steps * n;
timers.set(node, util.timeout(next, time / steps));
}
}).call(this);
};
},
/**
@@ -1946,7 +1954,7 @@ var Buffer = Module("Buffer", {
if (/^>>/.test(filename)) {
let file = io.File(filename.replace(/^>>\s*/, ""));
dactyl.assert(args.bang || file.exists() && file.isWritable(),
_("io.notWriteable", file.path.quote()));
_("io.notWriteable", JSON.stringify(file.path)));
return buffer.viewSourceExternally(buffer.focusedFrame.document,
function (tmpFile) {
@@ -1954,7 +1962,7 @@ var Buffer = Module("Buffer", {
file.write(tmpFile, ">>");
}
catch (e) {
dactyl.echoerr(_("io.notWriteable", file.path.quote()));
dactyl.echoerr(_("io.notWriteable", JSON.stringify(file.path)));
}
});
}
@@ -2046,13 +2054,13 @@ var Buffer = Module("Buffer", {
context.title = ["Stylesheet", "Location"];
// unify split style sheets
let styles = iter([s.title, []] for (s in values(buffer.alternateStyleSheets))).toObject();
let styles = iter([s.title, []] for (s of values(buffer.alternateStyleSheets))).toObject();
buffer.alternateStyleSheets.forEach(function (style) {
styles[style.title].push(style.href || _("style.inline"));
});
context.completions = [[title, href.join(", ")] for ([title, href] in Iterator(styles))];
context.completions = [[title, href.join(", ")] for ([title, href] of iter(styles))];
};
completion.savePage = function savePage(context, node) {
@@ -2131,7 +2139,7 @@ var Buffer = Module("Buffer", {
"Repeat the last key event",
function ({ count }) {
if (mappings.repeat) {
for (let i in util.interruptibleRange(0, Math.max(count, 1), 100))
for (let i of util.interruptibleRange(0, Math.max(count, 1), 100))
mappings.repeat();
}
},
@@ -2304,7 +2312,7 @@ var Buffer = Module("Buffer", {
let frames = buffer.allFrames(null, true);
let elements = array.flatten(frames.map(win => [m for (m in DOM.XPath(xpath, win.document))]))
let elements = array.flatten(frames.map(win => [m for (m of DOM.XPath(xpath, win.document))]))
.filter(function (elem) {
if (isinstance(elem, [Ci.nsIDOMHTMLFrameElement,
Ci.nsIDOMHTMLIFrameElement]))
@@ -2450,7 +2458,7 @@ var Buffer = Module("Buffer", {
return val;
// Stolen from browser.jar/content/browser/browser.js, more or less.
Task.spawn(function () {
Task.spawn(function* () {
try {
buffer.docShell.QueryInterface(Ci.nsIDocCharset).charset = val;
yield window.PlacesUtils.setCharsetForURI(buffer.uri, val);
@@ -2483,7 +2491,7 @@ var Buffer = Module("Buffer", {
{
keepQuotes: true,
setter: function (vals) {
for (let [k, v] in Iterator(vals))
for (let [k, v] of iter(vals))
vals[k] = update(new String(v), { matcher: DOM.compileMatcher(Option.splitList(v)) });
return vals;
},
@@ -2507,7 +2515,7 @@ var Buffer = Module("Buffer", {
{
getLine: function getLine(doc, line) {
let uri = util.newURI(doc.documentURI);
for (let filter in values(this.value))
for (let filter of values(this.value))
if (filter(uri, doc)) {
if (/^func:/.test(filter.result))
var res = dactyl.userEval("(" + Option.dequote(filter.result.substr(5)) + ")")(doc, line);
@@ -2526,7 +2534,7 @@ var Buffer = Module("Buffer", {
keepQuotes: true,
setter: function (vals) {
for (let value in values(vals))
for (let value of values(vals))
if (!/^func:/.test(value.result))
value.matcher = DOM.compileMatcher(Option.splitList(value.result));
return vals;
@@ -2610,16 +2618,16 @@ var Buffer = Module("Buffer", {
}
});
Buffer.addPageInfoSection("e", "Search Engines", function (verbose) {
Buffer.addPageInfoSection("e", "Search Engines", function* (verbose) {
let n = 1;
let nEngines = 0;
for (let { document: doc } in values(this.allFrames())) {
for (let { document: doc } of values(this.allFrames())) {
let engines = DOM("link[href][rel=search][type='application/opensearchdescription+xml']", doc);
nEngines += engines.length;
if (verbose)
for (let link in engines)
for (let link of engines)
yield [link.title || /*L*/ "Engine " + n++,
["a", { href: link.href, highlight: "URL",
onclick: "if (event.button == 0) { window.external.AddSearchProvider(this.href); return false; }" },
@@ -2630,7 +2638,7 @@ Buffer.addPageInfoSection("e", "Search Engines", function (verbose) {
yield nEngines + /*L*/" engine" + (nEngines > 1 ? "s" : "");
});
Buffer.addPageInfoSection("f", "Feeds", function (verbose) {
Buffer.addPageInfoSection("f", "Feeds", function* (verbose) {
const feedTypes = {
"application/rss+xml": "RSS",
"application/atom+xml": "Atom",
@@ -2669,10 +2677,10 @@ Buffer.addPageInfoSection("f", "Feeds", function (verbose) {
}
let nFeed = 0;
for (let [i, win] in Iterator(this.allFrames())) {
for (let win of this.allFrames()) {
let doc = win.document;
for (let link in DOM("link[href][rel=feed], link[href][rel=alternate][type]", doc)) {
for (let link of DOM("link[href][rel=feed], link[href][rel=alternate][type]", doc)) {
let rel = link.rel.toLowerCase();
let feed = { title: link.title, href: link.href, type: link.type || "" };
if (isValidFeed(feed, doc.nodePrincipal, rel == "feed")) {
@@ -2690,7 +2698,7 @@ Buffer.addPageInfoSection("f", "Feeds", function (verbose) {
yield nFeed + /*L*/" feed" + (nFeed > 1 ? "s" : "");
});
Buffer.addPageInfoSection("g", "General Info", function (verbose) {
Buffer.addPageInfoSection("g", "General Info", function* (verbose) {
let doc = this.focusedFrame.document;
// get file size
@@ -2758,7 +2766,7 @@ Buffer.addPageInfoSection("m", "Meta Tags", function (verbose) {
.sort((a, b) => util.compareIgnoreCase(a[0], b[0]));
});
Buffer.addPageInfoSection("s", "Security", function (verbose) {
Buffer.addPageInfoSection("s", "Security", function* (verbose) {
let { statusline } = this.modules;
let identity = this.topWindow.gIdentityHandler;