From a31d040a3d8bbaa5771f99c6314ecac564455358 Mon Sep 17 00:00:00 2001 From: John Foerch Date: Tue, 22 Sep 2009 16:48:49 -0400 Subject: [PATCH] define_browser_object_class: changed arg `hint` to keyword `$hint` --- modules/commands.js | 3 +- modules/element.js | 85 +++++++++++++++++------------ modules/follow-relationship.js | 4 +- modules/media.js | 3 +- modules/page-modes/google-images.js | 6 +- modules/page-modes/google-search-results.js | 11 ++-- modules/page-modes/reddit.js | 5 +- modules/scroll.js | 6 +- 8 files changed, 64 insertions(+), 59 deletions(-) diff --git a/modules/commands.js b/modules/commands.js index a7c0f90..1ff5ba1 100644 --- a/modules/commands.js +++ b/modules/commands.js @@ -487,8 +487,7 @@ interactive("find-url-new-window", "Open a URL in a new window", interactive("find-alternate-url", "Edit the current URL in the minibuffer", "find-url", $browser_object = - define_browser_object_class( - "alternate-url", null, null, + define_browser_object_class("alternate-url", null, function (I, prompt) { check_buffer(I.buffer, content_buffer); var result = yield I.buffer.window.minibuffer.read_url( diff --git a/modules/element.js b/modules/element.js index e97d520..4f7479b 100644 --- a/modules/element.js +++ b/modules/element.js @@ -18,18 +18,27 @@ var browser_object_classes = {}; /** * handler is a coroutine called as: handler(buffer, prompt) + * + * $hint: short string (usually verb and noun) to describe the UI + * of the browser object class to the user. Only used by + * browser object classes which make use of the minibuffer. */ -function browser_object_class (name, hint, doc, handler) { +define_keywords("$hint"); +function browser_object_class (name, doc, handler) { + keywords(arguments); this.name = name; this.handler = handler; - if (doc) this.doc = doc; - if (hint) this.hint = hint; + this.doc = doc; + this.hint = arguments.$hint; } -function define_browser_object_class (name, hint, doc, handler) { +// keywords: $hint +function define_browser_object_class (name, doc, handler) { + keywords(arguments); var varname = 'browser_object_'+name.replace('-','_','g'); var ob = conkeror[varname] = - new browser_object_class(name, hint, doc, handler); + new browser_object_class(name, doc, handler, + forward_keywords(arguments)); interactive( "browser-object-"+name, "A prefix command to specify that the following command operate "+ @@ -49,10 +58,11 @@ function xpath_browser_object_handler (xpath_expression) { }; } -define_browser_object_class("images", "select image", null, - xpath_browser_object_handler("//img | //xhtml:img")); +define_browser_object_class("images", null, + xpath_browser_object_handler("//img | //xhtml:img"), + $hint = "select image"); -define_browser_object_class("frames", "select frame", null, +define_browser_object_class("frames", null, function (I, prompt) { var doc = I.buffer.document; // Check for any frames or visible iframes @@ -79,56 +89,60 @@ define_browser_object_class("frames", "select frame", null, $prompt = prompt, $hint_xpath_expression = "//iframe | //frame | //xhtml:iframe | //xhtml:frame"); yield co_return(result); - }); + }, + $hint = "select frame"); -define_browser_object_class("links", "select link", null, +define_browser_object_class("links", null, xpath_browser_object_handler ( "//*[@onclick or @onmouseover or @onmousedown or @onmouseup or @oncommand or " + "@role='link'] | " + "//input[not(@type='hidden')] | //a | //area | //iframe | //textarea | //button | //select | " + "//xhtml:*[@onclick or @onmouseover or @onmousedown or @onmouseup or @oncommand] | " + "//xhtml:input[not(@type='hidden')] | //xhtml:a | //xhtml:area | //xhtml:iframe | //xhtml:textarea | " + - "//xhtml:button | //xhtml:select")); + "//xhtml:button | //xhtml:select"), + $hint = "select link"); -define_browser_object_class("mathml", "select MathML element", null, - xpath_browser_object_handler("//m:math")); +define_browser_object_class("mathml", null, + xpath_browser_object_handler("//m:math"), + $hint = "select MathML element"); -define_browser_object_class( - "top", null, null, +define_browser_object_class("top", null, function (I, prompt) { yield co_return(I.buffer.top_frame); }); -define_browser_object_class("url", "enter URL", null, +define_browser_object_class("url", null, function (I, prompt) { var result = yield I.buffer.window.minibuffer.read_url($prompt = prompt); yield co_return(result); - }); + }, + $hint = "enter URL"); -define_browser_object_class( - "pasteurl", null, null, +define_browser_object_class("pasteurl", null, function (I, url) { let url = read_from_x_primary_selection(); yield co_return(url); }); -define_browser_object_class("file", "enter file name", null, +define_browser_object_class("file", null, function (I, prompt) { var result = yield I.buffer.window.minibuffer.read_file( $prompt = prompt, $history = I.command.name+"/file", $initial_value = I.local.cwd.path); yield co_return(result); - }); + }, + $hint = "enter file name"); -define_browser_object_class("alt", "select image for alt-text", null, +define_browser_object_class("alt", null, function (I, prompt) { var result = yield I.buffer.window.minibuffer.read_hinted_element( $buffer = I.buffer, $prompt = prompt, $hint_xpath_expression = "//img[@alt]"); yield co_return(result.alt); - }); + }, + $hint = "select image for alt-text"); -define_browser_object_class("title", "select element for title attribute", +define_browser_object_class("title", null, function (I, prompt) { var result = yield I.buffer.window.minibuffer.read_hinted_element( @@ -136,19 +150,20 @@ define_browser_object_class("title", "select element for title attribute", $prompt = prompt, $hint_xpath_expression = "//*[@title]"); yield co_return(result.title); - }); + }, + $hint = "select element for title attribute"); -define_browser_object_class("title-or-alt", - "select element for title or alt-text", null, +define_browser_object_class("title-or-alt", null, function (I, prompt) { var result = yield I.buffer.window.minibuffer.read_hinted_element( $buffer = I.buffer, $prompt = prompt, $hint_xpath_expression = "//img[@alt] | //*[@title]"); yield co_return(result.title ? result.title : result.alt); - }); + }, + $hint = "select element for title or alt-text"); -define_browser_object_class("scrape-url", "choose scraped URL", +define_browser_object_class("scrape-url", "Scrapes urls from the source code of the top-level document of buffer.", function (I, prompt) { var completions = I.buffer.document.documentElement.innerHTML @@ -163,21 +178,23 @@ define_browser_object_class("scrape-url", "choose scraped URL", $select, $match_required = false); yield co_return(result); - }); + }, + $hint = "choose scraped URL"); -define_browser_object_class("up-url", null, null, +define_browser_object_class("up-url", null, function (I, prompt) { var up = compute_url_up_path(I.buffer.current_URI.spec); return I.buffer.current_URI.resolve(up); }); -define_browser_object_class("focused-element", null, null, +define_browser_object_class("focused-element", null, function (I, prompt) { return I.buffer.focused_element; }); -define_browser_object_class("dom-node", "select DOM node", null, - xpath_browser_object_handler("//*")); +define_browser_object_class("dom-node", null, + xpath_browser_object_handler("//*"), + $hint = "select DOM node"); function read_browser_object (I) { var browser_object = I.browser_object; diff --git a/modules/follow-relationship.js b/modules/follow-relationship.js index f05dfe5..8d5c9ff 100644 --- a/modules/follow-relationship.js +++ b/modules/follow-relationship.js @@ -76,7 +76,7 @@ function document_get_element_by_relationship (doc, patterns, relationship) { return null; } -define_browser_object_class("relationship-next", null, null, +define_browser_object_class("relationship-next", null, function (I, prompt) { var doc = I.buffer.document; for (let frame in frame_iterator(I.buffer.top_frame, I.buffer.focused_frame)) { @@ -90,7 +90,7 @@ define_browser_object_class("relationship-next", null, null, throw interactive_error("No \"next\" link found."); }); -define_browser_object_class("relationship-previous", null, null, +define_browser_object_class("relationship-previous", null, function (I, prompt) { var doc = I.buffer.document; for (let frame in frame_iterator(I.buffer.top_frame, I.buffer.focused_frame)) { diff --git a/modules/media.js b/modules/media.js index 82883c7..b8221b9 100644 --- a/modules/media.js +++ b/modules/media.js @@ -67,8 +67,7 @@ function media_scrape (I, buffer) { } -define_browser_object_class( - "media", null, null, +define_browser_object_class("media", null, function (I, prompt) { let media = yield media_scrape(I, I.buffer); if (!media || media.length == 0) diff --git a/modules/page-modes/google-images.js b/modules/page-modes/google-images.js index bf50b92..9c08165 100644 --- a/modules/page-modes/google-images.js +++ b/modules/page-modes/google-images.js @@ -37,16 +37,14 @@ function google_images_get_image_uri (I, prompt) { yield (co_return(u)); } -define_browser_object_class( - "google-images-imgrefurl", null, null, +define_browser_object_class("google-images-imgrefurl", null, function (I, prompt) { var u = yield google_images_get_image_uri(I, prompt); var imgrefurl = unescape(/&imgrefurl=([^&]*)/(u.query)[1]); yield (co_return(imgrefurl)); }); -define_browser_object_class( - "google-images-imgurl", null, null, +define_browser_object_class("google-images-imgurl", null, function (I, prompt) { var u = yield google_images_get_image_uri(I, prompt); var imgurl = unescape(/imgurl=([^&]*)/(u.query)[1]); diff --git a/modules/page-modes/google-search-results.js b/modules/page-modes/google-search-results.js index 485c54c..f912d3e 100644 --- a/modules/page-modes/google-search-results.js +++ b/modules/page-modes/google-search-results.js @@ -21,17 +21,14 @@ define_key(google_search_results_keymap, "return", "ensure-content-focused", $fa * Note: escape already does the same thing as the Google key binding. */ -define_browser_object_class( - "google-search-results-links", - "select search result", - null, - xpath_browser_object_handler("//a[@class='l']")); +define_browser_object_class("google-search-results-links", null, + xpath_browser_object_handler("//a[@class='l']"), + $hint = "select search result"); // Bind keys 1 through 9 to follow corresponding results links // -define_browser_object_class( - "google-search-result-by-digit", null, null, +define_browser_object_class("google-search-result-by-digit", null, function (I, prompt) { var doc = I.buffer.document; var digit = I.event.charCode - 48; diff --git a/modules/page-modes/reddit.js b/modules/page-modes/reddit.js index 29797c7..ea96127 100644 --- a/modules/page-modes/reddit.js +++ b/modules/page-modes/reddit.js @@ -223,10 +223,7 @@ interactive("reddit-vote-down", reddit_vote_down); -define_browser_object_class( - "reddit-current", - "Reddit current link", - null, +define_browser_object_class("reddit-current", null, function (I, prompt) { var xpr = I.buffer.document.evaluate( '//*[contains(@class,"last-clicked")]/*[contains(@class,"entry")]/p[@class="title"]/a', diff --git a/modules/scroll.js b/modules/scroll.js index ce79854..7ace860 100644 --- a/modules/scroll.js +++ b/modules/scroll.js @@ -20,8 +20,7 @@ define_variable("scroll_to_heading_wrap", true, "Does the equivalent thing for \"previous heading\" as well."); -define_browser_object_class( - "next-heading", null, null, +define_browser_object_class("next-heading", null, function (I) { let xpr = I.buffer.document.evaluate( I.local.headings_xpath, I.buffer.document, null, @@ -49,8 +48,7 @@ define_browser_object_class( }); -define_browser_object_class( - "previous-heading", null, null, +define_browser_object_class("previous-heading", null, function (I) { let xpr = I.buffer.document.evaluate( I.local.headings_xpath, I.buffer.document, null, -- 2.11.4.GIT