[IMPROVE] Upgrade EmojiOne to JoyPixels 4.5.0 (#13807)

pull/13641/head^2
William Reiske 7 years ago committed by Guilherme Gazzo
parent e2cd371e7a
commit 68feeb163f
  1. 1
      .meteor/packages
  2. 1
      .meteor/versions
  3. 4
      README.md
  4. 58
      app/emoji-custom/client/lib/emojiCustom.js
  5. 8
      app/emoji-emojione/README.md
  6. 2177
      app/emoji-emojione/client/activity-sprites.css
  7. 35
      app/emoji-emojione/client/emojione-sprites.css
  8. 1615
      app/emoji-emojione/client/flags-sprites.css
  9. 637
      app/emoji-emojione/client/food-sprites.css
  10. 42
      app/emoji-emojione/client/modifier-sprites.css
  11. 1069
      app/emoji-emojione/client/nature-sprites.css
  12. 1259
      app/emoji-emojione/client/objects-sprites.css
  13. 8729
      app/emoji-emojione/client/people-sprites.css
  14. 163
      app/emoji-emojione/client/regional-sprites.css
  15. 7356
      app/emoji-emojione/client/sprites.css
  16. 1747
      app/emoji-emojione/client/symbols-sprites.css
  17. 739
      app/emoji-emojione/client/travel-sprites.css
  18. 34
      app/emoji-emojione/emojione.sprites.mustache
  19. 2688
      app/emoji-emojione/lib/emojiPicker.js
  20. 30
      app/emoji-emojione/lib/emojione.tpl
  21. 11
      app/emoji-emojione/lib/emojioneRender.js
  22. 32
      app/emoji-emojione/lib/generateEmojiIndex.js
  23. 185
      app/emoji-emojione/lib/generateEmojiIndex.mjs
  24. 166
      app/emoji-emojione/lib/rocketchat.js
  25. 2
      app/emoji-emojione/server/callbacks.js
  26. 22
      app/emoji/client/emojiPicker.html
  27. 188
      app/emoji/client/emojiPicker.js
  28. 86
      app/emoji/client/lib/EmojiPicker.js
  29. 11
      app/emoji/lib/rocketchat.js
  30. 1
      app/reactions/client/stylesheets/reaction.css
  31. 35
      app/theme/client/imports/components/emojiPicker.css
  32. 2
      client/importsCss.js
  33. 257
      package-lock.json
  34. 3
      package.json
  35. 1
      packages/rocketchat-i18n/i18n/af.i18n.json
  36. 1
      packages/rocketchat-i18n/i18n/ar.i18n.json
  37. 1
      packages/rocketchat-i18n/i18n/az.i18n.json
  38. 1
      packages/rocketchat-i18n/i18n/be-BY.i18n.json
  39. 1
      packages/rocketchat-i18n/i18n/bg.i18n.json
  40. 1
      packages/rocketchat-i18n/i18n/bs.i18n.json
  41. 1
      packages/rocketchat-i18n/i18n/ca.i18n.json
  42. 1
      packages/rocketchat-i18n/i18n/cs.i18n.json
  43. 1
      packages/rocketchat-i18n/i18n/cy.i18n.json
  44. 1
      packages/rocketchat-i18n/i18n/da.i18n.json
  45. 1
      packages/rocketchat-i18n/i18n/de.i18n.json
  46. 1
      packages/rocketchat-i18n/i18n/el.i18n.json
  47. 2
      packages/rocketchat-i18n/i18n/en.i18n.json
  48. 1
      packages/rocketchat-i18n/i18n/eo.i18n.json
  49. 1
      packages/rocketchat-i18n/i18n/es.i18n.json
  50. 3
      packages/rocketchat-i18n/i18n/et.i18n.json
  51. 3
      packages/rocketchat-i18n/i18n/eu.i18n.json
  52. 1
      packages/rocketchat-i18n/i18n/fa.i18n.json
  53. 1
      packages/rocketchat-i18n/i18n/fi.i18n.json
  54. 3
      packages/rocketchat-i18n/i18n/fr.i18n.json
  55. 3
      packages/rocketchat-i18n/i18n/he.i18n.json
  56. 1
      packages/rocketchat-i18n/i18n/hr.i18n.json
  57. 1
      packages/rocketchat-i18n/i18n/hu.i18n.json
  58. 1
      packages/rocketchat-i18n/i18n/id.i18n.json
  59. 1
      packages/rocketchat-i18n/i18n/it.i18n.json
  60. 1
      packages/rocketchat-i18n/i18n/ja.i18n.json
  61. 1
      packages/rocketchat-i18n/i18n/km.i18n.json
  62. 1
      packages/rocketchat-i18n/i18n/ko.i18n.json
  63. 1
      packages/rocketchat-i18n/i18n/ku.i18n.json
  64. 1
      packages/rocketchat-i18n/i18n/lt.i18n.json
  65. 1
      packages/rocketchat-i18n/i18n/lv.i18n.json
  66. 1
      packages/rocketchat-i18n/i18n/mn.i18n.json
  67. 1
      packages/rocketchat-i18n/i18n/ms-MY.i18n.json
  68. 1
      packages/rocketchat-i18n/i18n/nl.i18n.json
  69. 1
      packages/rocketchat-i18n/i18n/no.i18n.json
  70. 1
      packages/rocketchat-i18n/i18n/pl.i18n.json
  71. 1
      packages/rocketchat-i18n/i18n/pt-BR.i18n.json
  72. 1
      packages/rocketchat-i18n/i18n/pt.i18n.json
  73. 1
      packages/rocketchat-i18n/i18n/ro.i18n.json
  74. 1
      packages/rocketchat-i18n/i18n/ru.i18n.json
  75. 1
      packages/rocketchat-i18n/i18n/sk-SK.i18n.json
  76. 1
      packages/rocketchat-i18n/i18n/sl-SI.i18n.json
  77. 1
      packages/rocketchat-i18n/i18n/sq.i18n.json
  78. 1
      packages/rocketchat-i18n/i18n/sr.i18n.json
  79. 1
      packages/rocketchat-i18n/i18n/sv.i18n.json
  80. 1
      packages/rocketchat-i18n/i18n/ta-IN.i18n.json
  81. 1
      packages/rocketchat-i18n/i18n/th-TH.i18n.json
  82. 1
      packages/rocketchat-i18n/i18n/tr.i18n.json
  83. 1
      packages/rocketchat-i18n/i18n/uk.i18n.json
  84. 1
      packages/rocketchat-i18n/i18n/vi-VN.i18n.json
  85. BIN
      public/packages/emojione/activity-sprites.png
  86. BIN
      public/packages/emojione/flags-sprites.png
  87. BIN
      public/packages/emojione/food-sprites.png
  88. BIN
      public/packages/emojione/modifier-sprites.png
  89. BIN
      public/packages/emojione/nature-sprites.png
  90. BIN
      public/packages/emojione/objects-sprites.png
  91. BIN
      public/packages/emojione/people-sprites.png
  92. BIN
      public/packages/emojione/regional-sprites.png
  93. BIN
      public/packages/emojione/symbols-sprites.png
  94. BIN
      public/packages/emojione/travel-sprites.png

@ -84,7 +84,6 @@ accounts-base
accounts-oauth
autoupdate
babel-compiler
emojione:emojione@2.2.6
google-oauth
htmljs
less

@ -41,7 +41,6 @@ ecmascript-runtime-server@0.7.1
edgee:slingshot@0.7.1
ejson@1.1.0
email@1.2.3
emojione:emojione@2.2.6
es5-shim@4.8.0
facebook-oauth@1.5.0
fastclick@1.0.13

@ -450,9 +450,9 @@ Thanks to our core team
[Sing Li](https://github.com/Sing-Li),
and to hundreds of awesome [contributors](https://github.com/RocketChat/Rocket.Chat/graphs/contributors).
![Emoji One](https://cloud.githubusercontent.com/assets/1986378/24772858/47290a70-1ae9-11e7-9a5a-2913d0002c94.png)
![JoyPixels](https://i.imgur.com/OrhYvLe.png)
Emoji provided free by [Emoji One](http://emojione.com)
Emoji provided graciously by [JoyPixels](https://www.joypixels.com/)
![BrowserStack](https://cloud.githubusercontent.com/assets/1986378/24772879/57d57b88-1ae9-11e7-98b4-4af824b47933.png)

@ -45,7 +45,7 @@ export const deleteEmojiCustom = function(emojiData) {
}
}
}
EmojiPicker.updateRecent();
EmojiPicker.updateRecent('rocket');
};
export const updateEmojiCustom = function(emojiData) {
@ -121,41 +121,45 @@ export const updateEmojiCustom = function(emojiData) {
}
}
EmojiPicker.updateRecent();
EmojiPicker.updateRecent('rocket');
};
emoji.packages.emojiCustom = {
emojiCategories: { rocket: 'Custom' },
toneList: {},
list: [],
_regexpSignature: null,
_regexp: null,
const customRender = (html) => {
const emojisMatchGroup = emoji.packages.emojiCustom.list.map(RegExp.escape).join('|');
if (emojisMatchGroup !== emoji.packages.emojiCustom._regexpSignature) {
emoji.packages.emojiCustom._regexpSignature = emojisMatchGroup;
emoji.packages.emojiCustom._regexp = new RegExp(`<object[^>]*>.*?<\/object>|<span[^>]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(${ emojisMatchGroup })`, 'gi');
}
render(html) {
const emojisMatchGroup = emoji.packages.emojiCustom.list.map(RegExp.escape).join('|');
if (emojisMatchGroup !== emoji.packages.emojiCustom._regexpSignature) {
emoji.packages.emojiCustom._regexpSignature = emojisMatchGroup;
emoji.packages.emojiCustom._regexp = new RegExp(`<object[^>]*>.*?<\/object>|<span[^>]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(${ emojisMatchGroup })`, 'gi');
html = html.replace(emoji.packages.emojiCustom._regexp, (shortname) => {
if ((typeof shortname === 'undefined') || (shortname === '') || (emoji.packages.emojiCustom.list.indexOf(shortname) === -1)) {
return shortname;
}
html = html.replace(emoji.packages.emojiCustom._regexp, (shortname) => {
if ((typeof shortname === 'undefined') || (shortname === '') || (emoji.packages.emojiCustom.list.indexOf(shortname) === -1)) {
return shortname;
}
let emojiAlias = shortname.replace(/:/g, '');
let dataCheck = emoji.list[shortname];
if (dataCheck.hasOwnProperty('aliasOf')) {
emojiAlias = dataCheck.aliasOf;
dataCheck = emoji.list[`:${ emojiAlias }:`];
}
let emojiAlias = shortname.replace(/:/g, '');
return `<span class="emoji" style="background-image:url(${ getEmojiUrlFromName(emojiAlias, dataCheck.extension) });" data-emoji="${ emojiAlias }" title="${ shortname }">${ shortname }</span>`;
});
let dataCheck = emoji.list[shortname];
if (dataCheck.hasOwnProperty('aliasOf')) {
emojiAlias = dataCheck.aliasOf;
dataCheck = emoji.list[`:${ emojiAlias }:`];
}
return html;
};
return `<span class="emoji" style="background-image:url(${ getEmojiUrlFromName(emojiAlias, dataCheck.extension) });" data-emoji="${ emojiAlias }" title="${ shortname }">${ shortname }</span>`;
});
emoji.packages.emojiCustom = {
emojiCategories: [{ key: 'rocket', i18n: 'Custom' }],
categoryIndex: 1,
toneList: {},
list: [],
_regexpSignature: null,
_regexp: null,
return html;
},
render: customRender,
renderPicker: customRender,
};
Meteor.startup(() =>

@ -1,15 +1,11 @@
# Updating emojione
## Generate new category map variable for emojipicker
Create a file called `emoji.json` on this directory with the content of the file https://github.com/Ranks/emojione/blob/master/emoji.json
After that, run:
Run
```
node generateEmojiIndex.js
node --experimental-modules generateEmojiIndex.mjs
```
Grab the result and update the file `emojiPicker.js`.
## Generate new percentage sprite
Clone the repository https://github.com/Ranks/emojione/ and replace the file `assets/sprites/emojione.sprites.mustache` with the content
of [emojione.sprites.mustache](emojione.sprites.mustache), then run at `emojione` folder:

File diff suppressed because it is too large Load Diff

@ -0,0 +1,35 @@
@import './symbols-sprites.css';
@import './activity-sprites.css';
@import './objects-sprites.css';
@import './nature-sprites.css';
@import './food-sprites.css';
@import './people-sprites.css';
@import './regional-sprites.css';
@import './travel-sprites.css';
@import './flags-sprites.css';
@import './modifier-sprites.css';
.emojione {
position: relative;
display: inline-block;
overflow: hidden;
width: 22px;
height: 22px;
margin: 0 0.15em;
vertical-align: middle;
white-space: nowrap;
text-indent: 100%;
font-size: inherit;
line-height: normal;
image-rendering: -webkit-optimize-contrast;
image-rendering: optimizeQuality;
}
.emojione.big {
width: 44px;
height: 44px;
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,637 @@
/* stylelint-disable */
.emojione-food {
background-image: url('/packages/emojione/food-sprites.png');
&._1f35d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 0%;
}
&._2615 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 0%;
}
&._1f34e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 11.11111111111111%;
}
&._1f350 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 11.11111111111111%;
}
&._1f34a {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 0%;
}
&._1f34b {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 11.11111111111111%;
}
&._1f34c {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 22.22222222222222%;
}
&._1f349 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 22.22222222222222%;
}
&._1f347 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 22.22222222222222%;
}
&._1f353 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 0%;
}
&._1f348 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 11.11111111111111%;
}
&._1f352 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 22.22222222222222%;
}
&._1f351 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 33.333333333333336%;
}
&._1f96d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 33.333333333333336%;
}
&._1f34d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 33.333333333333336%;
}
&._1f965 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 33.333333333333336%;
}
&._1f95d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 0%;
}
&._1f345 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 11.11111111111111%;
}
&._1f346 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 22.22222222222222%;
}
&._1f951 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 33.333333333333336%;
}
&._1f966 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 44.44444444444444%;
}
&._1f96c {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 44.44444444444444%;
}
&._1f952 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 44.44444444444444%;
}
&._1f336 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 44.44444444444444%;
}
&._1f33d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 44.44444444444444%;
}
&._1f955 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 0%;
}
&._1f954 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 11.11111111111111%;
}
&._1f360 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 22.22222222222222%;
}
&._1f950 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 33.333333333333336%;
}
&._1f35e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 44.44444444444444%;
}
&._1f956 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 55.55555555555556%;
}
&._1f968 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 55.55555555555556%;
}
&._1f96f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 55.55555555555556%;
}
&._1f9c0 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 55.55555555555556%;
}
&._1f95a {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 55.55555555555556%;
}
&._1f373 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 55.55555555555556%;
}
&._1f95e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 0%;
}
&._1f953 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 11.11111111111111%;
}
&._1f969 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 22.22222222222222%;
}
&._1f357 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 33.333333333333336%;
}
&._1f356 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 44.44444444444444%;
}
&._1f32d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 55.55555555555556%;
}
&._1f354 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 66.66666666666667%;
}
&._1f35f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 66.66666666666667%;
}
&._1f355 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 66.66666666666667%;
}
&._1f96a {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 66.66666666666667%;
}
&._1f959 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 66.66666666666667%;
}
&._1f32e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 66.66666666666667%;
}
&._1f32f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 66.66666666666667%;
}
&._1f957 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 0%;
}
&._1f958 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 11.11111111111111%;
}
&._1f96b {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 22.22222222222222%;
}
&._1f34f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 33.333333333333336%;
}
&._1f35c {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 44.44444444444444%;
}
&._1f372 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 55.55555555555556%;
}
&._1f35b {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 66.66666666666667%;
}
&._1f363 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 77.77777777777777%;
}
&._1f371 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 77.77777777777777%;
}
&._1f364 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 77.77777777777777%;
}
&._1f359 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 77.77777777777777%;
}
&._1f35a {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 77.77777777777777%;
}
&._1f358 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 77.77777777777777%;
}
&._1f365 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 77.77777777777777%;
}
&._1f960 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 77.77777777777777%;
}
&._1f362 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 0%;
}
&._1f361 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 11.11111111111111%;
}
&._1f367 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 22.22222222222222%;
}
&._1f368 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 33.333333333333336%;
}
&._1f366 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 44.44444444444444%;
}
&._1f967 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 55.55555555555556%;
}
&._1f370 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 66.66666666666667%;
}
&._1f382 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 77.77777777777777%;
}
&._1f96e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 88.88888888888889%;
}
&._1f9c1 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 88.88888888888889%;
}
&._1f36e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 88.88888888888889%;
}
&._1f36d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 88.88888888888889%;
}
&._1f36c {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 88.88888888888889%;
}
&._1f36b {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 88.88888888888889%;
}
&._1f37f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 88.88888888888889%;
}
&._1f9c2 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 88.88888888888889%;
}
&._1f369 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 88.88888888888889%;
}
&._1f95f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 0%;
}
&._1f36a {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 11.11111111111111%;
}
&._1f330 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 22.22222222222222%;
}
&._1f95c {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 33.333333333333336%;
}
&._1f36f {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 44.44444444444444%;
}
&._1f95b {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 55.55555555555556%;
}
&._1f37c {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 66.66666666666667%;
}
&._1f375 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 77.77777777777777%;
}
&._1f964 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 88.88888888888889%;
}
&._1f376 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 0% 100%;
}
&._1f37a {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 10% 100%;
}
&._1f37b {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 20% 100%;
}
&._1f942 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 30% 100%;
}
&._1f377 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 40% 100%;
}
&._1f943 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 50% 100%;
}
&._1f378 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 60% 100%;
}
&._1f379 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 70% 100%;
}
&._1f37e {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 80% 100%;
}
&._1f944 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 90% 100%;
}
&._1f374 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 100% 0%;
}
&._1f37d {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 100% 11.11111111111111%;
}
&._1f963 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 100% 22.22222222222222%;
}
&._1f961 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 100% 33.333333333333336%;
}
&._1f962 {
background-repeat: no-repeat;
background-size: 1100% 1000%;
background-position: 100% 44.44444444444444%;
}
}

