isundil преди 8 години
родител
ревизия
dd9f79daff
променени са 1 файла, в които са добавени 93 реда и са изтрити 0 реда
  1. 93 0
      test.html

+ 93 - 0
test.html

@@ -0,0 +1,93 @@
+<DOCTYPE html5>
+<html>
+<head><style>
+li { font-weight: bolder; font-family: sans-serif; }
+</style></head>
+<body>
+<script language="javascript">
+COMPOSED_EMOJI = (function(){
+    var ready = false
+        ,onceReady = []
+        ,emojiParts = {
+            ":": {pos: [0, 0], zIndex: 50}
+            ,";": {pos: [1, 0], zIndex: 50}
+            ,"-": {pos: [0, 1], zIndex: 0}
+            ,"(": {pos: [0, 2], zIndex: 10}
+            ,")": {pos: [1, 2], zIndex: 10}
+        }
+        ,masks = []
+        ,SPRITE_SIZE = 64
+        ,sprites = new Image();
+
+    sprites.onload = function() {
+        var canvas = document.createElement("canvas");
+        canvas.height = sprites.height;
+        canvas.width = sprites.width;
+        var ctx = canvas.getContext("2d");
+        ctx.drawImage(sprites, 0, 0);
+        sprites = canvas;
+        ready = true;
+        onceReady.forEach(function(cb) {
+            cb();
+        });
+        onceReady = [];
+    };
+    sprites.onerror = function() {
+        console.error("Failed loading images");
+    };
+    sprites.src = "emojiComposer.sprites.png";
+
+    var applyItem = function(ctx, spritePos) {
+        ctx.drawImage(sprites,
+            spritePos[0] * SPRITE_SIZE *2, spritePos[1]* SPRITE_SIZE,
+            SPRITE_SIZE, SPRITE_SIZE,
+            0, 0,
+            SPRITE_SIZE, SPRITE_SIZE);
+    };
+    var addEmoji = function(emojiCode, cb) {
+        var i =0
+            ,codeLength =emojiCode.length
+            ,items = []
+
+        for (; i < codeLength; i++) {
+            var c = emojiCode[i];
+            if (!emojiParts[c])
+                break;
+            items.push(emojiParts[c]);
+        }
+        var canvas = document.createElement("canvas");
+        canvas.height = canvas.width = SPRITE_SIZE;
+        var ctx = canvas.getContext('2d');
+        items.sort(function(a, b) {
+            return a.zIndex -b.zIndex;
+        });
+        items.forEach(function(i) {
+            applyItem(ctx, i.pos);
+        });
+        return canvas;
+    };
+    return {
+        toHTMLElement: addEmoji,
+        onceReady: function(cb) {
+            if (ready)
+                cb();
+            else
+                onceReady.push(cb);
+        }
+    };
+})();
+
+COMPOSED_EMOJI.onceReady(function() {
+    var list = document.createElement("ul");
+    ([":-)", ":-(", ";-)", ";-("]).forEach(function(i) {
+        var listItem = document.createElement("li"),
+            expl = document.createElement("span");
+        expl.textContent = i;
+        listItem.appendChild(expl);
+        listItem.appendChild(COMPOSED_EMOJI.toHTMLElement(i));
+        list.appendChild(listItem);
+    });
+    document.body.appendChild(list);
+});
+</script>
+</body></html>