emoji.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. use common\helpers\Html;
  3. use common\helpers\ArrayHelper;
  4. ?>
  5. <?= Html::tag('span',
  6. '<i class="fa fa-smile-o" style="font-size: 16px;"></i>',
  7. ArrayHelper::merge([
  8. 'class' => 'btn btn-white',
  9. 'data-toggle' => 'modal',
  10. 'data-target' => '#rfEmoji',
  11. ], $options)); ?>
  12. <div class="modal fade" id="rfEmoji" aria-hidden="true">
  13. <div class="modal-dialog">
  14. <div class="modal-content">
  15. <div class="modal-content">
  16. <div class="modal-header">
  17. <h4 class="modal-title">表情</h4>
  18. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  19. </div>
  20. <div class="modal-body emoji-body"></div>
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. <script>
  26. // 解析表情 qqWechatEmotionParser(text);
  27. var emojiBaseUrl = '<?= $baseUrl; ?>image/';
  28. var name = '<?= $name; ?>';
  29. var emojiTheme = '<?= $theme; ?>';
  30. var emojiMap = {};
  31. var emojiBindId = '<?= $bind_id; ?>';
  32. $(document).ready(function () {
  33. // 默认的解析方式
  34. if (emojiTheme === 'default') {
  35. emojiMap = defaultEmojiList;
  36. var tmpMap = [];
  37. $(emojiMap).each(function (i, data) {
  38. var emojiSpan = "<span class='rf-emoji' data-dismiss='modal' data-emoji='" + data.alt + "'><img class='p-xxs' src='" + emojiBaseUrl + data.url + ".gif'></span>";
  39. $('.emoji-body').append(emojiSpan);
  40. tmpMap[data.alt] = 'TMP' + data.url + '.gif';
  41. });
  42. console.log(tmpMap);
  43. } else {
  44. emojiMap = wechatEmojiList;
  45. emojiMap = emojiKeys(emojiMap);
  46. $(emojiMap).each(function (i, data) {
  47. var emojiSpan = "<span class='rf-emoji' data-dismiss='modal' data-emoji='" + data.key + "'><img class='p-xxs' src='" + data.value + "'></span>";
  48. $('.emoji-body').append(emojiSpan);
  49. });
  50. }
  51. // 加载完成事件
  52. $(document).trigger('emoji-ready-' + name);
  53. });
  54. $(document).on("click", ".emoji-body img", function () {
  55. var emoji = $(this).parent().data('emoji');
  56. if (emojiBindId) {
  57. $("#" + emojiBindId).insertAtCaret(emoji);
  58. }
  59. // 选择完成事件
  60. $(document).trigger('emoji-select-' + name, [emoji]);
  61. });
  62. (function ($) {
  63. $.fn.extend({
  64. insertAtCaret: function (myValue) {
  65. var $t = $(this)[0];
  66. if (document.selection) {
  67. this.focus();
  68. sel = document.selection.createRange();
  69. sel.text = myValue;
  70. this.focus();
  71. } else if ($t.selectionStart || $t.selectionStart == '0') {
  72. var startPos = $t.selectionStart;
  73. var endPos = $t.selectionEnd;
  74. var scrollTop = $t.scrollTop;
  75. $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
  76. this.focus();
  77. $t.selectionStart = startPos + myValue.length;
  78. $t.selectionEnd = startPos + myValue.length;
  79. $t.scrollTop = scrollTop;
  80. } else {
  81. this.value += myValue;
  82. this.focus();
  83. }
  84. }
  85. });
  86. })(jQuery);
  87. function emojiKeys(map) {
  88. var list = [];
  89. for (var k in map) {
  90. list.push({
  91. 'key': k,
  92. 'value': map[k],
  93. })
  94. }
  95. return list;
  96. }
  97. </script>
粤ICP备19079148号