@ -0,0 +1,42 @@
/* stylelint-disable */
.emojione-modifier {
background-image: url('/packages/emojione/modifier-sprites.png');
}
.emojione-diversity._1f3fb {
background-image: url('/packages/emojione/modifier-sprites.png');
background-repeat: no-repeat;
background-size: 300% 200%;
background-position: 0% 0%;
}
.emojione-diversity._1f3fc {
background-image: url('/packages/emojione/modifier-sprites.png');
background-repeat: no-repeat;
background-size: 300% 200%;
background-position: 50% 0%;
}
.emojione-diversity._1f3fd {
background-image: url('/packages/emojione/modifier-sprites.png');
background-repeat: no-repeat;
background-size: 300% 200%;
background-position: 0% 100%;
}
.emojione-diversity._1f3fe {
background-image: url('/packages/emojione/modifier-sprites.png');
background-repeat: no-repeat;
background-size: 300% 200%;
background-position: 50% 100%;
}
.emojione-diversity._1f3ff {
background-image: url('/packages/emojione/modifier-sprites.png');
background-repeat: no-repeat;
background-size: 300% 200%;
background-position: 100% 0%;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,163 @@
/* stylelint-disable */
.emojione-regional {
background-image: url('/packages/emojione/regional-sprites.png');
&._1f1f2 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 0% 0%;
}
&._1f1ff {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 20% 0%;
}
&._1f1fd {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 0% 25%;
}
&._1f1fc {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 20% 25%;
}
&._1f1fb {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 40% 0%;
}
&._1f1fa {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 40% 25%;
}
&._1f1f9 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 0% 50%;
}
&._1f1f8 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 20% 50%;
}
&._1f1f7 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 40% 50%;
}
&._1f1f6 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 60% 0%;
}
&._1f1f5 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 60% 25%;
}
&._1f1f4 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 60% 50%;
}
&._1f1f3 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 0% 75%;
}
&._1f1fe {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 20% 75%;
}
&._1f1f1 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 40% 75%;
}
&._1f1f0 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 60% 75%;
}
&._1f1ef {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 80% 0%;
}
&._1f1ee {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 80% 25%;
}
&._1f1ed {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 80% 50%;
}
&._1f1ec {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 80% 75%;
}
&._1f1eb {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 0% 100%;
}
&._1f1ea {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 20% 100%;
}
&._1f1e9 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 40% 100%;
}
&._1f1e8 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 60% 100%;
}
&._1f1e7 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 80% 100%;
}
&._1f1e6 {
background-repeat: no-repeat;
background-size: 600% 500%;
background-position: 100% 0%;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,739 @@
/* stylelint-disable */
.emojione-travel {
background-image: url('/packages/emojione/travel-sprites.png');
&._1f5ff {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 0%;
}
&._2693 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 0%;
}
&._1f697 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 10%;
}
&._1f695 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 10%;
}
&._1f699 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 0%;
}
&._1f68c {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 10%;
}
&._1f68e {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 20%;
}
&._1f3ce {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 20%;
}
&._1f693 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 20%;
}
&._1f691 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 0%;
}
&._1f692 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 10%;
}
&._1f690 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 20%;
}
&._1f69a {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 30%;
}
&._1f69b {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 30%;
}
&._1f69c {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 30%;
}
&._1f6f4 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 30%;
}
&._1f6b2 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 0%;
}
&._1f6f5 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 10%;
}
&._1f3cd {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 20%;
}
&._1f6a8 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 30%;
}
&._1f694 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 40%;
}
&._1f68d {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 40%;
}
&._1f698 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 40%;
}
&._1f696 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 40%;
}
&._1f6a1 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 40%;
}
&._1f6a0 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 0%;
}
&._1f69f {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 10%;
}
&._1f683 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 20%;
}
&._1f68b {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 30%;
}
&._1f69e {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 40%;
}
&._1f69d {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 50%;
}
&._1f684 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 50%;
}
&._1f685 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 50%;
}
&._1f688 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 50%;
}
&._1f682 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 50%;
}
&._1f686 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 50%;
}
&._1f687 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 0%;
}
&._1f68a {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 10%;
}
&._1f689 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 20%;
}
&._1f6eb {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 30%;
}
&._1f6ec {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 40%;
}
&._1f6e9 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 50%;
}
&._1f4ba {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 60%;
}
&._1f9f3 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 60%;
}
&._1f6f0 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 60%;
}
&._1f680 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 60%;
}
&._1f6f8 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 60%;
}
&._1f681 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 60%;
}
&._1f6f6 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 60%;
}
&._26f5 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 0%;
}
&._1f6a4 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 10%;
}
&._1f6e5 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 20%;
}
&._1f6f3 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 30%;
}
&._26f4 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 40%;
}
&._1f6a2 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 50%;
}
&._26fd {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 60%;
}
&._1f6a7 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 70%;
}
&._1f6a6 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 70%;
}
&._1f6a5 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 70%;
}
&._1f68f {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 70%;
}
&._1f5fa {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 70%;
}
&._2708 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 70%;
}
&._1f5fd {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 70%;
}
&._1f5fc {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 70%;
}
&._1f3f0 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 0%;
}
&._1f3ef {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 10%;
}
&._1f3df {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 20%;
}
&._1f3a1 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 30%;
}
&._1f3a2 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 40%;
}
&._1f3a0 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 50%;
}
&._26f2 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 60%;
}
&._26f1 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 70%;
}
&._1f3d6 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 80%;
}
&._1f3dd {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 80%;
}
&._1f3dc {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 80%;
}
&._1f30b {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 80%;
}
&._26f0 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 80%;
}
&._1f3d4 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 80%;
}
&._1f5fb {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 80%;
}
&._1f3d5 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 80%;
}
&._26fa {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 80%;
}
&._1f3e0 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 0%;
}
&._1f3e1 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 10%;
}
&._1f3d8 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 20%;
}
&._1f3da {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 30%;
}
&._1f3d7 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 40%;
}
&._1f3ed {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 50%;
}
&._1f3e2 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 60%;
}
&._1f3ec {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 70%;
}
&._1f3e3 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 80%;
}
&._1f3e4 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 90%;
}
&._1f3e5 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 90%;
}
&._1f3e6 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 90%;
}
&._1f3e8 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 90%;
}
&._1f3ea {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 90%;
}
&._1f3eb {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 90%;
}
&._1f3e9 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 90%;
}
&._1f492 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 90%;
}
&._1f3db {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 90%;
}
&._26ea {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 90%;
}
&._1f54c {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 0%;
}
&._1f54d {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 10%;
}
&._1f54b {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 20%;
}
&._26e9 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 30%;
}
&._1f6e4 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 40%;
}
&._1f6e3 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 50%;
}
&._1f5fe {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 60%;
}
&._1f391 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 70%;
}
&._1f3de {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 80%;
}
&._1f305 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 90%;
}
&._1f304 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 0% 100%;
}
&._1f320 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 9.090909090909092% 100%;
}
&._1f387 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 18.181818181818183% 100%;
}
&._1f386 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 27.272727272727273% 100%;
}
&._1f9e8 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 36.36363636363637% 100%;
}
&._1f307 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 45.45454545454545% 100%;
}
&._1f306 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 54.54545454545455% 100%;
}
&._1f3d9 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 63.63636363636363% 100%;
}
&._1f303 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 72.72727272727273% 100%;
}
&._1f30c {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 81.81818181818181% 100%;
}
&._1f309 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 90.9090909090909% 100%;
}
&._1f301 {
background-repeat: no-repeat;
background-size: 1200% 1100%;
background-position: 100% 0%;
}
}

