Thanks to John Foerch for suggestions.
---
content/minibuffer-annotation.css | 3 ++
content/minibuffer.css | 4 ---
modules/minibuffer.js | 40 ++++++++++++++++++++++++++++
tests/simple/minibuffer-annotation-mode.js | 39 +++++++++++++++++++++++++++
4 files changed, 82 insertions(+), 4 deletions(-)
create mode 100644 content/minibuffer-annotation.css
create mode 100644 tests/simple/minibuffer-annotation-mode.js
diff --git a/content/minibuffer-annotation.css
b/content/minibuffer-annotation.css
new file mode 100644
index 0000000..4c5b5e8
--- /dev/null
+++ b/content/minibuffer-annotation.css
@@ -0,0 +1,3 @@
+#minibuffer-input {
+ -moz-binding:
url("chrome://conkeror-gui/content/annotated-textbox.xml#annotated-textbox");
+}
diff --git a/content/minibuffer.css b/content/minibuffer.css
index 71105fd..17ee1b2 100644
--- a/content/minibuffer.css
+++ b/content/minibuffer.css
@@ -13,7 +13,3 @@
#minibuffer[minibuffermode="input"] #minibuffer-mode-indicator {
visibility: collapse;
}
-
-#minibuffer-input {
- -moz-binding:
url("chrome://conkeror-gui/content/annotated-textbox.xml#annotated-textbox");
-}
diff --git a/modules/minibuffer.js b/modules/minibuffer.js
index 6b19305..ab4b1e8 100644
--- a/modules/minibuffer.js
+++ b/modules/minibuffer.js
@@ -447,4 +447,44 @@ function minibuffer_abort (window) {
interactive("minibuffer-abort", null, function (I) {
minibuffer_abort(I.window); });
+/**
+ * Provide an annotation label during minibuffer input.
+ */
+
+const minibuffer_annotation_stylesheet =
"chrome://conkeror-gui/content/minibuffer-annotation.css";
+
+var minibuffer_annotation_mode = {
+ users: [],
+ enabled: false,
+
+ register: function (user) {
+ this.users.push(user);
+ this._switch_if_needed();
+ },
+
+ unregister: function (user) {
+ var i = this.users.indexOf(user);
+ if (i > -1)
+ this.users.splice(i, 1);
+ this._switch_if_needed();
+ },
+
+ _switch_if_needed: function (user) {
+ if (this.enabled && this.users.length == 0)
+ this._disable();
+ if (!this.enabled && this.users.length != 0)
+ this._enable();
+ },
+
+ _enable: function () {
+ register_user_stylesheet(minibuffer_annotation_stylesheet);
+ this.enabled = true;
+ },
+
+ _disable: function () {
+ unregister_user_stylesheet(minibuffer_annotation_stylesheet);
+ this.enabled = false;
+ }
+}
+
provide("minibuffer");
diff --git a/tests/simple/minibuffer-annotation-mode.js
b/tests/simple/minibuffer-annotation-mode.js
new file mode 100644
index 0000000..ab7888d
--- /dev/null
+++ b/tests/simple/minibuffer-annotation-mode.js
@@ -0,0 +1,39 @@
+require('walnut.js');
+
+walnut_run({
+ suite_setup: function () {
+ this.mode = minibuffer_annotation_mode;
+ this._stylesheet = minibuffer_annotation_stylesheet;
+ this._users = this.mode.users;
+ this._enabled = this.mode.enabled;
+ minibuffer_annotation_stylesheet = null;
+ this.mode.users = [];
+ this.mode.enabled = false;
+ },
+ suite_teardown: function () {
+ minibuffer_annotation_stylesheet = this._stylesheet;
+ this.mode.users = this._users;
+ this.mode.enabled = this._enabled
+ },
+ test_minibuffer_annotation_mode_1: function () {
+ this.mode.register(this);
+ assert_equals(this.mode.users.length, 1);
+ assert(this.mode.enabled);
+ },
+ test_minibuffer_annotation_mode_2: function () {
+ this.mode.register("foo");
+ assert_equals(this.mode.users.length, 2);
+ assert(this.mode.enabled);
+ },
+ test_minibuffer_annotation_mode_3: function () {
+ this.mode.unregister(this);
+ assert_equals(this.mode.users.length, 1);
+ assert(this.mode.enabled);
+ },
+ test_minibuffer_annotation_mode_4: function () {
+ this.mode.unregister("foo");
+ assert_equals(this.mode.users.length, 0);
+ assert(!this.mode.enabled);
+ }
+});
+
--
1.7.9.1
_______________________________________________
Conkeror mailing list
[email protected]
https://www.mozdev.org/mailman/listinfo/conkeror