*/
get alternateStyleSheets() {
let stylesheets = array.flatten(
- this.allFrames().map(function (w) Array.slice(w.document.styleSheets)));
+ this.allFrames().map(w => Array.slice(w.document.styleSheets)));
return stylesheets.filter(
- function (stylesheet) /^(screen|all|)$/i.test(stylesheet.media.mediaText) && !/^\s*$/.test(stylesheet.title)
+ s => /^(screen|all|)$/i.test(s.media.mediaText) && !/^\s*$/.test(s.title)
);
},
*/
get loaded() Math.min.apply(null,
this.allFrames()
- .map(function (frame) ["loading", "interactive", "complete"]
- .indexOf(frame.document.readyState))),
+ .map(frame => ["loading", "interactive", "complete"]
+ .indexOf(frame.document.readyState))),
/**
* @property {Object} The local state store for the currently selected
})(win || this.win);
if (focusedFirst)
- return frames.filter(function (f) f === this.focusedFrame, this).concat(
- frames.filter(function (f) f !== this.focusedFrame, this));
+ return frames.filter(f => f === this.focusedFrame).concat(
+ frames.filter(f => f !== this.focusedFrame));
return frames;
},
yield elem;
function a(regexp, elem) regexp.test(elem.textContent) === regexp.result ||
- Array.some(elem.childNodes, function (child) regexp.test(child.alt) === regexp.result);
+ Array.some(elem.childNodes,
+ child => (regexp.test(child.alt) === regexp.result));
+
function b(regexp, elem) regexp.test(elem.title) === regexp.result;
let res = Array.filter(frame.document.querySelectorAll(selector), Hints.isVisible);
function getRanges(rect) {
let nodes = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils)
.nodesFromRect(rect.x, rect.y, 0, rect.width, rect.height, 0, false, false);
- return Array.filter(nodes, function (n) n instanceof Ci.nsIDOMText)
+ return Array.filter(nodes, n => n instanceof Ci.nsIDOMText)
.map(RangeFind.nodeContents);
}
rect = { x: w / 3, y: 0, width: w / 3, height: win.innerHeight };
}
- var reduce = function (a, b) DOM(a).rect.top < DOM(b).rect.top ? a : b;
+ var reduce = (a, b) => DOM(a).rect.top < DOM(b).rect.top ? a : b;
var dir = "forward";
var y = 0;
if (reverse) {
- reduce = function (a, b) DOM(b).rect.bottom > DOM(a).rect.bottom ? b : a;
+ reduce = (a, b) => DOM(b).rect.bottom > DOM(a).rect.bottom ? b : a;
dir = "backward";
y = win.innerHeight - 1;
}
get shortURL() {
let { uri, doc } = this;
+ function hashify(url) {
+ let newURI = util.newURI(url);
+
+ if (uri.hasRef && !newURI.hasRef)
+ newURI.ref = uri.ref;
+
+ return newURI.spec;
+ }
+
for each (let shortener in Buffer.uriShorteners)
try {
let shortened = shortener(uri, doc);
if (shortened)
- return shortened.spec;
+ return hashify(shortened.spec);
}
catch (e) {
util.reportError(e);
let link = DOM("link[href][rev=canonical], \
link[href][rel=shortlink]", doc);
- if (link)
- return link.attr("href");
+ if (link.length)
+ return hashify(link.attr("href"));
return null;
},
* @param {number} count The multiple of 'scroll' lines to scroll.
* @optional
*/
- scrollByScrollSize: function scrollByScrollSize(direction, count) {
+ scrollByScrollSize: function scrollByScrollSize(direction, count = 1) {
let { options } = this.modules;
direction = direction ? 1 : -1;
- count = count || 1;
if (options["scroll"] > 0)
this.scrollVertical("lines", options["scroll"] * direction);
let path = options["jumptags"][arg];
util.assert(path, _("error.invalidArgument", arg));
- let distance = reverse ? function (rect) -rect.top : function (rect) rect.top;
- let elems = [[e, distance(e.getBoundingClientRect())] for (e in path.matcher(this.focusedFrame.document))]
- .filter(function (e) e[1] > FUDGE)
- .sort(function (a, b) a[1] - b[1]);
+ let distance = reverse ? rect => -rect.top
+ : rect => rect.top;
+
+ let elems = [[e, distance(e.getBoundingClientRect())]
+ for (e in path.matcher(this.focusedFrame.document))]
+ .filter(e => e[1] > FUDGE)
+ .sort((a, b) => a[1] - b[1]);
if (offScreen && !reverse)
elems = elems.filter(function (e) e[1] > this, this.topWindow.innerHeight);
return;
// remove all hidden frames
- frames = frames.filter(function (frame) !(frame.document.body instanceof Ci.nsIDOMHTMLFrameSetElement))
- .filter(function (frame) !frame.frameElement ||
+ frames = frames.filter(frame => !(frame.document.body instanceof Ci.nsIDOMHTMLFrameSetElement))
+ .filter(frame => !frame.frameElement ||
let (rect = frame.frameElement.getBoundingClientRect())
rect.width && rect.height);
let info = template.map(
(sections || options["pageinfo"])
.map((opt) => Buffer.pageInfo[opt].action.call(this)),
- function (res) res && iter(res).join(", ") || undefined,
+ res => (res && iter(res).join(", ") || undefined),
", ").join("");
if (bookmarkcache.isBookmarked(this.URL))
names.push([decodeURIComponent(url.replace(/.*?([^\/]*)\/*$/, "$1")),
_("buffer.save.filename")]);
- return names.filter(function ([leaf, title]) leaf)
- .map(function ([leaf, title]) [leaf.replace(config.OS.illegalCharacters, encodeURIComponent)
- .replace(re, ext), title]);
+ return names.filter(([leaf, title]) => leaf)
+ .map(([leaf, title]) => [leaf.replace(config.OS.illegalCharacters, encodeURIComponent)
+ .replace(re, ext), title]);
},
findScrollableWindow: deprecated("buffer.findScrollableWindow", function findScrollableWindow()
* Like scrollTo, but scrolls more smoothly and does not update
* marks.
*/
- smoothScrollTo: function smoothScrollTo(node, x, y) {
+ smoothScrollTo: let (timers = WeakMap())
+ function smoothScrollTo(node, x, y) {
let { options } = overlay.activeModules;
let time = options["scrolltime"];
let elem = Buffer.Scrollable(node);
- if (node.dactylScrollTimer)
- node.dactylScrollTimer.cancel();
+ if (timers.has(node))
+ timers.get(node).cancel();
if (x == null)
x = elem.scrollLeft;
else {
elem.scrollLeft = startX + (x - startX) / steps * n;
elem.scrollTop = startY + (y - startY) / steps * n;
- node.dactylScrollTimer = util.timeout(next, time / steps);
+ timers.set(node, util.timeout(next, time / steps));
}
}).call(this);
},
if (arg) {
prefs.set("print.print_printer", PRINTER);
+ let { path } = io.File(arg.substr(1));
set("print_to_file", true);
- set("print_to_filename", io.File(arg.substr(1)).path);
+ set("print_to_filename", path);
+ prefs.set("print_to_filename", path);
dactyl.echomsg(_("print.toFile", arg.substr(1)));
}
function (args) {
let arg = args[0] || "";
- let titles = buffer.alternateStyleSheets.map(function (stylesheet) stylesheet.title);
+ let titles = buffer.alternateStyleSheets.map(sheet => sheet.title);
dactyl.assert(!arg || titles.indexOf(arg) >= 0,
_("error.invalidArgument", arg));
let frames = buffer.allFrames(null, true);
- let elements = array.flatten(frames.map(function (win) [m for (m in DOM.XPath(xpath, win.document))]))
+ let elements = array.flatten(frames.map(win => [m for (m in DOM.XPath(xpath, win.document))]))
.filter(function (elem) {
if (isinstance(elem, [Ci.nsIDOMHTMLFrameElement,
Ci.nsIDOMHTMLIFrameElement]))
return vals;
},
validator: function (value) DOM.validateMatcher.call(this, value)
- && Object.keys(value).every(function (v) v.length == 1)
+ && Object.keys(value).every(v => v.length == 1)
});
options.add(["linenumbers", "ln"],
var res = dactyl.userEval("(" + Option.dequote(filter.result.substr(5)) + ")")(doc, line);
else
res = iter.nth(filter.matcher(doc),
- function (elem) (elem.nodeValue || elem.textContent).trim() == line && DOM(elem).display != "none",
+ elem => ((elem.nodeValue || elem.textContent).trim() == line &&
+ DOM(elem).display != "none"),
0)
|| iter.nth(filter.matcher(doc), util.identity, line - 1);
if (res)
// get meta tag data, sort and put into pageMeta[]
let metaNodes = this.focusedFrame.document.getElementsByTagName("meta");
- return Array.map(metaNodes, function (node) [(node.name || node.httpEquiv),
- template.highlightURL(node.content)])
- .sort(function (a, b) util.compareIgnoreCase(a[0], b[0]));
+ return Array.map(metaNodes, node => [(node.name || node.httpEquiv),
+ template.highlightURL(node.content)])
+ .sort((a, b) => util.compareIgnoreCase(a[0], b[0]));
});
Buffer.addPageInfoSection("s", "Security", function (verbose) {
yield ["Verified by", data.caOrg];
- if (identity._overrideService.hasMatchingOverride(identity._lastLocation.hostname,
- (identity._lastLocation.port || 443),
- data.cert, {}, {}))
+ let { host, port } = identity._lastUri;
+ if (port == -1)
+ port = 443;
+
+ if (identity._overrideService.hasMatchingOverride(host, port, data.cert, {}, {}))
yield ["User exception", /*L*/"true"];
break;
}
});
+// internal navigation doesn't currently update link[rel='shortlink']
+Buffer.addURIShortener("youtube.com", (uri, doc) => {
+ let video = array.toObject(uri.query.split("&")
+ .map(p => p.split("="))).v;
+ return video ? util.newURI("http://youtu.be/" + video) : null;
+});
+
// catch(e){ if (!e.stack) e = Error(e); dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack); }
endModule();