@ -1,34 +0,0 @@
{
// Default options
'functions': true
}
.emojione {
image-rendering: -webkit-optimize-contrast;
image-rendering: optimizeQuality;
font-size: inherit;
height: 22px;
width: 22px;
position: relative;
display: inline-block;
margin: 0 .15em;
line-height: normal;
vertical-align: middle;
background-image: url("../../packages/emojione_emojione/assets/sprites/emojione.sprites.png");
background-size: unquote('#{ {{spritesheet.width}} / {{items.0.width}} * 100}% #{ {{spritesheet.height}} / {{items.0.height}} * 100}%');
background-repeat: no-repeat;
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
}
.emojione.big {
height: 44px !important;
width: 44px !important;
}
{{#items}}
.{{name}} {
background-position: unquote('#{({{px.x}} * 100 / ({{px.total_width}} - {{px.width}}))}% #{({{px.y}} * 100 / ({{px.total_height}} - {{px.height}}))}%');
}
{{/items}}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,30 @@
/* stylelint-disable */
.emojione-<%= options.category %> {
background-image: url('<%= options.spritePath %>');
<%
layout.images.forEach(function (image) {
if(options.diversityList[image.className]){
return;
}
%>
&._<%= image.className %> {
background-repeat: no-repeat;
background-size: <%= (layout.width / image.width * 100) %>% <%= (layout.height / image.height * 100) %>%;
background-position: <%= (image.x * 100 / (layout.width - image.width )) %>% <%= (image.y * 100 / (layout.height - image.height)) %>%;
}
<% }); %>
}
<%
layout.images.forEach(function (image) {
if(!options.diversityList[image.className]){
return;
}
%>
.emojione-diversity._<%= image.className %> {
background-image: url('<%= options.spritePath %>');
background-repeat: no-repeat;
background-size: <%= (layout.width / image.width * 100) %>% <%= (layout.height / image.height * 100) %>%;
background-position: <%= (image.x * 100 / (layout.width - image.width )) %>% <%= (image.y * 100 / (layout.height - image.height)) %>%;
}<% }); %>

@ -0,0 +1,11 @@
import emojione from 'emojione';
const fixClass = (html) => html.replace(/class="emojione emojione-32-/g, 'class="emojione emojione-');
export function emojioneRender(message) {
return fixClass(emojione.toImage(message));
}
export function emojioneRenderFromShort(message) {
return fixClass(emojione.shortnameToImage(message));
}

@ -1,32 +0,0 @@
/* eslint-disable */
// emoji.json from emojione@2.2.6
import fs from 'fs';
var emojiList = JSON.parse(fs.readFileSync('emoji.json', 'utf-8'));
/**
* update emojiList variable with the most recent emojione release then
* run: node generateEmojiIndex.js
* grab the results and put into emojiPicker.js file
*/
var toneList = {};
var emojisByCategory = {};
for (var emoji in emojiList) {
if(emojiList.hasOwnProperty(emoji)) {
var toneIndex = emoji.indexOf('_tone');
if (toneIndex !== -1) {
toneList[emoji.substr(0, toneIndex)] = 1;
continue;
}
if (!emojisByCategory[emojiList[emoji].category]) {
emojisByCategory[emojiList[emoji].category] = [];
}
emojisByCategory[emojiList[emoji].category].push(emoji);
}
}
console.log('toneList = ' + JSON.stringify(toneList, null, '\t') + ';');
console.log('emojisByCategory = ' + JSON.stringify(emojisByCategory, null, '\t') + ';');

@ -0,0 +1,185 @@
/* eslint-disable */
// node --experimental-modules generateEmojiIndex.mjs
import fs from 'fs';
import https from 'https';
import nsg from 'node-sprite-generator';
import _ from 'underscore';
import gm from 'gm';
const assetFolder = '../../../node_modules/emojione-assets';
const emojiJsonFile = `${ assetFolder }/emoji.json`;
if (!fs.existsSync(emojiJsonFile)) {
console.error(`${ emojiJsonFile } doesn't exist.`);
console.error('Maybe you need to run \'meteor npm install emojione-assets\' or \'meteor npm install\'?');
} else {
const emojiJson = fs.readFileSync(emojiJsonFile);
generateEmojiPicker(emojiJson);
}
function generateEmojiPicker(data) {
const emojiList = JSON.parse(data);
console.log(`${Object.keys(emojiList).length} emojis found.`);
let toneList = [];
let emojisByCategory = {};
_.sortBy(Object.entries(emojiList), (a) => a[1].order).forEach(([code, emoji]) => {
if (emoji && emoji.shortname) {
const toneIndex = emoji.shortname.indexOf('_tone');
if (toneIndex !== -1) {
const tone = emoji.shortname.substr(1, toneIndex - 1);
if (!toneList.includes(tone)) {
toneList.push(tone);
}
return;
}
}
if (!emojisByCategory[emoji.category]) {
emojisByCategory[emoji.category] = [];
}
emojisByCategory[emoji.category].push(code);
});
let output = `/*
* This file is automatically generated from generateEmojiIndex.mjs
* Last generated ${Date().toString()}
*
* Mapping category hashes into human readable and translated names
*/\n\n`;
const emojiCategoriesMapping = [
{ key: 'people', i18n: 'Smileys_and_People' },
{ key: 'nature', i18n: 'Animals_and_Nature' },
{ key: 'food', i18n: 'Food_and_Drink' },
{ key: 'activity', i18n: 'Activity' },
{ key: 'travel', i18n: 'Travel_and_Places' },
{ key: 'objects', i18n: 'Objects' },
{ key: 'symbols', i18n: 'Symbols' },
{ key: 'flags', i18n: 'Flags' },
];
// emojiCategories
output += `export const emojiCategories = [\n`;
for (let category in emojisByCategory) {
const map = emojiCategoriesMapping.find(o => o.key === category);
if (map) {
output += `\t{ key: '${category}', i18n: '${map.i18n}' },\n`;
} else {
if(category !== 'modifier' || category !== 'regional'){
console.error(`No emojiCategory mapping for ${category}`);
}
}
}
output += `];\n`;
// toneList
const needsQuotes = ['-'];
output += `export const toneList = {\n`;
for (let tone in toneList) {
if (toneList[tone].includes(needsQuotes)) {
output += `\t'${toneList[tone]}': 1,\n`;
} else {
output += `\t${toneList[tone]}: 1,\n`;
}
}
output += `};\n`;
// emojisByCategory
output += `export const emojisByCategory = {\n`;
for (let category in emojisByCategory) {
output += `\t${category}: [\n`;
for (let emoji in emojisByCategory[category]) {
output += `\t\t'${emojiList[emojisByCategory[category][emoji]].shortname.replace(/:/g,'')}',\n`;
}
output += `\t],\n`;
}
output += `};\n`;
fs.writeFileSync("emojiPicker.js", output, {
encoding: 'utf8',
flag: 'w'
});
console.log('Generated emojiPicker.js!');
console.log('Generating sprite sheets....');
let spriteCss = '';
for (let category in emojisByCategory) {
let srcList = [];
let diversityList = [];
const emojis = _.filter(emojiList, x => x.category === category);
const spritePath = `../../../public/packages/emojione/${ category }-sprites.png`;
_.each(emojis, function (emoji) {
srcList.push(`${ assetFolder }/png/64/${ emoji.code_points.base }.png`);
if(emoji.diversity){
diversityList[emoji.code_points.base] = true;
}
});
spriteCss += `@import './${ category }-sprites.css';\n`;
nsg({
src: srcList,
spritePath: spritePath,
layout: 'packed',
stylesheet: 'emojione.tpl',
stylesheetPath: `../client/${ category }-sprites.css`,
compositor: 'gm',
layoutOptions: {
scaling: 1,
},
stylesheetOptions: {
prefix: '',
diversityList: diversityList,
category: category,
spritePath: `/packages/emojione/${ category }-sprites.png`,
pixelRatio: 1
}
}, function (err) {
if (err) {
console.error(err);
return;
}
console.log(`${ category }'s sprite generated!`);
});
}
spriteCss += `
.emojione {
position: relative;
display: inline-block;
overflow: hidden;
width: 22px;
height: 22px;
margin: 0 0.15em;
vertical-align: middle;
white-space: nowrap;
text-indent: 100%;
font-size: inherit;
line-height: normal;
image-rendering: -webkit-optimize-contrast;
image-rendering: optimizeQuality;
}
.emojione.big {
width: 44px;
height: 44px;
}
`;
fs.writeFileSync("../client/emojione-sprites.css", spriteCss, {
encoding: 'utf8',
flag: 'w'
});
}

@ -1,21 +1,177 @@
import emojione from 'emojione';
import { Meteor } from 'meteor/meteor';
import { Tracker } from 'meteor/tracker';
import { emojione } from 'meteor/emojione:emojione';
import { emojioneRender, emojioneRenderFromShort } from './emojioneRender';
import { emojisByCategory, emojiCategories, toneList } from './emojiPicker';
import { emoji } from '../../emoji';
import { getUserPreference } from '../../utils';
// TODO remove fix below when issue is solved: https://github.com/joypixels/emojione/issues/617
// add missing emojis not provided by JS object, but included on emoji.json
emojione.shortnames += '|:tm:|:copyright:|:registered:|:digit_zero:|:digit_one:|:digit_two:|:digit_three:|:digit_four:|:digit_five:|:digit_six:|:digit_seven:|:digit_eight:|:digit_nine:|:pound_symbol:|:asterisk_symbol:';
emojione.regShortNames = new RegExp(`<object[^>]*>.*?<\/object>|<span[^>]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(${ emojione.shortnames })`, 'gi');
emojione.emojioneList[':tm:'] = {
uc_base: '2122',
uc_output: '2122',
uc_match: '2122-fe0f',
uc_greedy: '2122-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':copyright:'] = {
uc_base: '00a9',
uc_output: '00a9',
uc_match: '00a9-fe0f',
uc_greedy: '00a9-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':registered:'] = {
uc_base: '00ae',
uc_output: '00ae',
uc_match: '00ae-fe0f',
uc_greedy: '00ae-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_zero:'] = {
uc_base: '0030',
uc_output: '0030',
uc_match: '0030-fe0f',
uc_greedy: '0030-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_one:'] = {
uc_base: '0031',
uc_output: '0031',
uc_match: '0031-fe0f',
uc_greedy: '0031-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_two:'] = {
uc_base: '0032',
uc_output: '0032',
uc_match: '0032-fe0f',
uc_greedy: '0032-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_three:'] = {
uc_base: '0033',
uc_output: '0033',
uc_match: '0033-fe0f',
uc_greedy: '0033-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_four:'] = {
uc_base: '0034',
uc_output: '0034',
uc_match: '0034-fe0f',
uc_greedy: '0034-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_five:'] = {
uc_base: '0035',
uc_output: '0035',
uc_match: '0035-fe0f',
uc_greedy: '0035-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_six:'] = {
uc_base: '0036',
uc_output: '0036',
uc_match: '0036-fe0f',
uc_greedy: '0036-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_seven:'] = {
uc_base: '0037',
uc_output: '0037',
uc_match: '0037-fe0f',
uc_greedy: '0037-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_eight:'] = {
uc_base: '0038',
uc_output: '0038',
uc_match: '0038-fe0f',
uc_greedy: '0038-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':digit_nine:'] = {
uc_base: '0039',
uc_output: '0039',
uc_match: '0039-fe0f',
uc_greedy: '0039-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':pound_symbol:'] = {
uc_base: '0023',
uc_output: '0023',
uc_match: '0023-fe0f',
uc_greedy: '0023-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
emojione.emojioneList[':asterisk_symbol:'] = {
uc_base: '002a',
uc_output: '002a',
uc_match: '002a-fe0f',
uc_greedy: '002a-fe0f',
shortnames: [],
category: 'symbols',
emojiPackage: 'emojione',
};
// end fix
emoji.packages.emojione = emojione;
emoji.packages.emojione.imageType = 'png';
emoji.packages.emojione.sprites = true;
emoji.packages.emojione.emojisByCategory = emojisByCategory;
emoji.packages.emojione.emojiCategories = emojiCategories;
emoji.packages.emojione.toneList = toneList;
emoji.packages.emojione.render = function(emoji) {
return emojione.toImage(emoji);
};
emoji.packages.emojione.render = emojioneRender;
emoji.packages.emojione.renderPicker = emojioneRenderFromShort;
// http://stackoverflow.com/a/26990347 function isSet() from Gajus
function isSetNotNull(fn) {

@ -1,5 +1,5 @@
import { Meteor } from 'meteor/meteor';
import { emojione } from 'meteor/emojione:emojione';
import emojione from 'emojione';
import { callbacks } from '../../callbacks';

@ -25,19 +25,25 @@
</div>
<div class="filter">
<ul class="filter-list">
{{#each category}}
<li class="filter-item border-secondary-background-color {{activeCategory .}}" title="{{categoryName .}}">
<a href="#{{.}}" class="category-link color-info-font-color"><i class="category-icon icon-{{.}}"></i></a>
{{#each category in emojiCategories}}
<li class="filter-item border-secondary-background-color {{activeCategory category.key}}" title="{{_ category.i18n}}">
<a href="#{{category.key}}" class="category-link color-info-font-color"><i class="category-icon icon-{{category.key}}"></i></a>
</li>
{{/each}}
</ul>
</div>
<div class="emojis">
{{#each category}}
<ul class="{{.}} emoji-list {{isVisible .}}">
{{{emojiList .}}}
</ul>
{{/each}}
{{#if searching}}
{{{searchResults}}}
{{else}}
{{#each category in emojiCategories}}
<h4 class="emoji-list-category" id="emoji-list-category-{{category.key}}">{{_ category.i18n}}</h4>
<ul class="emoji-list emoji-category-{{category.key}}">
{{{emojiList category.key}}}
</ul>
{{/each}}
{{/if}}
</div>
<div class="emoji-footer">{{{_"Emoji_provided_by_JoyPixels"}}}</div>
</div>
</template>

@ -1,68 +1,49 @@
import _ from 'underscore';
import { ReactiveVar } from 'meteor/reactive-var';
import { ReactiveDict } from 'meteor/reactive-dict';
import { Template } from 'meteor/templating';
import { TAPi18n } from 'meteor/tap:i18n';
import { isSetNotNull } from './function-isSet';
import { t } from '../../utils/client';
import { EmojiPicker } from './lib/EmojiPicker';
import { emoji } from '../lib/rocketchat';
const emojiCategories = {};
/**
* Turns category hash to a nice readable translated name
* @param {string} category hash
* @return {string} readable and translated
*/
function categoryName(category) {
for (const emojiPackage in emoji.packages) {
if (emoji.packages.hasOwnProperty(emojiPackage)) {
if (emoji.packages[emojiPackage].emojiCategories.hasOwnProperty(category)) {
const categoryTag = emoji.packages[emojiPackage].emojiCategories[category];
return TAPi18n.__(categoryTag);
}
}
}
if (emojiCategories.hasOwnProperty(category)) {
return emojiCategories[category];
}
// unknown category; better hash than nothing
return category;
}
const emojiListByCategory = new ReactiveDict('emojiList');
function getEmojisByCategory(category) {
const t = Template.instance();
const actualTone = t.tone;
let html = '';
for (const emojiPackage in emoji.packages) {
if (emoji.packages.hasOwnProperty(emojiPackage)) {
if (emoji.packages[emojiPackage].emojisByCategory.hasOwnProperty(category)) {
const total = emoji.packages[emojiPackage].emojisByCategory[category].length;
for (let i = 0; i < total; i++) {
const _emoji = emoji.packages[emojiPackage].emojisByCategory[category][i];
let tone = '';
if (actualTone > 0 && emoji.packages[emojiPackage].toneList.hasOwnProperty(_emoji)) {
tone = `_tone${ actualTone }`;
}
const getEmojiElement = (emoji, image) => `<li class="emoji-${ emoji } emoji-picker-item" data-emoji="${ emoji }" title="${ emoji }">${ image }</li>`;
// set correctPackage here to allow for recent emojis to work properly
if (isSetNotNull(() => emoji.list[`:${ _emoji }:`].emojiPackage)) {
const correctPackage = emoji.list[`:${ _emoji }:`].emojiPackage;
const image = emoji.packages[correctPackage].render(`:${ _emoji }${ tone }:`);
html += `<li class="emoji-${ _emoji }" data-emoji="${ _emoji }" title="${ _emoji }">${ image }</li>`;
}
}
}
const createEmojiList = (category, actualTone) => {
const html = Object.values(emoji.packages).map((emojiPackage) => {
if (!emojiPackage.emojisByCategory[category]) {
return;
}
}
return emojiPackage.emojisByCategory[category].map((current) => {
const tone = actualTone > 0 && emojiPackage.toneList.hasOwnProperty(current) ? `_tone${ actualTone }` : '';
return getEmojiElement(current, emojiPackage.renderPicker(`:${ current }${ tone }:`));
}).join('');
}).join('') || `<li>${ t('No_emojis_found') }</li>`;
return html;
};
export function updateRecentEmoji(category) {
emojiListByCategory.set(category, createEmojiList(category));
}
const createPickerEmojis = (instance) => {
const categories = instance.categoriesList;
const actualTone = instance.tone;
categories.forEach((category) => emojiListByCategory.set(category.key, createEmojiList(category.key, actualTone)));
};
function getEmojisBySearchTerm(searchTerm) {
let html = '';
let html = '<ul class="emoji-list">';
const t = Template.instance();
const actualTone = t.tone;
EmojiPicker.currentCategory.set('');
const searchRegExp = new RegExp(RegExp.escape(searchTerm.replace(/:/g, '')), 'i');
for (let current in emoji.list) {
@ -93,28 +74,19 @@ function getEmojisBySearchTerm(searchTerm) {
}
if (emojiFound) {
const image = emoji.packages[emojiPackage].render(`:${ current }${ tone }:`);
html += `<li class="emoji-${ current }" data-emoji="${ current }" title="${ current }">${ image }</li>`;
const image = emoji.packages[emojiPackage].renderPicker(`:${ current }${ tone }:`);
html += getEmojiElement(current, image);
}
}
}
html += '</ul>';
return html;
}
Template.emojiPicker.helpers({
category() {
const categories = [];
for (const emojiPackage in emoji.packages) {
if (emoji.packages.hasOwnProperty(emojiPackage)) {
for (const key in emoji.packages[emojiPackage].emojisByCategory) {
if (emoji.packages[emojiPackage].emojisByCategory.hasOwnProperty(key)) {
categories.push(key);
}
}
}
}
return categories;
emojiCategories() {
return Template.instance().categoriesList;
},
emojiByCategory(category) {
let emojisByCategory = [];
@ -127,25 +99,14 @@ Template.emojiPicker.helpers({
}
return emojisByCategory;
},
isVisible(category) {
return Template.instance().currentCategory.get() === category ? 'visible' : '';
searching() {
return Template.instance().currentSearchTerm.get().length > 0;
},
searchResults() {
return getEmojisBySearchTerm(Template.instance().currentSearchTerm.get());
},
emojiList(category) {
const t = Template.instance();
const searchTerm = t.currentSearchTerm.get();
const activeCategory = t.currentCategory.get();
// this will cause the reflow when recent list gets updated
t.recentNeedsUpdate.get();
// we only need to replace the active category, since switching tabs resets the filter
if (activeCategory !== category) {
return;
}
if (searchTerm.length > 0) {
return getEmojisBySearchTerm(searchTerm);
}
return getEmojisByCategory(category);
return emojiListByCategory.get(category);
},
currentTone() {
return `tone-${ Template.instance().tone }`;
@ -157,23 +118,15 @@ Template.emojiPicker.helpers({
* @return {boolean} true if active, false otherwise
*/
activeCategory(category) {
return Template.instance().currentCategory.get() === category ? 'active' : '';
return EmojiPicker.currentCategory.get() === category ? 'active' : '';
},
categoryName,
/**
* Returns currently active emoji category hash
*
* @return {string} category hash
*/
currentCategory() {
const t = Template.instance();
const hash = t.currentCategory.get();
const searchTerm = t.currentSearchTerm.get();
if (searchTerm.length > 0) {
return TAPi18n.__('Search');
}
return categoryName(hash);
return EmojiPicker.currentCategory.get();
},
});
@ -182,17 +135,36 @@ Template.emojiPicker.events({
event.stopPropagation();
event.preventDefault();
},
'click .category-link'(event, instance) {
'click .category-link'(event) {
event.stopPropagation();
event.preventDefault();
instance.$('.emoji-filter .search').val('').change();
instance.$('.emoji-filter .search').focus();
instance.currentCategory.set(event.currentTarget.hash.substr(1));
EmojiPicker.showCategory(event.currentTarget.hash.substr(1));
return false;
},
'scroll .emojis': _.throttle((event, instance) => {
if (EmojiPicker.scrollingToCategory) {
return;
}
const container = instance.$(event.currentTarget);
const scrollTop = container.scrollTop() + 8;
const last = EmojiPicker.getCategoryPositions()
.filter((pos) => pos.top <= scrollTop)
.pop();
if (!last) {
return;
}
const { el } = last;
const category = el.id.replace('emoji-list-category-', '');
EmojiPicker.currentCategory.set(category);
}, 300),
'click .change-tone > a'(event, instance) {
event.stopPropagation();
event.preventDefault();
@ -230,7 +202,7 @@ Template.emojiPicker.events({
$('.tone-selector').toggleClass('show');
},
'click .emoji-list li'(event, instance) {
'click .emoji-list .emoji-picker-item'(event, instance) {
event.stopPropagation();
const _emoji = event.currentTarget.dataset.emoji;
@ -245,7 +217,7 @@ Template.emojiPicker.events({
}
}
const input = $('.emoji-filter input.search');
const input = $('.emoji-picker .js-emojipicker-search');
if (input) {
input.val('');
}
@ -266,10 +238,22 @@ Template.emojiPicker.events({
Template.emojiPicker.onCreated(function() {
this.tone = EmojiPicker.getTone();
const recent = EmojiPicker.getRecent();
this.recentNeedsUpdate = new ReactiveVar(false);
this.currentCategory = new ReactiveVar(recent.length > 0 ? 'recent' : 'people');
this.currentSearchTerm = new ReactiveVar('');
this.categoriesList = [];
for (const emojiPackage in emoji.packages) {
if (emoji.packages.hasOwnProperty(emojiPackage)) {
if (emoji.packages[emojiPackage].emojiCategories) {
if (typeof emoji.packages[emojiPackage].categoryIndex !== 'undefined') {
this.categoriesList.splice(emoji.packages[emojiPackage].categoryIndex, 0, ...emoji.packages[emojiPackage].emojiCategories);
} else {
this.categoriesList = this.categoriesList.concat(emoji.packages[emojiPackage].emojiCategories);
}
}
}
}
recent.forEach((_emoji) => {
emoji.packages.base.emojisByCategory.recent.push(_emoji);
});
@ -280,9 +264,5 @@ Template.emojiPicker.onCreated(function() {
this.tone = newTone;
};
this.autorun(() => {
if (this.recentNeedsUpdate.get()) {
this.recentNeedsUpdate.set(false);
}
});
createPickerEmojis(this);
});

@ -1,12 +1,17 @@
import _ from 'underscore';
import { Blaze } from 'meteor/blaze';
import { Template } from 'meteor/templating';
import _ from 'underscore';
import { ReactiveVar } from 'meteor/reactive-var';
import { Tracker } from 'meteor/tracker';
import { emoji } from '../../lib/rocketchat';
import { updateRecentEmoji } from '../emojiPicker';
let updatePositions = true;
export const EmojiPicker = {
width: 365,
height: 290,
height: 300,
initiated: false,
input: null,
source: null,
@ -14,6 +19,8 @@ export const EmojiPicker = {
tone: null,
opened: false,
pickCallback: null,
scrollingToCategory: false,
currentCategory: new ReactiveVar('recent'),
init() {
if (this.initiated) {
return;
@ -66,7 +73,7 @@ export const EmojiPicker = {
const isLargerThanWindow = this.width + windowBorder > windowWidth;
if (top + this.height >= windowHeight) {
cssProperties.top = windowHeight - this.height - windowBorder;
cssProperties.top = windowHeight - this.height - windowBorder - 75;
}
if (left < windowBorder) {
@ -93,6 +100,13 @@ export const EmojiPicker = {
if (emojiInput) {
emojiInput.focus();
}
this.calculateCategoryPositions();
if (this.recent.length === 0 && this.currentCategory.get() === 'recent') {
this.showCategory(emoji.packages.emojiCustom.list.length > 0 ? 'rocket' : 'people', false);
}
this.opened = true;
},
close() {
@ -114,33 +128,57 @@ export const EmojiPicker = {
this.recent.unshift(_emoji);
updatePositions = true;
window.localStorage.setItem('emoji.recent', this.recent);
emoji.packages.base.emojisByCategory.recent = this.recent;
this.updateRecent();
this.updateRecent('recent');
},
updateRecent(category) {
updateRecentEmoji(category);
},
updateRecent() {
const instance = Template.instance();
if (instance) {
instance.recentNeedsUpdate.set(true);
} else {
this.refreshDynamicEmojiLists();
calculateCategoryPositions() {
if (!updatePositions) {
return;
}
updatePositions = false;
const containerScroll = $('.emoji-picker .emojis').scrollTop();
this.catPositions = Array.from(document.querySelectorAll('.emoji-list-category')).map((el) => {
const { top } = $(el).position();
return {
el,
top: top + containerScroll,
};
});
},
refreshDynamicEmojiLists() {
const dynamicEmojiLists = [
emoji.packages.base.emojisByCategory.recent,
emoji.packages.emojiCustom.emojisByCategory.rocket,
];
dynamicEmojiLists.forEach((category) => {
if (category) {
for (let i = 0; i < category.length; i++) {
const _emoji = category[i];
if (!emoji.list[`:${ _emoji }:`]) {
category = _.without(category, _emoji);
}
}
getCategoryPositions() {
return this.catPositions;
},
showCategory(category, animate = true) {
this.scrollingToCategory = animate;
$('.emoji-picker .js-emojipicker-search')
.val('')
.change()
.focus();
this.currentCategory.set(category);
Tracker.afterFlush(() => {
const header = $(`#emoji-list-category-${ category }`);
const container = $('.emoji-picker .emojis');
const scrollTop = header.position().top + container.scrollTop();// - container.position().top;
if (animate) {
return container.animate({
scrollTop,
}, 300, () => { this.scrollingToCategory = false; });
}
container.scrollTop(scrollTop);
});
},
};

@ -1,13 +1,18 @@
import { emojioneRender } from '../../emoji-emojione/lib/emojioneRender';
export const emoji = {
packages: {
base: {
emojiCategories: { recent: 'Frequently_Used' },
emojiCategories: [{ key: 'recent', i18n: 'Frequently_Used' }],
categoryIndex: 0,
emojisByCategory: {
recent: [],
},
toneList: {},
render(html) {
return html;
render: emojioneRender,
renderPicker(emojiToRender) {
const correctPackage = emoji.list[emojiToRender].emojiPackage;
return emoji.packages[correctPackage].renderPicker(emojiToRender);
},
},
},

@ -47,7 +47,6 @@
&.add-reaction {
visibility: hidden;
margin-left: 10px;
padding: 0 2px;
transition: opacity 0.2s ease;

@ -26,15 +26,23 @@
display: none;
width: 100%;
max-width: 365px;
width: 365px;
max-width: 100%;
height: 300px;
margin-right: 22px;
padding-bottom: 0;
white-space: initial;
opacity: 1;
background-color: rgba(255, 255, 255, 0.98);
&.show {
display: block;
display: flex;
}
& .filter-list {
@ -64,15 +72,18 @@
}
& .emojis {
position: relative;
overflow-y: auto;
height: 160px;
flex: 1;
padding: 3px 0 0 2px;
& .emoji-list {
display: none;
margin: 0.5em 0;
& li {
& li.emoji-picker-item {
display: inline-block;
margin: 2px;
@ -101,6 +112,18 @@
}
}
.emoji-footer {
padding: 0.4rem;
text-align: center;
color: var(--rc-color-primary-light);
font-size: 12px;
font-weight: 500;
}
.emoji-top {
display: flex;

@ -13,7 +13,7 @@ import '../app/dolphin/client/login-button.css';
import '../app/drupal/client/login-button.css';
import '../app/e2e/client/stylesheets/e2e.less';
import '../app/emoji-custom/assets/stylesheets/emojiCustomAdmin.css';
import '../app/emoji-emojione/client/sprites.css';
import '../app/emoji-emojione/client/emojione-sprites.css';
import '../app/github-enterprise/client/github-enterprise-login-button.css';
import '../app/gitlab/client/gitlab-login-button.css';
import '../app/integrations/client/stylesheets/integrations.css';

257
package-lock.json generated

@ -1458,6 +1458,20 @@
"es-abstract": "^1.7.0"
}
},
"array-parallel": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz",
"integrity": "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=",
"dev": true,
"optional": true
},
"array-series": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz",
"integrity": "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=",
"dev": true,
"optional": true
},
"array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@ -3357,6 +3371,18 @@
"resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
"integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU="
},
"bignumber.js": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz",
"integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=",
"dev": true
},
"bin-pack": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.1.tgz",
"integrity": "sha1-VW2jj4ZvKuvlbstF9ChJsISwxm8=",
"dev": true
},
"binary-extensions": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
@ -3489,6 +3515,12 @@
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
"integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
},
"bmp-js": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.1.tgz",
"integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=",
"dev": true
},
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
@ -3985,6 +4017,16 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000913.tgz",
"integrity": "sha512-PP7Ypc35XY1mNduHqweGNOp0qfNUCmaQauGOYDByvirlFjrzRyY72pBRx7jnBidOB8zclg00DAzsy2H475BouQ=="
},
"canvas": {
"version": "1.3.12",
"resolved": "https://registry.npmjs.org/canvas/-/canvas-1.3.12.tgz",
"integrity": "sha1-Dm17eNbJcwzxEp0ROLKNbVJmfpM=",
"dev": true,
"optional": true,
"requires": {
"nan": "^2.1.0"
}
},
"cas": {
"version": "https://github.com/kcbanner/node-cas/tarball/fcd27dad333223b3b75a048bce27973fb3ca0f62",
"integrity": "sha512-CyDs8nQAr4Asy6+H2oai66tomXC/Q6B/GF2zUYNww7jfT+xBvIhkiUGctzAy5bdq7cVxBZv31hWHz7+fxevElA==",
@ -5882,6 +5924,17 @@
"resolved": "https://registry.npmjs.org/emailreplyparser/-/emailreplyparser-0.0.5.tgz",
"integrity": "sha1-BpYswKRCFnWbo7mOOyV3wM4w/Aw="
},
"emojione": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/emojione/-/emojione-4.5.0.tgz",
"integrity": "sha512-Tq55Y3UgPOnayFDN+Qd6QMP0rpoH10a1nhSFN27s8gXW3qymgFIHiXys2ECYYAI134BafmI3qP9ni2rZOe9BjA=="
},
"emojione-assets": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/emojione-assets/-/emojione-assets-4.5.0.tgz",
"integrity": "sha512-S7Fp6M+T4hiK9ULGGGhnVMMVIqMRj+22Bd0+KgOBu+eV85B7AUX39ML3anMXKp/OEBQXDQuH+yCwy3Fl6dpoAQ==",
"dev": true
},
"emojis-list": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
@ -6479,6 +6532,12 @@
"clone-regexp": "^1.0.0"
}
},
"exif-parser": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
"integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=",
"dev": true
},
"exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@ -8096,6 +8155,37 @@
"minimatch": "~3.0.2"
}
},
"gm": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/gm/-/gm-1.22.0.tgz",
"integrity": "sha1-ZwvzaRrprkbK30cBLqEqxAqAJ8I=",
"dev": true,
"optional": true,
"requires": {
"array-parallel": "~0.1.3",
"array-series": "~0.1.5",
"debug": "~2.2.0"
},
"dependencies": {
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"dev": true,
"optional": true,
"requires": {
"ms": "0.7.1"
}
},
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
"dev": true,
"optional": true
}
}
},
"gonzales-pe": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.3.tgz",
@ -10466,6 +10556,48 @@
"integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
"dev": true
},
"jimp": {
"version": "0.2.21",
"resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.21.tgz",
"integrity": "sha1-USKWDNXVvEGWqFNF9mozt9ruTrM=",
"dev": true,
"requires": {
"bignumber.js": "^2.1.0",
"bmp-js": "0.0.1",
"es6-promise": "^3.0.2",
"exif-parser": "^0.1.9",
"file-type": "^3.1.0",
"jpeg-js": "^0.1.1",
"mime": "^1.3.4",
"pixelmatch": "^4.0.0",
"pngjs": "^2.1.0",
"read-chunk": "^1.0.1",
"request": "^2.65.0",
"stream-to-buffer": "^0.1.0",
"tinycolor2": "^1.1.2",
"url-regex": "^3.0.0"
},
"dependencies": {
"es6-promise": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
"integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
"dev": true
},
"file-type": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
"integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
"dev": true
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
}
}
},
"jmespath": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
@ -10482,6 +10614,12 @@
"topo": "1.x.x"
}
},
"jpeg-js": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz",
"integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=",
"dev": true
},
"jquery": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
@ -12660,6 +12798,58 @@
"asn1": "^0.2.4"
}
},
"node-sprite-generator": {
"version": "0.10.2",
"resolved": "https://registry.npmjs.org/node-sprite-generator/-/node-sprite-generator-0.10.2.tgz",
"integrity": "sha1-gE6QILk72N7MoQhVxgn0PeXbf8I=",
"dev": true,
"requires": {
"async": "1.2.0",
"bin-pack": "1.0.1",
"canvas": "1.3.12",
"glob": "5.0.10",
"gm": "1.22.0",
"jimp": "0.2.21",
"mkdirp": "0.5.1",
"underscore": "1.8.3"
},
"dependencies": {
"async": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/async/-/async-1.2.0.tgz",
"integrity": "sha1-kClYD5PQWnyrJPUCyEcHrD71exA=",
"dev": true
},
"glob": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.10.tgz",
"integrity": "sha1-PuNQMZ8x81LO9omaSPa2t4NMaJk=",
"dev": true,
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^2.0.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"minimatch": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
"integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
"dev": true,
"requires": {
"brace-expansion": "^1.0.0"
}
},
"underscore": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
"dev": true
}
}
},
"nodejieba": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/nodejieba/-/nodejieba-2.3.0.tgz",
@ -13462,6 +13652,23 @@
}
}
},
"pixelmatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
"integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=",
"dev": true,
"requires": {
"pngjs": "^3.0.0"
},
"dependencies": {
"pngjs": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
"dev": true
}
}
},
"pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@ -13536,6 +13743,12 @@
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
},
"pngjs": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-2.3.1.tgz",
"integrity": "sha1-EdHhK5y2TWPjDBQ6Mw9MH1Z9qF8=",
"dev": true
},
"pop-iterate": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz",
@ -14501,6 +14714,12 @@
}
}
},
"read-chunk": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz",
"integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=",
"dev": true
},
"read-pkg": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
@ -15867,6 +16086,21 @@
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
},
"stream-to": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz",
"integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=",
"dev": true
},
"stream-to-buffer": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz",
"integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=",
"dev": true,
"requires": {
"stream-to": "~0.2.0"
}
},
"streamsearch": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
@ -16534,6 +16768,12 @@
"nan": "^2.10.0"
}
},
"tinycolor2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
"integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=",
"dev": true
},
"tlds": {
"version": "1.203.1",
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.203.1.tgz",
@ -17142,6 +17382,23 @@
"resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.5.tgz",
"integrity": "sha512-9XjIJ6nwrU+nGd8t90Ze0Zs7t8A+SU0gqsqPttj6j3zAVe5q0HFcuv37nDBdVSPpi4aTHTfbUF/i+ZVD+o2EbA=="
},
"url-regex": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz",
"integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=",
"dev": true,
"requires": {
"ip-regex": "^1.0.1"
},
"dependencies": {
"ip-regex": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
"integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=",
"dev": true
}
}
},
"url-template": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",

