emojiEngine.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * @const
  3. **/
  4. var EmojiProvider = {
  5. "emojione_v2_3": {
  6. js: "emojione_v2.3.sprites.js",
  7. css: "emojione_v2.3.sprites.css",
  8. name: "Emojione v2.3"
  9. },
  10. "emojione_v3": {
  11. js: "emojione_v3.sprites.js",
  12. css: "emojione_v3.sprites.css",
  13. name: "Emojione v3"
  14. }
  15. };
  16. var
  17. /** @type {{js: string, css: string, name: string}} */
  18. DEFAULT_EMOJI_PROVIDER = EmojiProvider["emojione_v2_3"],
  19. /** @type {{js: string, css: string, name: string}} */
  20. CURRENT_EMOJI_PROVIDER;
  21. /**
  22. * @param {{js: string, css: string, name: string}} provider
  23. **/
  24. function setEmojiProvider(provider) {
  25. if (CURRENT_EMOJI_PROVIDER !== provider) {
  26. console.log("Loading emoji pack " +provider.name);
  27. var xhr = new XMLHttpRequest();
  28. xhr.timeout = 1000 * 60 * 1; // 3 min timeout
  29. xhr.onreadystatechange = function(e) {
  30. if (xhr.readyState === 4) {
  31. var script = document.createElement("script"),
  32. link = document.createElement("link");
  33. script.innerHTML = xhr.response;
  34. script.language = "text/javascript";
  35. link.href = provider.css;
  36. link.rel = "stylesheet";
  37. document.head.appendChild(link);
  38. document.body.appendChild(script);
  39. invalidateAllMessages();
  40. EMOJI_BAR.reset();
  41. }
  42. };
  43. xhr.open('GET', provider.js, true);
  44. xhr.send(null);
  45. CURRENT_EMOJI_PROVIDER = provider;
  46. }
  47. }
  48. /** @param {string|undefined} providerId */
  49. function loadEmojiProvider(providerId) {
  50. setEmojiProvider(providerId && EmojiProvider[providerId] ? EmojiProvider[providerId] : DEFAULT_EMOJI_PROVIDER);
  51. }
  52. function isValidEmojiProvider(providerId) {
  53. return !!EmojiProvider[providerId];
  54. }