From 7316dda63335f06b8d6f257e25edf94ea240b059 Mon Sep 17 00:00:00 2001 From: John Foerch Date: Fri, 27 Jan 2012 23:29:05 -0500 Subject: [PATCH] define_keymaps_page_mode: new kind of page-mode A keymaps-page-mode is a page-mode whose only feature is providing keymaps for its site through a single modality. With define_page_mode, there is a certain amount of boilerplate code common to all such page-modes. This new type of page-mode now lets us abstract that boilerplate away, allowing us to define such modes more succinctly. --- modules/buffer.js | 14 +++++++++----- modules/content-buffer.js | 33 +++++++++++++++++++++++++++++++-- modules/page-modes/duckduckgo.js | 19 ++++--------------- modules/page-modes/github.js | 16 ++-------------- modules/page-modes/gmane.js | 16 ++-------------- modules/page-modes/google-calendar.js | 15 ++------------- modules/page-modes/google-gqueues.js | 15 ++------------- modules/page-modes/google-maps.js | 15 ++------------- modules/page-modes/google-reader.js | 16 ++-------------- modules/page-modes/google-video.js | 2 +- modules/page-modes/google-voice.js | 17 ++--------------- modules/page-modes/stackexchange.js | 17 ++--------------- modules/page-modes/twitter.js | 15 ++------------- 13 files changed, 63 insertions(+), 147 deletions(-) diff --git a/modules/buffer.js b/modules/buffer.js index 43f4f8a..849ed3e 100644 --- a/modules/buffer.js +++ b/modules/buffer.js @@ -862,8 +862,10 @@ function buffer_mode (name, enable, disable) { keywords(arguments); this.name = name.replace("-","_","g"); this.hyphen_name = name.replace("_","-","g"); - this._enable = enable; - this._disable = disable; + if (enable) + this._enable = enable; + if (disable) + this._disable = disable; this.display_name = arguments.$display_name; this.doc = arguments.$doc; this.enable_hook = name + "_enable_hook"; @@ -880,7 +882,8 @@ buffer_mode.prototype = { _disable: null, enable: function (buffer) { try { - this._enable(buffer); + if (this._enable) + this._enable(buffer); } finally { buffer.enabled_modes.push(this.name); if (conkeror[this.enable_hook]) @@ -890,7 +893,8 @@ buffer_mode.prototype = { }, disable: function (buffer) { try { - this._disable(buffer); + if (this._disable) + this._disable(buffer); } finally { var i = buffer.enabled_modes.indexOf(this.name); if (i > -1) @@ -903,7 +907,7 @@ buffer_mode.prototype = { }; define_keywords("$constructor"); function define_buffer_mode (name, enable, disable) { - keywords(arguments, $constructor = buffer_mode); + keywords(arguments, $constructor = buffer_mode, $doc = null); var constructor = arguments.$constructor; var m = new constructor(name, enable, disable, forward_keywords(arguments)); name = m.name; // normalized diff --git a/modules/content-buffer.js b/modules/content-buffer.js index d029cc1..0399746 100644 --- a/modules/content-buffer.js +++ b/modules/content-buffer.js @@ -676,15 +676,44 @@ page_mode.prototype = { }; function define_page_mode (name, test, enable, disable) { - keywords(arguments); + keywords(arguments, $constructor = page_mode); define_buffer_mode(name, enable, disable, - $constructor = page_mode, $test = test, forward_keywords(arguments)); } ignore_function_for_get_caller_source_code_reference("define_page_mode"); +define_keywords("$modality"); +function keymaps_page_mode (name, enable, disable) { + keywords(arguments); + page_mode.call(this, name, enable, disable, + forward_keywords(arguments)); + this.modality = arguments.$modality; +} +keymaps_page_mode.prototype = { + constructor: keymaps_page_mode, + __proto__: page_mode.prototype, + modality: null, + _enable: function (buffer) { + buffer.content_modalities.push(this.modality); + }, + _disable: function (buffer) { + var i = buffer.content_modalities.indexOf(this.modality); + if (i > -1) + buffer.content_modalities.splice(i, 1); + } +}; +function define_keymaps_page_mode (name, test, modality) { + keywords(arguments, $constructor = keymaps_page_mode); + define_buffer_mode(name, null, null, + $test = test, + $modality = modality, + forward_keywords(arguments)); +} +ignore_function_for_get_caller_source_code_reference("define_keymaps_page_mode"); + + function page_mode_activate (page_mode) { page_modes[page_mode.name] = page_mode; } diff --git a/modules/page-modes/duckduckgo.js b/modules/page-modes/duckduckgo.js index 6017cda..f9ef7fd 100644 --- a/modules/page-modes/duckduckgo.js +++ b/modules/page-modes/duckduckgo.js @@ -75,22 +75,11 @@ define_key(duckduckgo_keymap, "d", "duckduckgo-domain-search"); define_key(duckduckgo_anchor_keymap, "return", "duckduckgo-follow-current"); define_key(duckduckgo_select_keymap, "return", "duckduckgo-follow-current"); -var duckduckgo_modality = { - normal: duckduckgo_keymap, - anchor: duckduckgo_anchor_keymap, - select: duckduckgo_select_keymap -}; - -define_page_mode("duckduckgo-mode", +define_keymaps_page_mode("duckduckgo-mode", build_url_regexp($domain = "duckduckgo"), - function enable (buffer) { - buffer.content_modalities.push(duckduckgo_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(duckduckgo_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: duckduckgo_keymap, + anchor: duckduckgo_anchor_keymap, + select: duckduckgo_select_keymap }, $display_name = "DuckDuckGo"); page_mode_activate(duckduckgo_mode); diff --git a/modules/page-modes/github.js b/modules/page-modes/github.js index 1cc2859..e374a0b 100644 --- a/modules/page-modes/github.js +++ b/modules/page-modes/github.js @@ -81,21 +81,9 @@ define_key(github_keymap, "?", "github-keyboard-shortcuts"); define_key(github_keymap, "s", "github-focus-site-search"); define_key(github_keymap, "/", "github-focus-issues-search"); - -var github_modality = { - normal: github_keymap -}; - -define_page_mode("github-mode", +define_keymaps_page_mode("github-mode", build_url_regexp($domain = "github", $allow_www = true), - function enable (buffer) { - buffer.content_modalities.push(github_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(github_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: github_keymap }, $display_name = "Github"); page_mode_activate(github_mode); diff --git a/modules/page-modes/gmane.js b/modules/page-modes/gmane.js index 9c13ad5..08060da 100644 --- a/modules/page-modes/gmane.js +++ b/modules/page-modes/gmane.js @@ -63,21 +63,9 @@ define_key(gmane_keymap, "down", null, $fallthrough); define_key(gmane_keymap, "up", null, $fallthrough); define_key(gmane_keymap, "S", null, $fallthrough); - -var gmane_modality = { - normal: gmane_keymap -}; - -define_page_mode("gmane-mode", +define_keymaps_page_mode("gmane-mode", build_url_regexp($domain = /(news|thread)\.gmane/, $tlds = ["org"]), - function enable (buffer) { - buffer.content_modalities.push(gmane_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(gmane_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: gmane_keymap }, $display_name = "Gmane"); page_mode_activate(gmane_mode); diff --git a/modules/page-modes/google-calendar.js b/modules/page-modes/google-calendar.js index e4dace8..02dfbf8 100644 --- a/modules/page-modes/google-calendar.js +++ b/modules/page-modes/google-calendar.js @@ -34,22 +34,11 @@ define_key(google_calendar_keymap, "tab", null, $fallthrough);//PROBABLY BAD define_key(google_calendar_keymap, "M-s", null, $fallthrough); define_key(google_calendar_keymap, "escape", null, $fallthrough); -var google_calendar_modality = { - normal: google_calendar_keymap -}; - -define_page_mode("google-calendar-mode", +define_keymaps_page_mode("google-calendar-mode", build_url_regexp($domain = "google", $path = "calendar/", $allow_www = true), - function enable (buffer) { - buffer.content_modalities.push(google_calendar_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(google_calendar_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: google_calendar_keymap }, $display_name = "Google Calendar"); page_mode_activate(google_calendar_mode); diff --git a/modules/page-modes/google-gqueues.js b/modules/page-modes/google-gqueues.js index 04a1c1c..1165e95 100644 --- a/modules/page-modes/google-gqueues.js +++ b/modules/page-modes/google-gqueues.js @@ -42,22 +42,11 @@ define_key(google_gqueues_keymap, "h", null, $fallthrough); define_key(google_gqueues_keymap, "J", null, $fallthrough); define_key(google_gqueues_keymap, "K", null, $fallthrough); -var google_gqueues_modality = { - normal: google_gqueues_keymap -}; - -define_page_mode("google-gqueues-mode", +define_keymaps_page_mode("google-gqueues-mode", build_url_regexp($domain = "gqueues", $allow_www = true, $path = "main"), - function enable (buffer) { - buffer.content_modalities.push(google_gqueues_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(google_gqueues_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: google_gqueues_keymap }, $display_name = "Google GQueues"); page_mode_activate("google_gqueues_mode"); diff --git a/modules/page-modes/google-maps.js b/modules/page-modes/google-maps.js index b68c5de..1e7ab19 100644 --- a/modules/page-modes/google-maps.js +++ b/modules/page-modes/google-maps.js @@ -72,20 +72,9 @@ define_key(google_maps_keymap, "C-b", "google-maps-pan-left"); define_key(google_maps_keymap, "C-n", "google-maps-pan-down"); define_key(google_maps_keymap, "C-p", "google-maps-pan-up"); -var google_maps_modality = { - normal: google_maps_keymap -}; - -define_page_mode("google-maps-mode", +define_keymaps_page_mode("google-maps-mode", build_url_regexp($domain = "maps.google"), - function enable (buffer) { - buffer.content_modalities.push(google_maps_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(google_maps_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: google_maps_keymap }, $display_name = "Google Maps"); page_mode_activate(google_maps_mode); diff --git a/modules/page-modes/google-reader.js b/modules/page-modes/google-reader.js index 96bedd5..f88b36c 100644 --- a/modules/page-modes/google-reader.js +++ b/modules/page-modes/google-reader.js @@ -51,24 +51,12 @@ define_key(google_reader_keymap, "2", null, $fallthrough); define_key(google_reader_keymap, "/", null, $fallthrough); define_key(google_reader_keymap, "a", null, $fallthrough); - -var google_reader_modality = { - normal: google_reader_keymap -}; - -define_page_mode("google-reader-mode", +define_keymaps_page_mode("google-reader-mode", build_url_regexp($domain = "google", $tlds = ["com", "co.uk"], $allow_www = true, $path = "reader/"), - function enable (buffer) { - buffer.content_modalities.push(google_reader_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(google_reader_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: google_reader_keymap }, $display_name = "Google Reader"); page_mode_activate(google_reader_mode); diff --git a/modules/page-modes/google-video.js b/modules/page-modes/google-video.js index e6b9c65..88de416 100644 --- a/modules/page-modes/google-video.js +++ b/modules/page-modes/google-video.js @@ -53,7 +53,7 @@ define_page_mode("google-video-mode", buffer.page.local.media_scraper = [media_scrape_google_video]; media_setup_local_object_classes(buffer); }, - function disable (buffer) {}, + function disable (buffer) {}, //FIXME: uninstall scraper $display_name = "Google Video"); page_mode_activate(google_video_mode); diff --git a/modules/page-modes/google-voice.js b/modules/page-modes/google-voice.js index a668863..6eb2355 100644 --- a/modules/page-modes/google-voice.js +++ b/modules/page-modes/google-voice.js @@ -41,24 +41,11 @@ define_key(google_voice_keymap, "* n", null, $fallthrough); define_key(google_voice_keymap, "* r", null, $fallthrough); define_key(google_voice_keymap, "* u", null, $fallthrough); - -var google_voice_modality = { - normal: google_voice_keymap -}; - - -define_page_mode("google-voice-mode", +define_keymaps_page_mode("google-voice-mode", build_url_regexp($domain = "google", $allow_www = true, $path = "voice"), - function enable (buffer) { - buffer.content_modalities.push(google_voice_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(google_voice_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: google_voice_keymap }, $display_name = "Google Voice"); page_mode_activate(google_voice_mode); diff --git a/modules/page-modes/stackexchange.js b/modules/page-modes/stackexchange.js index d905509..903a706 100644 --- a/modules/page-modes/stackexchange.js +++ b/modules/page-modes/stackexchange.js @@ -62,22 +62,9 @@ define_key(stackexchange_keymap, "V", "stackexchange-vote"); define_key(stackexchange_keymap, "A", "stackexchange-accept-answer"); define_key(stackexchange_keymap, "O", "stackexchange-favorite-question"); - -var stackexchange_modality = { - normal: stackexchange_keymap -}; - - -define_page_mode("stackexchange-mode", +define_keymaps_page_mode("stackexchange-mode", /^https?:\/\/(?:www.|meta.)?(stackoverflow|serverfault|superuser|stackapps)\.(?:com)\//, - function enable (buffer) { - buffer.content_modalities.push(stackexchange_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(stackexchange_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: stackexchange_keymap }, $display_name = "StackExchange"); page_mode_activate(stackexchange_mode); diff --git a/modules/page-modes/twitter.js b/modules/page-modes/twitter.js index 1f0a468..eeb6943 100644 --- a/modules/page-modes/twitter.js +++ b/modules/page-modes/twitter.js @@ -40,21 +40,10 @@ define_key(twitter_keymap, "n", null, $fallthrough); define_key(twitter_keymap, "return", null, $fallthrough); -var twitter_modality = { - normal: twitter_keymap -}; - -define_page_mode("twitter-mode", +define_keymaps_page_mode("twitter-mode", build_url_regexp($domain = "twitter", $allow_www = true), - function enable (buffer) { - buffer.content_modalities.push(twitter_modality); - }, - function disable (buffer) { - var i = buffer.content_modalities.indexOf(twitter_modality); - if (i > -1) - buffer.content_modalities.splice(i, 1); - }, + { normal: twitter_keymap }, $display_name = "Twitter"); page_mode_activate(twitter_mode); -- 2.11.4.GIT