@ -101,11 +101,13 @@
"chai": "^3.5.0",
"chai-datetime": "^1.5.0",
"chimp": "^0.51.1",
"emojione-assets": "^4.5.0",
"eslint": "^5.9.0",
"fast-glob": "^2.2.6",
"husky": "^1.2.0",
"mocha": "^5.2.0",
"mock-require": "^3.0.2",
"node-sprite-generator": "^0.10.2",
"mongo-unit": "^1.4.4",
"postcss": "^7.0.6",
"postcss-custom-properties": "^8.0.9",
@ -159,6 +161,7 @@
"cors": "^2.8.4",
"csv-parse": "^4.0.1",
"emailreplyparser": "^0.0.5",
"emojione": "^4.5.0",
"express": "^4.16.4",
"express-session": "^1.15.4",
"fibers": "^3.1.1",

@ -986,6 +986,7 @@
"Email_subject": "Onderwerp",
"Email_verified": "E-pos geverifieer",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji verskaf deur <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Aangepaste Emoji-lêersisteem",
"Empty_title": "Leë titel",
"Enable": "in staat te stel",

@ -986,6 +986,7 @@
"Email_subject": "الموضوع",
"Email_verified": "تم التحقق من البريد الإلكتروني",
"Emoji": "رمز تعبيري (اموجي)",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> رموز تعبيرية مقدمة من",
"EmojiCustomFilesystem": "ملفات الرموز التعبيرية المخصصة",
"Empty_title": "عنوان فارغ",
"Enable": "تمكين",

