test.html 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <DOCTYPE html5>
  2. <html>
  3. <head><style>
  4. li { font-weight: bolder; font-family: sans-serif; }
  5. </style></head>
  6. <body>
  7. <script language="javascript">
  8. COMPOSED_EMOJI = (function(){
  9. var ready = false
  10. ,onceReady = []
  11. ,emojiParts = {
  12. ":": {pos: [0, 0], zIndex: 50}
  13. ,";": {pos: [1, 0], zIndex: 50}
  14. ,"-": {pos: [0, 1], zIndex: 0}
  15. ,"(": {pos: [0, 2], zIndex: 10}
  16. ,")": {pos: [1, 2], zIndex: 10}
  17. }
  18. ,masks = []
  19. ,SPRITE_SIZE = 64
  20. ,sprites = new Image();
  21. sprites.onload = function() {
  22. var canvas = document.createElement("canvas");
  23. canvas.height = sprites.height;
  24. canvas.width = sprites.width;
  25. var ctx = canvas.getContext("2d");
  26. ctx.drawImage(sprites, 0, 0);
  27. sprites = canvas;
  28. ready = true;
  29. onceReady.forEach(function(cb) {
  30. cb();
  31. });
  32. onceReady = [];
  33. };
  34. sprites.onerror = function() {
  35. console.error("Failed loading images");
  36. };
  37. sprites.src = "emojiComposer.sprites.png";
  38. var applyItem = function(ctx, spritePos) {
  39. ctx.drawImage(sprites,
  40. spritePos[0] * SPRITE_SIZE *2, spritePos[1]* SPRITE_SIZE,
  41. SPRITE_SIZE, SPRITE_SIZE,
  42. 0, 0,
  43. SPRITE_SIZE, SPRITE_SIZE);
  44. };
  45. var addEmoji = function(emojiCode, cb) {
  46. var i =0
  47. ,codeLength =emojiCode.length
  48. ,items = []
  49. for (; i < codeLength; i++) {
  50. var c = emojiCode[i];
  51. if (!emojiParts[c])
  52. break;
  53. items.push(emojiParts[c]);
  54. }
  55. var canvas = document.createElement("canvas");
  56. canvas.height = canvas.width = SPRITE_SIZE;
  57. var ctx = canvas.getContext('2d');
  58. items.sort(function(a, b) {
  59. return a.zIndex -b.zIndex;
  60. });
  61. items.forEach(function(i) {
  62. applyItem(ctx, i.pos);
  63. });
  64. return canvas;
  65. };
  66. return {
  67. toHTMLElement: addEmoji,
  68. onceReady: function(cb) {
  69. if (ready)
  70. cb();
  71. else
  72. onceReady.push(cb);
  73. }
  74. };
  75. })();
  76. COMPOSED_EMOJI.onceReady(function() {
  77. var list = document.createElement("ul");
  78. ([":-)", ":-(", ";-)", ";-("]).forEach(function(i) {
  79. var listItem = document.createElement("li"),
  80. expl = document.createElement("span");
  81. expl.textContent = i;
  82. listItem.appendChild(expl);
  83. listItem.appendChild(COMPOSED_EMOJI.toHTMLElement(i));
  84. list.appendChild(listItem);
  85. });
  86. document.body.appendChild(list);
  87. });
  88. </script>
  89. </body></html>