Added a new browser object class 'fragment-link', which generates
a link with a fragment identifier pointing to an element in the
current document. This can be any element with an ID attribute, or an
A element with a NAME attribute.
Also modified load_spec_from_element to generate a load spec with a
fragment identifier when passed an element that meets this description
(and doesn't also have an HREF attribute).
---
modules/element.js | 11 +++++++++++
modules/load-spec.js | 31 ++++++++++++++++++++++++++-----
2 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/modules/element.js b/modules/element.js
index 576cfff..c1a2f14 100644
--- a/modules/element.js
+++ b/modules/element.js
@@ -245,6 +245,17 @@ define_browser_object_class("up-url",
return I.buffer.current_uri.resolve(up);
});
+define_browser_object_class("fragment-link",
+ "Browser object class which returns a link to the specified fragment of a
page",
+ function (I, prompt) {
+ var elem = yield I.buffer.window.minibuffer.read_hinted_element(
+ $buffer = I.buffer,
+ $prompt = prompt,
+ $hint_xpath_expression = "//*...@id] | //a...@name] |
//xhtml:*...@id] | //xhtml:a...@name]");
+ yield co_return(page_fragment_load_spec(elem));
+ },
+ $hint = "select element to link to");
+
define_browser_object_class("focused-element",
"Browser object which returns the focused element.",
function (I, prompt) { return I.buffer.focused_element; });
diff --git a/modules/load-spec.js b/modules/load-spec.js
index 5a5631d..e5c89cf 100644
--- a/modules/load-spec.js
+++ b/modules/load-spec.js
@@ -54,6 +54,22 @@
require("webjump.js");
+function page_fragment_load_spec (elem) {
+ var uri = makeURLAbsolute(elem.baseURI, "#" + (elem.id || elem.name));
+
+ var title = elem.ownerDocument.title;
+ if(elem.textContent) {
+ if(title) title += ' - ';
+ title += elem.textContent;
+ }
+
+ return {
+ 'uri': uri,
+ 'element': elem,
+ 'title' : title
+ };
+}
+
function load_spec_from_element (elem) {
var spec = {};
if (elem instanceof Ci.nsIDOMWindow)
@@ -67,17 +83,22 @@ function load_spec_from_element (elem) {
var url = null;
var title = null;
- if (elem instanceof Ci.nsIDOMHTMLAnchorElement ||
- elem instanceof Ci.nsIDOMHTMLAreaElement ||
- elem instanceof Ci.nsIDOMHTMLLinkElement) {
- if (elem.hasAttribute("href"))
- url = elem.href;
+ if ((elem instanceof Ci.nsIDOMHTMLAnchorElement ||
+ elem instanceof Ci.nsIDOMHTMLAreaElement ||
+ elem instanceof Ci.nsIDOMHTMLLinkElement) &&
+ elem.hasAttribute("href")) {
+ url = elem.href;
title = elem.title || elem.textContent;
}
else if (elem instanceof Ci.nsIDOMHTMLImageElement) {
url = elem.src;
title = elem.title || elem.alt;
}
+ else if (elem.hasAttribute("id") ||
+ (elem instanceof Ci.nsIDOMHTMLAnchorElement &&
+ elem.hasAttribute("name"))) {
+ return page_fragment_load_spec(elem);
+ }
else {
var node = elem;
while (node && !(node instanceof Ci.nsIDOMHTMLAnchorElement))
--
1.6.6
_______________________________________________
Conkeror mailing list
[email protected]
https://www.mozdev.org/mailman/listinfo/conkeror