]> git.donarmstrong.com Git - dactyl.git/blobdiff - common/modules/completion.jsm
Imported Upstream version 1.1+hg7904
[dactyl.git] / common / modules / completion.jsm
index 24b091a0d935631a47b3c74442b226eb44afa453..7d2b6c11da5777f10acaa8be551ee9563c682648 100644 (file)
@@ -1,6 +1,6 @@
 // Copyright (c) 2006-2008 by Martin Stubenschrott <stubenschrott@vimperator.org>
 // Copyright (c) 2007-2011 by Doug Kearns <dougkearns@gmail.com>
-// Copyright (c) 2008-2012 Kris Maglione <maglione.k@gmail.com>
+// Copyright (c) 2008-2014 Kris Maglione <maglione.k@gmail.com>
 //
 // This work is licensed for reuse under an MIT license. Details are
 // given in the LICENSE.txt file included with this file.
@@ -33,10 +33,7 @@ lazyRequire("template", ["template"]);
  * @constructor
  */
 var CompletionContext = Class("CompletionContext", {
-    init: function cc_init(editor, name, offset) {
-        if (!name)
-            name = "";
-
+    init: function cc_init(editor, name="", offset=0) {
         let self = this;
         if (editor instanceof this.constructor) {
             let parent = editor;
@@ -60,15 +57,15 @@ var CompletionContext = Class("CompletionContext", {
              */
             self.parent = parent;
 
-            ["filters", "keys", "process", "title", "quote"].forEach(function fe(key)
-                self[key] = parent[key] && util.cloneObject(parent[key]));
-            ["anchored", "compare", "editor", "_filter", "filterFunc", "forceAnchored", "top"].forEach(function (key)
-                self[key] = parent[key]);
+            ["filters", "keys", "process", "title", "quote"]
+                .forEach(key => self[key] = parent[key] && util.cloneObject(parent[key]));
+            ["anchored", "compare", "editor", "_filter", "filterFunc", "forceAnchored", "top"]
+                .forEach(key => self[key] = parent[key]);
 
             self.__defineGetter__("value", function get_value() this.top.value);
 
             self.offset = parent.offset;
-            self.advance(offset || 0);
+            self.advance(offset);
 
             /**
              * @property {boolean} Specifies that this context is not finished
@@ -156,7 +153,7 @@ var CompletionContext = Class("CompletionContext", {
              * @property {number} This context's offset from the beginning of
              *     {@link #editor}'s value.
              */
-            this.offset = offset || 0;
+            this.offset = offset;
             /**
              * @property {function} A function which is called when any subcontext
              *     changes its completion list. Only called when
@@ -171,9 +168,9 @@ var CompletionContext = Class("CompletionContext", {
              */
             this.top = this;
             this.__defineGetter__("incomplete", function get_incomplete() this._incomplete
-                || this.contextList.some(function (c) c.parent && c.incomplete));
+                || this.contextList.some(c => c.parent && c.incomplete));
             this.__defineGetter__("waitingForTab", function get_waitingForTab() this._waitingForTab
-                || this.contextList.some(function (c) c.parent && c.waitingForTab));
+                || this.contextList.some(c => c.parent && c.waitingForTab));
             this.__defineSetter__("incomplete", function get_incomplete(val) { this._incomplete = val; });
             this.__defineSetter__("waitingForTab", function get_waitingForTab(val) { this._waitingForTab = val; });
             this.reset();
@@ -214,7 +211,7 @@ var CompletionContext = Class("CompletionContext", {
         return this;
     },
 
-    __title: Class.Memoize(function __title() this._title.map(function (s)
+    __title: Class.Memoize(function __title() this._title.map(s =>
                 typeof s == "string" ? messages.get("completion.title." + s, s)
                                      : s)),
 
@@ -515,7 +512,7 @@ var CompletionContext = Class("CompletionContext", {
                 filtered.sort(this.compare);
                 if (!this.anchored) {
                     let filter = this.filter;
-                    filtered.sort(function s(a, b) (b.text.indexOf(filter) == 0) - (a.text.indexOf(filter) == 0));
+                    filtered.sort(function s(a, b) b.text.startsWith(filter) - a.text.startsWith(filter));
                 }
             }
 
@@ -552,7 +549,7 @@ var CompletionContext = Class("CompletionContext", {
             var substrings = [text];
         }
         else {
-            var compare = function compare(text, s) text.indexOf(s) >= 0;
+            var compare = function compare(text, s) text.contains(s);
             var substrings = [];
             let start = 0;
             let idx;
@@ -736,7 +733,7 @@ var CompletionContext = Class("CompletionContext", {
         let alias = (prop) => {
             context.__defineGetter__(prop, () => this[prop]);
             context.__defineSetter__(prop, (val) => this[prop] = val);
-        }
+        };
         alias("_cache");
         alias("_completions");
         alias("_generate");
@@ -846,7 +843,7 @@ var CompletionContext = Class("CompletionContext", {
         }
         this.waitingForTab = false;
         this.runCount++;
-        for each (let context in this.contextList)
+        for (let context of this.contextList)
             context.lastActivated = this.runCount;
         this.contextList = [];
     },
@@ -973,7 +970,7 @@ var Completion = Module("completion", {
                 context.generate = function generate_() {
                     return [[k.substr(services.ABOUT.length), ""]
                             for (k in Cc)
-                            if (k.indexOf(services.ABOUT) == 0)];
+                            if (k.startsWith(services.ABOUT))];
                 };
             });
 
@@ -1059,7 +1056,7 @@ var Completion = Module("completion", {
         let contains = String.indexOf;
         if (context.ignoreCase) {
             compare = util.compareIgnoreCase;
-            contains = function contains_(a, b) a && a.toLowerCase().indexOf(b.toLowerCase()) > -1;
+            contains = function contains_(a, b) a && a.toLowerCase().contains(b.toLowerCase());
         }
 
         if (tags)
@@ -1183,12 +1180,13 @@ var Completion = Module("completion", {
                                 .concat([let (name = k.substr(services.AUTOCOMPLETE.length))
                                             ["native:" + name, _("autocomplete.description", name)]
                                          for (k in Cc)
-                                         if (k.indexOf(services.AUTOCOMPLETE) == 0)]),
+                                         if (k.startsWith(services.AUTOCOMPLETE))]),
 
                 setter: function setter(values) {
-                    if (values.length == 1 && !Set.has(values[0], this.values)
-                            && Array.every(values[0], Set.has(this.valueMap)))
-                        return Array.map(values[0], function m(v) this[v], this.valueMap);
+                    if (values.length == 1 && !hasOwnProperty(values[0], this.values)
+                            && Array.every(values[0], v => hasOwnProperty(this.valueMap, v)))
+                        return Array.map(values[0], v => this.valueMap[v]);
+
                     return values;
                 },