@ -986,6 +986,7 @@
"Email_subject": "Mövzu",
"Email_verified": "E-poçt təsdiqləndi",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> tərəfindən təmin Emoji",
"EmojiCustomFilesystem": "Xüsusi Emoji Filesystem",
"Empty_title": "Boş adı",
"Enable": "Enable",

@ -1002,6 +1002,7 @@
"Email_subject": "прадмет",
"Email_verified": "Email правяраецца",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji забяспечваецца <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Прыстасаваныя Emoji Filesystem",
"Empty_title": "пустое назву",
"Enable": "Ўключыць",

@ -986,6 +986,7 @@
"Email_subject": "Предмет",
"Email_verified": "Проверена електрона поща",
"Emoji": "емотикони",
"Emoji_provided_by_JoyPixels": "Емотикони, предоставени от <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Персонализирана файлова система Emoji",
"Empty_title": "Празно заглавие",
"Enable": "Активиране",

@ -986,6 +986,7 @@
"Email_subject": "Subjekt",
"Email_verified": "Email provjeren",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji od <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Datotečni sustav Emotikona",
"Empty_title": "Prazan naslov",
"Enable": "Omogući",

@ -986,6 +986,7 @@
"Email_subject": "Assumpte",
"Email_verified": "Adreça de correu-e verificada",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji subministrat per <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Emoticones personalitzades",
"Empty_title": "Títol buit",
"Enable": "Activa",

