isundil 8 anni fa
parent
commit
17dcbca5d2
1 ha cambiato i file con 95 aggiunte e 0 eliminazioni
  1. 95 0
      cli/emojiBar.js

+ 95 - 0
cli/emojiBar.js

@@ -0,0 +1,95 @@
+
+var EMOJI_BAR = (function() {
+    var dom = document.createElement("div")
+        ,unicodeEmojis = document.createElement("ul")
+        ,customEmojis = document.createElement("ul")
+        ,emojiCache = { unicode: {}, custom: {}}
+
+    /** @type {function():boolean} */
+    ,isSupported = function() {
+        return ("searchEmojis" in window);
+    }
+
+    /** @type {function(Element):{dom:Element,visible:boolean}} */
+    ,wrapEmojiLi = function(emojiDom) {
+        var dom = document.createElement("li");
+        dom.appendChild(emojiDom);
+        return {
+            visible: false
+            ,dom: dom
+        };
+    }
+
+    /** @type {function(*):{dom:Element,visible:boolean}} */
+    ,makeUnicodeEmojiLi = function(emoji) {
+        var domEmoji = window['makeEmoji'](emoji)
+            ,domParent = document.createElement("span");
+        domParent.appendChild(domEmoji);
+        domParent.className = R.klass.emoji.medium;
+        return wrapEmojiLi(domParent);
+    }
+
+    /** @type function(string):number */
+    ,search = function(queryString) {
+        var emojiCount = 0
+            ,toRemove = [];
+
+        if (isSupported()) {
+            /** @type {Object.<string, *>} */
+            var emojis = window['searchEmojis'](queryString);
+            for (var i in emojiCache.unicode) {
+                if (emojiCache.unicode[i].visible && !emojis[i]) {
+                    emojiCache.unicode[i].visible = false;
+                    unicodeEmojis.removeChild(emojiCache.unicode[i].dom);
+                }
+            }
+            for (var i in emojis) {
+                var e = emojiCache.unicode[i];
+
+                if (!e)
+                    e = emojiCache.unicode[i] = makeUnicodeEmojiLi(emojis[i]);
+                if (!e.visible) {
+                    e.visible = true;
+                    unicodeEmojis.appendChild(e.dom);
+                }
+                emojiCount++;
+            }
+        }
+        //TODO custom
+        return emojiCount;
+    }
+
+    /** @type function(Element):boolean */
+    ,spawn = function(domParent) {
+        if (isSupported()) {
+            domParent.appendChild(dom);
+            search("");
+            return true;
+        }
+        return false;
+    }
+
+    /** @type {function():boolean} */
+    ,close = function() {
+        if (dom.parentElement) {
+            dom.parentElement.removeChild(dom);
+            return true;
+        }
+        return false;
+    }
+
+    ;
+
+    dom.appendChild(unicodeEmojis);
+    dom.appendChild(customEmojis);
+
+    return {
+        isSupported: isSupported
+        ,spawn: spawn
+        ,search: search
+        ,close: close
+    };
+})();
+
+//EMOJI_BAR.spawn(document.body);
+