emojis.tx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <div id="emoji-container">
  2. <select id="emoji-category" class="mojitab" >
  3. : for $categories.keys() -> $category {
  4. <option value="<: $category :>"><: $category :></option>
  5. : }
  6. </select>
  7. <div id="emojis">
  8. : for $categories.keys() -> $category {
  9. <span id="<: $category :>" class="mojipane" style="display:none">
  10. : for $categories[$category] -> $emoji {
  11. <span class="emoji"><: $emoji :></span>
  12. : }
  13. </span>
  14. : }
  15. </div>
  16. </div>
  17. <script>
  18. class TcmsEmojiPicker {
  19. constructor () {
  20. this.clearBinds();
  21. }
  22. binds = [];
  23. switchEmojiDropDown (e) {
  24. var panes = document.querySelectorAll('.mojipane');
  25. for (var pane of panes) {
  26. pane.style.display="none";
  27. }
  28. var theId = e.target.value;
  29. var el = document.getElementById(theId);
  30. if ( el === null ) {
  31. console.log('no such element '+el);
  32. return;
  33. }
  34. el.style.display = 'inline-block';
  35. }
  36. emitEmoji (e) {
  37. var emoji = e.target.innerText;
  38. // Emit the emoji to all the bound components.
  39. for (var bind of this.binds) {
  40. if (!bind) {
  41. continue;
  42. }
  43. bind.value = bind.value+emoji;
  44. }
  45. }
  46. addBinds (elements) {
  47. for (var element of elements) {
  48. this.binds.push(element);
  49. }
  50. }
  51. clearBinds () {
  52. this.binds = [];
  53. }
  54. };
  55. addEventListener("load", function () {
  56. window.emojiPicker = new TcmsEmojiPicker();
  57. var cat = document.getElementById('emoji-category');
  58. cat.addEventListener("change", function (e) { window.emojiPicker.switchEmojiDropDown(e) });
  59. const ev = new Event("change");
  60. cat.dispatchEvent(ev);
  61. // Setup the listeners on the emojis themselves
  62. var mojis = document.querySelectorAll('.emoji');
  63. for (emoji of mojis) {
  64. emoji.addEventListener("click", function (e) { window.emojiPicker.emitEmoji(e) } );
  65. }
  66. const emojiEvent = new Event("emojiComponentReady");
  67. window.dispatchEvent(emojiEvent);
  68. });
  69. </script>