@ -989,6 +989,7 @@
"Email_subject": "Předmět",
"Email_verified": "Email ověřen",
"Emoji": "Emotikony",
"Emoji_provided_by_JoyPixels": "Emoji poskytuje <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Vlastní filesystem pro emotikony",
"Empty_title": "Prázdný název",
"Enable": "Povolit",

@ -986,6 +986,7 @@
"Email_subject": "Pwnc",
"Email_verified": "E-bost wedi'i wirio",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji a ddarperir gan <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "System Ffeiliau Emoji Custom",
"Empty_title": "Teitl gwag",
"Enable": "Galluogi",

@ -1061,6 +1061,7 @@
"Email_subject": "Emne",
"Email_verified": "Email bekræftet",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji leveret af <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Brugerdefineret emoji-filsystem",
"Empty_title": "Tom titel",
"Enable": "Muliggøre",

@ -1146,6 +1146,7 @@
"email_style_description": "Vermeiden Sie verschachtelte Selektoren",
"Email_verified": "Die E-Mail-Adresse wurde bestätigt.",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji wird von <strong>JoyPixels</strong> bereitgestellt",
"EmojiCustomFilesystem": "Dateisystem für eigene Emojis",
"Empty_title": "Leerer Titel",
"Enable": "Aktivieren",

@ -986,6 +986,7 @@
"Email_subject": "Θέμα",
"Email_verified": "Το email επιβεβαιώθηκε ",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Το Emoji παρέχεται από το <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Σύστημα Αρχείων Προσαρμοσμένων Emoji",
"Empty_title": "Kενός τίτλος",
"Enable": "Ενεργοποίηση",

@ -1152,6 +1152,7 @@
"email_style_description": "Avoid nested selectors",
"Email_verified": "Email verified",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji provided by <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Custom Emoji Filesystem",
"Empty_title": "Empty title",
"Enable": "Enable",
@ -2126,6 +2127,7 @@
"No_channel_with_name_%s_was_found": "No channel with name <strong>\"%s\"</strong> was found!",
"No_channels_yet": "You aren't part of any channel yet",
"No_direct_messages_yet": "No Direct Messages.",
"No_emojis_found": "No emojis found",
"No_Encryption": "No Encryption",
"No_group_with_name_%s_was_found": "No private group with name <strong>\"%s\"</strong> was found!",
"No_groups_yet": "You have no private groups yet.",

@ -986,6 +986,7 @@
"Email_subject": "Subjekto",
"Email_verified": "Retpoŝto kontrolita",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji provizita de <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Propra Emoji Dosiera Sistemo",
"Empty_title": "Malplena titolo",
"Enable": "Ebligu",

@ -999,6 +999,7 @@
"Email_subject": "Asunto",
"Email_verified": "Correo electrónico verificado",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji proporcionado por <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Sistema de Archivos Emoji Personalizado",
"Empty_title": "Titulo Vacío",
"Enable": "Habilitar",

@ -43,6 +43,7 @@
"Appearance": "Välimus",
"Cancel": "Tühista",
"Cancel_message_input": "Tühista",
"Emoji_provided_by_JoyPixels": "Emoji, mida pakub <strong>JoyPixels</strong>",
"How_friendly_was_the_chat_agent": "Kui sõbralik oli sinuga vestelnud agent?",
"How_knowledgeable_was_the_chat_agent": "Kui teadlik oli sinuga vestelnud agent? ",
"How_responsive_was_the_chat_agent": "Kui vastuvõtlik oli sinuga vestelnud agent? ",
@ -62,4 +63,4 @@
"Type_your_message": "Sisestage oma sõnum",
"Type_your_name": "Sisestage oma nimi",
"Upload_file_question": "Faili üles laadima?"
}
}

@ -75,6 +75,7 @@
"Cancel_message_input": "Ezeztatu",
"CAS_enabled": "Gaituta",
"Enabled": "Gaituta",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong>-ek emonitako emozioak",
"How_satisfied_were_you_with_this_chat": "Zein pozik zeuden txat honekin?",
"Installation": "Instalazioa",
"Integrations_Outgoing_Type_FileUploaded": "Fitxategia kargatu da",
@ -92,4 +93,4 @@
"Upload_file_question": "Fitxategia kargatu?",
"We_are_offline_Sorry_for_the_inconvenience": "Lineaz kanpo gaude. Barkatu eragozpenak.",
"Yes": "Bai"
}
}

@ -995,6 +995,7 @@
"Email_subject": "موضوع",
"Email_verified": "ایمیل تایید شد",
"Emoji": "شکلک",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> ارائه شده توسط Emoji",
"EmojiCustomFilesystem": "سیستم فایل Emoji سفارشی",
"Empty_title": "عنوان خالی",
"Enable": "فعال",

@ -986,6 +986,7 @@
"Email_subject": "Aihe",
"Email_verified": "Sähköpostiosoite vahvistettu",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoy tarjoaa <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Custom Emoji Filesystem",
"Empty_title": "Tyhjä otsikko",
"Enable": "Ota käyttöön",

@ -986,7 +986,8 @@
"Email_Placeholder_any": "S'il vous plaît entrer les adresses e-mail ...",
"Email_subject": "Sujet",
"Email_verified": "Adresse e-mail vérifiée",
"Emoji": "Emoticône ",
"Emoji": "Emoticône",
"Emoji_provided_by_JoyPixels": "Emoji fourni par <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Système de fichier d'émoticônes personnalisés",
"Empty_title": "Titre vide",
"Enable": "Activer",

@ -418,6 +418,7 @@
"Email_subject": "נושא",
"Email_verified": "כתובת הדוא״ל אומתה",
"Emoji": "אימוג'י",
"Emoji_provided_by_JoyPixels": "Emoji מסופק על ידי <strong>JoyPixels</strong>",
"Empty_title": "כותרת ריקה",
"Enable": "לאפשר",
"Enable_Desktop_Notifications": "שפעל הודעות עבור שולחן עבודה",
@ -1448,4 +1449,4 @@
"Your_mail_was_sent_to_s": "הדואר שלך נשלח אל %s",
"Your_password_is_wrong": "הסיסמה שלך היא לא בסדר!",
"Your_push_was_sent_to_s_devices": "הודעת ה-push נשלח בהצלחה ל-%s מכשירים"
}
}

@ -1117,6 +1117,7 @@
"email_style_description": "Izbjegavajte ugniježđene selektore",
"Email_verified": "Email provjeren",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji od <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Datotečni sustav Emotikona",
"Empty_title": "Prazan naslov",
"Enable": "Omogući",

@ -1000,6 +1000,7 @@
"Email_subject": "Tárgy",
"Email_verified": "Email hitelesítve",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "A <strong>JoyPixels</strong> által nyújtott emoji",
"EmojiCustomFilesystem": "Egyéni emoji fájlrendszer",
"Empty_title": "üres címet",
"Enable": "Engedélyezze",

@ -986,6 +986,7 @@
"Email_subject": "Subyek",
"Email_verified": "Email terverifikasi",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji disediakan oleh <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Custom Emoji Filesystem",
"Empty_title": "judul kosong",
"Enable": "Memungkinkan",

@ -996,6 +996,7 @@
"Email_subject": "Oggetto",
"Email_verified": "Email verificata",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji fornito da <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Filesystem personalizzato per le Emoji",
"Empty_title": "Titolo vuoto",
"Enable": "Abilita",

@ -1151,6 +1151,7 @@
"email_style_description": "ネストされたセレクタを避ける",
"Email_verified": "メールアドレスは検証済みです",
"Emoji": "絵文字",
"Emoji_provided_by_JoyPixels": "絵文字提供:<strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "カスタム絵文字ファイルシステム",
"Empty_title": "タイトルなし",
"Enable": "有効",

@ -1103,6 +1103,7 @@
"email_style_label": "រចនមអល",
"Email_verified": "អបញ",
"Emoji": "សញរមមណ",
"Emoji_provided_by_JoyPixels": "សញរមមណលផតលយ <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "បរពធឯកសរសញរមមណន",
"Empty_title": "ពនរងទទ",
"Enable": "អនត",

@ -1093,6 +1093,7 @@
"email_style_description": "중첩된 선택 사용 안 함",
"Email_verified": "이메일 확인",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> 에서 제공하는 이모티콘",
"EmojiCustomFilesystem": "사용자 정의 이모티콘 파일 시스템",
"Empty_title": "빈 제목",
"Enable": "사용",

@ -986,6 +986,7 @@
"Email_subject": "Mijar",
"Email_verified": "ئیمەیڵ پشتڕاستکرایەوە",
"Emoji": "emoji",
"Emoji_provided_by_JoyPixels": "Emoji ji aliyê <strong>JoyPixels</strong> ve têne dayîn",
"EmojiCustomFilesystem": "Emoji Filesystem",
"Empty_title": "title vala",
"Enable": "Bikêrkirin",

@ -986,6 +986,7 @@
"Email_subject": "Tema",
"Email_verified": "El. Paštas patvirtintas",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> teikiamos emocijos",
"EmojiCustomFilesystem": "Pasirinktinė Emoji failų sistema",
"Empty_title": "Tuščias pavadinimas",
"Enable": "Įgalinti",

@ -986,6 +986,7 @@
"Email_subject": "Temats",
"Email_verified": "E-pasts ir apstiprināts",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emocijas, ko nodrošina <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Pielāgota Emoji failu sistēma",
"Empty_title": "Tukšs nosaukums",
"Enable": "Iespējot",

@ -986,6 +986,7 @@
"Email_subject": "Гарчиг",
"Email_verified": "Баталгаажуулсан имэйл",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong>-ээр хангасан Emoji",
"EmojiCustomFilesystem": "Custom Emoji файлын систем",
"Empty_title": "Хоосон гарчигтай",
"Enable": "Бататгах",

@ -986,6 +986,7 @@
"Email_subject": "subjek",
"Email_verified": "E-mel disahkan",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji disediakan oleh <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Custom Emoji Filesystem",
"Empty_title": "tajuk kosong",
"Enable": "membolehkan",

@ -1098,6 +1098,7 @@
"Email_subject": "Onderwerp",
"Email_verified": "E-mail geverifiëerd",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji geleverd door <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Aangepast Emoji-bestandssysteem",
"Empty_title": "Lege titel",
"Enable": "Inschakelen",

@ -987,6 +987,7 @@
"Email_subject": "Emne",
"Email_verified": "E-post bekreftet",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji levert av <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Egendefinert Emoji-filsystem",
"Empty_title": "Tom tittel",
"Enable": "Aktiver",

@ -1108,6 +1108,7 @@
"email_style_description": "Unikaj zagnieżdżonych selektorów",
"Email_verified": "E-mail zweryfikowany",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji dostarczane przez <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "System plików własnych emoji",
"Empty_title": "Pusty tytuł",
"Enable": "Włącz",

@ -2096,6 +2096,7 @@
"No_channel_with_name_%s_was_found": "Nenhum canal com nome <strong>\"%s\"</strong> foi encontrado!",
"No_channels_yet": "Você não faz parte de nenhum canal ainda.",
"No_direct_messages_yet": "Você não iniciou nenhuma conversa ainda.",
"No_emojis_found": "Nenhum emoji encontrado",
"No_Encryption": "Sem Criptografia",
"No_group_with_name_%s_was_found": "Nenhum grupo privado com nome <strong>\"%s\"</strong> foi encontrado!",
"No_groups_yet": "Nenhum grupo privado ainda.",

@ -1131,6 +1131,7 @@
"email_style_description": "Evite seletores aninhados",
"Email_verified": "Email verificado",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji fornecido por <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Sistema de arquivos do emoji customizado",
"Empty_title": "Título vazio",
"Enable": "Habilitar",

@ -986,6 +986,7 @@
"Email_subject": "Subiect",
"Email_verified": "Email verificat",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji oferită de <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Sistem de fișiere Emoji personalizat",
"Empty_title": "Titlu gol",
"Enable": "Activează",

@ -1141,6 +1141,7 @@
"email_style_description": "Избегать вложенных селекторов",
"Email_verified": "Адрес электронной почты подтверждён",
"Emoji": "Эмодзи ",
"Emoji_provided_by_JoyPixels": "Emoji предоставлено <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Хранилище пользовательских эмодзи",
"Empty_title": "Пустой заголовок",
"Enable": "Включить",

@ -986,6 +986,7 @@
"Email_subject": "predmet",
"Email_verified": "E-mail bol overený",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji poskytuje <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Vlastný súborový systém Emoji",
"Empty_title": "Prázdny názov",
"Enable": "umožniť",

@ -985,6 +985,7 @@
"Email_subject": "Zadeva",
"Email_verified": "E-poštni naslov potrjen",
"Emoji": "Čustveni simboli",
"Emoji_provided_by_JoyPixels": "Emoji, ki jih ponuja <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Datotečni sistem čustvenih simbolov po meri",
"Empty_title": "Prazen naslov",
"Enable": "Omogoči",

@ -986,6 +986,7 @@
"Email_subject": "Subjekti",
"Email_verified": "Emaili u verifikua",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji i ofruar nga <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Skedari i personalizuar i Emoji",
"Empty_title": "Titulli Empty",
"Enable": "mundësoj",

@ -986,6 +986,7 @@
"Email_subject": "тема",
"Email_verified": "Е-адреса потврђена",
"Emoji": "Емоџији",
"Emoji_provided_by_JoyPixels": "Емоји обезбеђени <strong>ЈоиПикелс-ом</strong>",
"EmojiCustomFilesystem": "Цустом Емоји Филесистем",
"Empty_title": "празан наслов",
"Enable": "омогућити",

@ -1039,6 +1039,7 @@
"Email_subject": "Ämne",
"Email_verified": "E-post verifierad",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji tillhandahållen av <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Anpassat Emoji-filsystem",
"Empty_title": "Tom titel",
"Enable": "Aktivera",

@ -986,6 +986,7 @@
"Email_subject": "ப",
"Email_verified": "மினஞசல சரிகபபடடத",
"Emoji": "ஈமிி",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> ஈமி வழஙியத",
"EmojiCustomFilesystem": "தனிபயன ஈமி",
"Empty_title": "கிக தல",
"Enable": "இயக",

@ -986,6 +986,7 @@
"Email_subject": "เรอง",
"Email_verified": "ยนยนอเมลแลว",
"Emoji": "อโมจ",
"Emoji_provided_by_JoyPixels": "อโมจดทำโดย <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "ระบบแฟม Emoji แบบกำหนดเอง",
"Empty_title": "ชอวางเปลา",
"Enable": "ทำใหสามารถ",

@ -1135,6 +1135,7 @@
"email_style_description": "İç içe seçicileri engelle",
"Email_verified": "E-posta doğrulandı",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "<strong>JoyPixels</strong> tarafından sağlanan Emoji",
"EmojiCustomFilesystem": "Özel Emoji Dosya Sistemi",
"Empty_title": "Boş başlık",
"Enable": "Etkinleştir",

@ -986,6 +986,7 @@
"Email_subject": "суб'єкт",
"Email_verified": "Емейл підтверджено ",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Emoji, надані програмою <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Спеціальна файлова система Emoji",
"Empty_title": "порожній заголовок",
"Enable": "включити",

@ -977,6 +977,7 @@
"Email_subject": "Tiêu đề",
"Email_verified": "Email xác minh",
"Emoji": "Emoji",
"Emoji_provided_by_JoyPixels": "Biểu tượng cảm xúc được cung cấp bởi <strong>JoyPixels</strong>",
"EmojiCustomFilesystem": "Hệ thống tập tin Emoji Tuỳ chỉnh",
"Empty_title": "Tiêu đề trống",
"Enable": "Bật",

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 893 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 KiB

Loading…
Cancel
Save