summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.meteor/.finished-upgraders1
-rw-r--r--.meteor/packages28
-rw-r--r--.meteor/release2
-rw-r--r--.meteor/versions94
-rw-r--r--.travis.yml4
-rw-r--r--CHANGELOG.md13
-rw-r--r--Dockerfile9
-rw-r--r--client/components/activities/activities.styl4
-rw-r--r--client/components/boards/boardsList.js2
-rw-r--r--client/components/cards/attachments.jade4
-rw-r--r--client/components/cards/attachments.js8
-rw-r--r--client/components/cards/cardDetails.jade11
-rw-r--r--client/components/cards/checklists.js4
-rwxr-xr-xclient/components/main/editor.js2
-rw-r--r--client/components/main/header.js1
-rw-r--r--client/components/settings/settingBody.js2
-rw-r--r--client/lib/emoji-values.js302
-rw-r--r--client/lib/modal.js2
-rw-r--r--client/lib/popup.js2
-rw-r--r--models/cards.js36
-rw-r--r--models/invitationCodes.js4
-rw-r--r--package.json14
-rw-r--r--sandstorm.js12
-rw-r--r--server/migrations.js6
-rw-r--r--server/notifications/outgoing.js4
-rw-r--r--snapcraft.yaml14
26 files changed, 302 insertions, 283 deletions
diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders
index a8020370..2a56593d 100644
--- a/.meteor/.finished-upgraders
+++ b/.meteor/.finished-upgraders
@@ -15,3 +15,4 @@ notices-for-facebook-graph-api-2
1.4.0-remove-old-dev-bundle-link
1.4.1-add-shell-server-package
1.4.3-split-account-service-packages
+1.5-add-dynamic-import-package
diff --git a/.meteor/packages b/.meteor/packages
index 7e67c10d..a59da6fb 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -3,13 +3,13 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
-meteor-base@1.0.4
+meteor-base@1.2.0
# Build system
-ecmascript@0.7.2
-stylus@2.513.9
-standard-minifier-css@1.3.4
-standard-minifier-js@2.0.0
+ecmascript@0.9.0
+stylus@2.513.13
+standard-minifier-css@1.3.5
+standard-minifier-js@2.2.0
mquandalle:jade
# Polyfills
@@ -24,11 +24,11 @@ dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
-mongo@1.1.16
+mongo@1.3.0
mquandalle:collection-mutations
# Account system
-accounts-password@1.3.5
+accounts-password@1.5.0
kenton:accounts-sandstorm
service-configuration@1.0.11
useraccounts:unstyled
@@ -38,9 +38,9 @@ useraccounts:flow-routing
check@1.2.5
jquery@1.11.10
random@1.0.10
-reactive-dict@1.1.8
+reactive-dict@1.2.0
session@1.1.7
-tracker@1.1.2
+tracker@1.1.3
underscore@1.0.10
3stack:presence
alethes:pages
@@ -48,7 +48,6 @@ arillo:flow-router-helpers
audit-argument-checks@1.0.7
kadira:blaze-layout
kadira:dochead
-meteorhacks:fast-render
meteorhacks:picker
meteorhacks:subs-manager
mquandalle:autofocus
@@ -56,7 +55,7 @@ mquandalle:moment
ongoworks:speakingurl
raix:handlebar-helpers
tap:i18n
-http
+http@1.3.0
# UI components
blaze
@@ -74,9 +73,12 @@ templates:tabs
verron:autosize
simple:json-routes
rajit:bootstrap3-datepicker
-kadira:flow-router
-shell-server@0.2.3
+shell-server@0.3.0
simple:rest-accounts-password
useraccounts:core
email@1.2.3
horka:swipebox
+dynamic-import
+staringatlights:fast-render
+staringatlights:flow-router
+
diff --git a/.meteor/release b/.meteor/release
index 605b4e1f..0fa8d22d 100644
--- a/.meteor/release
+++ b/.meteor/release
@@ -1 +1 @@
-METEOR@1.4.4.1
+METEOR@1.6
diff --git a/.meteor/versions b/.meteor/versions
index 38ee1e3f..3899d0f8 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -1,23 +1,23 @@
-3stack:presence@1.0.5
-accounts-base@1.2.16
-accounts-password@1.3.5
+3stack:presence@1.1.2
+accounts-base@1.4.0
+accounts-password@1.5.0
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
aldeed:schema-index@1.1.1
aldeed:simple-schema@1.5.3
alethes:pages@1.8.6
-allow-deny@1.0.9
+allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.3.12
-babel-compiler@6.18.2
-babel-runtime@1.0.1
+babel-compiler@6.24.7
+babel-runtime@1.1.1
base64@1.0.10
binary-heap@1.0.10
blaze@2.3.2
blaze-tools@1.0.10
-boilerplate-generator@1.0.11
+boilerplate-generator@1.3.1
caching-compiler@1.1.9
caching-html-compiler@1.1.2
callback-hook@1.0.10
@@ -40,19 +40,23 @@ cfs:upload-http@0.0.20
cfs:worker@0.1.4
check@1.2.5
chuangbo:cookie@1.1.0
-coffeescript@1.12.3_1
-cottz:publish-relations@2.0.7
+coffeescript@1.12.7_3
+coffeescript-compiler@1.12.7_3
+cottz:publish-relations@2.0.8
dburles:collection-helpers@1.1.0
-ddp@1.2.5
-ddp-client@1.3.4
-ddp-common@1.2.8
+ddp@1.4.0
+ddp-client@2.2.0
+ddp-common@1.3.0
ddp-rate-limiter@1.0.7
-ddp-server@1.3.14
+ddp-server@2.1.1
deps@1.0.12
diff-sequence@1.0.7
-ecmascript@0.7.3
-ecmascript-runtime@0.3.15
-ejson@1.0.13
+dynamic-import@0.2.1
+ecmascript@0.9.0
+ecmascript-runtime@0.5.0
+ecmascript-runtime-client@0.5.0
+ecmascript-runtime-server@0.5.0
+ejson@1.1.0
email@1.2.3
es5-shim@4.6.15
fastclick@1.0.13
@@ -62,40 +66,39 @@ horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
-http@1.2.12
+http@1.3.0
id-map@1.0.9
idmontie:migrations@1.0.3
jquery@1.11.10
kadira:blaze-layout@2.3.0
kadira:dochead@1.5.0
kadira:flow-router@2.12.1
-kenton:accounts-sandstorm@0.6.0
+kenton:accounts-sandstorm@0.7.0
launch-screen@1.1.1
livedata@1.0.18
-localstorage@1.0.12
-logging@1.1.17
+localstorage@1.2.0
+logging@1.1.19
matb33:collection-hooks@0.8.4
matteodem:easy-search@1.6.4
mdg:validation-error@0.5.1
-meteor@1.6.1
-meteor-base@1.0.4
+meteor@1.8.2
+meteor-base@1.2.0
meteor-platform@1.2.6
meteorhacks:aggregate@1.3.0
meteorhacks:collection-utils@1.2.0
-meteorhacks:fast-render@2.16.0
-meteorhacks:inject-data@2.0.0
meteorhacks:meteorx@1.4.1
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
minifier-css@1.2.16
-minifier-js@2.0.0
+minifier-js@2.2.2
minifiers@1.1.8-faster-rebuild.0
-minimongo@1.0.21
+minimongo@1.4.3
mobile-status-bar@1.0.14
-modules@0.8.2
-modules-runtime@0.7.10
-mongo@1.1.16
+modules@0.11.0
+modules-runtime@0.9.1
+mongo@1.3.0
+mongo-dev-server@1.1.0
mongo-id@1.0.6
mongo-livedata@1.0.12
mousetrap:mousetrap@1.4.6_1
@@ -108,24 +111,24 @@ mquandalle:jquery-ui-drag-drop-sort@0.2.0
mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
mquandalle:perfect-scrollbar@0.6.5_2
-npm-bcrypt@0.9.2
-npm-mongo@2.2.24
+npm-bcrypt@0.9.3
+npm-mongo@2.2.33
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.0.9
peerlibrary:assert@0.2.5
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
-peerlibrary:computed-field@0.6.1
+peerlibrary:computed-field@0.7.0
peerlibrary:reactive-field@0.3.0
perak:markdown@1.0.5
-promise@0.8.8
+promise@0.10.0
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
-rajit:bootstrap3-datepicker@1.6.4
+rajit:bootstrap3-datepicker@1.7.1
random@1.0.10
rate-limit@1.0.8
-reactive-dict@1.1.8
+reactive-dict@1.2.0
reactive-var@1.0.11
reload@1.1.11
retry@1.0.9
@@ -134,26 +137,29 @@ seriousm:emoji-continued@1.4.0
service-configuration@1.0.11
session@1.1.7
sha@1.0.9
-shell-server@0.2.3
+shell-server@0.3.1
simple:authenticate-user-by-token@1.0.1
simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
-softwarerero:accounts-t9n@1.3.9
+softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
-spacebars-compiler@1.1.2
+spacebars-compiler@1.1.3
srp@1.0.10
-standard-minifier-css@1.3.4
-standard-minifier-js@2.0.0
-stylus@2.513.9
+standard-minifier-css@1.3.5
+standard-minifier-js@2.2.3
+staringatlights:fast-render@2.16.5
+staringatlights:flow-router@2.12.2
+staringatlights:inject-data@2.0.5
+stylus@2.513.13
tap:i18n@1.8.2
templates:tabs@2.3.0
templating@1.3.2
-templating-compiler@1.3.2
+templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
-tracker@1.1.2
+tracker@1.1.3
ui@1.0.13
underscore@1.0.10
url@1.1.0
@@ -161,6 +167,6 @@ useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
-webapp@1.3.15
+webapp@1.4.0
webapp-hashing@1.0.9
zimme:active-route@2.3.2
diff --git a/.travis.yml b/.travis.yml
index bad4d10e..47c1d1a0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,8 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.12.0
- TRAVIS_NODE_VERSION: 4.8.4
- TRAVIS_NPM_VERSION: 4.6.1
+ TRAVIS_NODE_VERSION: 6.12.2
+ TRAVIS_NPM_VERSION: 5.6.0
before_install:
- sudo apt-get update -y
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f6fd8f37..871257ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,14 +4,21 @@ This release adds the following new features:
* [Change password of any user in Standalone Wekan Admin Panel](https://github.com/wekan/wekan/pull/1372);
* [Performance optimization: Move more global subscriptions to template subscription](https://github.com/wekan/wekan/pull/1373);
+* [Auto update card cover with latest uploaded image attachment](https://github.com/wekan/wekan/pull/1387);
+* [Always display attachment section for uploading file quickly](https://github.com/wekan/wekan/pull/1391).
* Update tranlations. Add Latvian language;
-* Update Node to 4.8.6 and MongoDB to 3.2.18.
+* Update to Meteor 1.6.0, Node 6.12.2 and MongoDB 3.2.18.
and fixes the following bugs:
-* [Bug on not being able to see Admin Panel if not having access to Board List](https://github.com/wekan/wekan/pull/1371).
+* [Bug on not being able to see Admin Panel if not having access to Board List](https://github.com/wekan/wekan/pull/1371);
+* [Bug on not able to see member avatar on sidebar activity](https://github.com/wekan/wekan/pull/1380);
+* [Don't open swipebox on update card cover / download file / delete file](https://github.com/wekan/wekan/pull/1386);
+* [Boards subscription should be placed at header for all other component can be used](https://github.com/wekan/wekan/pull/1381);
+* [Bug on long url of attachment in card activity log](https://github.com/wekan/wekan/pull/1388).
-Thanks to GitHub users mfshiu and thuanpq for their contributions. Thanks to translators for their translations.
+Thanks to GitHub users mfshiu, thuanpq and xet7 for their contributions.
+Thanks to translators for their translations.
# v0.60 2017-11-29 Wekan release
diff --git a/Dockerfile b/Dockerfile
index f8027594..f8a39388 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -15,12 +15,12 @@ ARG SRC_PATH
# paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
ENV BUILD_DEPS="wget curl bzip2 build-essential python git ca-certificates gcc-4.9 paxctl"
ENV GOSU_VERSION=1.10
-ENV NODE_VERSION ${NODE_VERSION:-v4.8.6}
-ENV METEOR_RELEASE ${METEOR_RELEASE:-1.4.4.1}
+ENV NODE_VERSION ${NODE_VERSION:-v6.12.2}
+ENV METEOR_RELEASE ${METEOR_RELEASE:-1.6.0}
ENV USE_EDGE ${USE_EDGE:-false}
ENV METEOR_EDGE ${METEOR_EDGE:-1.5-beta.17}
-ENV NPM_VERSION ${NPM_VERSION:-4.6.1}
-ENV FIBERS_VERSION ${FIBERS_VERSION:-1.0.15}
+ENV NPM_VERSION ${NPM_VERSION:-5.6.0}
+ENV FIBERS_VERSION ${FIBERS_VERSION:-2.0.0}
ENV ARCHITECTURE ${ARCHITECTURE:-linux-x64}
ENV SRC_PATH ${SRC_PATH:-./}
@@ -106,7 +106,6 @@ RUN \
mkdir -p /home/wekan/app/packages && \
chown wekan:wekan --recursive /home/wekan && \
cd /home/wekan/app/packages && \
- gosu wekan:wekan git clone --depth 1 -b master git://github.com/wekan/flow-router.git kadira-flow-router && \
gosu wekan:wekan git clone --depth 1 -b master git://github.com/meteor-useraccounts/core.git meteor-useraccounts-core && \
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
diff --git a/client/components/activities/activities.styl b/client/components/activities/activities.styl
index 36efd771..380e7b40 100644
--- a/client/components/activities/activities.styl
+++ b/client/components/activities/activities.styl
@@ -17,10 +17,14 @@
height: @width
.activity-desc
+ word-wrap: break-word
+ overflow: hidden
flex: 1
align-self: center
margin: 0
margin-left: 3px
+ overflow: hidden;
+ word-break: break-word;
.activity-comment
display: block
diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js
index cc4e2f87..1ed88146 100644
--- a/client/components/boards/boardsList.js
+++ b/client/components/boards/boardsList.js
@@ -2,8 +2,6 @@ const subManager = new SubsManager();
BlazeComponent.extendComponent({
onCreated() {
- // Here is the only place that boards data needed, all boards data will stop sync when leaving this template.
- Meteor.subscribe('boards');
Meteor.subscribe('setting');
},
diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade
index c8442691..0f79323b 100644
--- a/client/components/cards/attachments.jade
+++ b/client/components/cards/attachments.jade
@@ -21,8 +21,8 @@ template(name="attachmentDeletePopup")
template(name="attachmentsGalery")
.attachments-galery
each attachments
- a.attachment-item.swipebox(href="{{url}}" title="{{name}}")
- .attachment-thumbnail
+ .attachment-item
+ a.attachment-thumbnail.swipebox(href="{{url}}" title="{{name}}")
if isUploaded
if isImage
img.attachment-thumbnail-img(src="{{url}}")
diff --git a/client/components/cards/attachments.js b/client/components/cards/attachments.js
index 36e8a5ec..b1f88bf1 100644
--- a/client/components/cards/attachments.js
+++ b/client/components/cards/attachments.js
@@ -60,7 +60,13 @@ Template.cardAttachmentsPopup.events({
file.boardId = card.boardId;
file.cardId = card._id;
file.userId = Meteor.userId();
- Attachments.insert(file);
+
+ const attachment = Attachments.insert(file);
+
+ if (attachment && attachment._id && attachment.isImage()) {
+ card.setCover(attachment._id);
+ }
+
Popup.close();
});
},
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 4c68c2f7..0a7a8cd6 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -85,13 +85,12 @@ template(name="cardDetails")
hr
+checklists(cardId = _id)
- if attachments.count
- hr
- h2
- i.fa.fa-paperclip
- | {{_ 'attachments'}}
+ hr
+ h2
+ i.fa.fa-paperclip
+ | {{_ 'attachments'}}
- +attachmentsGalery
+ +attachmentsGalery
hr
.activity-title
diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js
index d3a946f0..5c0e3d2e 100644
--- a/client/components/cards/checklists.js
+++ b/client/components/cards/checklists.js
@@ -181,8 +181,8 @@ BlazeComponent.extendComponent({
Template.checklistDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = { position: $cardDetails.scrollTop(), //save current scroll position
- top: false, //required for smooth scroll animation
- };
+ top: false, //required for smooth scroll animation
+ };
//Callback's purpose is to only prevent scrolling after animation is complete
$cardDetails.animate({ scrollTop: 0 }, 500, () => { this.scrollState.top = true; });
diff --git a/client/components/main/editor.js b/client/components/main/editor.js
index 5987b772..5f384ece 100755
--- a/client/components/main/editor.js
+++ b/client/components/main/editor.js
@@ -6,7 +6,7 @@ Template.editor.onRendered(() => {
$textarea.escapeableTextComplete([
// Emoji
{
- match: /\B:([\-+\w]*)$/,
+ match: /\B:([-+\w]*)$/,
search(term, callback) {
callback(Emoji.values.map((emoji) => {
return emoji.includes(term) ? emoji : null;
diff --git a/client/components/main/header.js b/client/components/main/header.js
index 3155b3d9..7fbc5716 100644
--- a/client/components/main/header.js
+++ b/client/components/main/header.js
@@ -1,4 +1,5 @@
Meteor.subscribe('user-admin');
+Meteor.subscribe('boards');
Template.header.helpers({
wrappedHeader() {
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js
index fabcc70c..8c1ff1c7 100644
--- a/client/components/settings/settingBody.js
+++ b/client/components/settings/settingBody.js
@@ -116,7 +116,7 @@ BlazeComponent.extendComponent({
const from = this.checkField('#mail-server-from');
const tls = $('#mail-server-tls.is-checked').length > 0;
Settings.update(Settings.findOne()._id, {$set:{'mailServer.host':host, 'mailServer.port': port, 'mailServer.username': username,
- 'mailServer.password': password, 'mailServer.enableTLS': tls, 'mailServer.from': from}});
+ 'mailServer.password': password, 'mailServer.enableTLS': tls, 'mailServer.from': from}});
} catch (e) {
return;
} finally {
diff --git a/client/lib/emoji-values.js b/client/lib/emoji-values.js
index 1f07ac62..4debfbc0 100644
--- a/client/lib/emoji-values.js
+++ b/client/lib/emoji-values.js
@@ -1,152 +1,152 @@
Emoji.values = ['+1', '-1', '100', '1234', '8ball', 'a', 'ab', 'abc', 'abcd',
-'accept', 'aerial_tramway', 'airplane', 'alarm_clock', 'alien', 'ambulance',
-'anchor', 'angel', 'anger', 'angry', 'anguished', 'ant', 'apple', 'aquarius',
-'aries', 'arrow_backward', 'arrow_double_down', 'arrow_double_up', 'arrow_down',
-'arrow_down_small', 'arrow_forward', 'arrow_heading_down', 'arrow_heading_up',
-'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right',
-'arrow_right_hook', 'arrow_up', 'arrow_up_down', 'arrow_up_small',
-'arrow_upper_left', 'arrow_upper_right', 'arrows_clockwise',
-'arrows_counterclockwise', 'art', 'articulated_lorry', 'astonished', 'atm', 'b',
-'baby', 'baby_bottle', 'baby_chick', 'baby_symbol', 'baggage_claim', 'balloon',
-'ballot_box_with_check', 'bamboo', 'banana', 'bangbang', 'bank', 'bar_chart',
-'barber', 'baseball', 'basketball', 'bath', 'bathtub', 'battery', 'bear', 'bee',
-'beer', 'beers', 'beetle', 'beginner', 'bell', 'bento', 'bicyclist', 'bike',
-'bikini', 'bird', 'birthday', 'black_circle', 'black_joker', 'black_nib',
-'black_square', 'black_square_button', 'blossom', 'blowfish', 'blue_book',
-'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'bookmark',
-'bookmark_tabs', 'books', 'boom', 'boot', 'bouquet', 'bow', 'bowling', 'bowtie',
-'boy', 'bread', 'bride_with_veil', 'bridge_at_night', 'briefcase',
-'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus',
-'busstop', 'bust_in_silhouette', 'busts_in_silhouette', 'cactus', 'cake',
-'calendar', 'calling', 'camel', 'camera', 'cancer', 'candy', 'capital_abcd',
-'capricorn', 'car', 'card_index', 'carousel_horse', 'cat', 'cat2', 'cd',
-'chart', 'chart_with_downwards_trend', 'chart_with_upwards_trend',
-'checkered_flag', 'cherries', 'cherry_blossom', 'chestnut', 'chicken',
-'children_crossing', 'chocolate_bar', 'christmas_tree', 'church', 'cinema',
-'circus_tent', 'city_sunrise', 'city_sunset', 'cl', 'clap', 'clapper',
-'clipboard', 'clock1', 'clock10', 'clock1030', 'clock11', 'clock1130',
-'clock12', 'clock1230', 'clock130', 'clock2', 'clock230', 'clock3', 'clock330',
-'clock4', 'clock430', 'clock5', 'clock530', 'clock6', 'clock630', 'clock7',
-'clock730', 'clock8', 'clock830', 'clock9', 'clock930', 'closed_book',
-'closed_lock_with_key', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail',
-'coffee', 'cold_sweat', 'collision', 'computer', 'confetti_ball', 'confounded',
-'confused', 'congratulations', 'construction', 'construction_worker',
-'convenience_store', 'cookie', 'cool', 'cop', 'copyright', 'corn', 'couple',
-'couple_with_heart', 'couplekiss', 'cow', 'cow2', 'credit_card', 'crocodile',
-'crossed_flags', 'crown', 'cry', 'crying_cat_face', 'crystal_ball', 'cupid',
-'curly_loop', 'currency_exchange', 'curry', 'custard', 'customs', 'cyclone',
-'dancer', 'dancers', 'dango', 'dart', 'dash', 'date', 'de', 'deciduous_tree',
-'department_store', 'diamond_shape_with_a_dot_inside', 'diamonds',
-'disappointed', 'disappointed_relieved', 'dizzy', 'dizzy_face', 'do_not_litter',
-'dog', 'dog2', 'dollar', 'dolls', 'dolphin', 'donut', 'door', 'doughnut',
-'dragon', 'dragon_face', 'dress', 'dromedary_camel', 'droplet', 'dvd', 'e-mail',
-'ear', 'ear_of_rice', 'earth_africa', 'earth_americas', 'earth_asia', 'egg',
-'eggplant', 'eight', 'eight_pointed_black_star', 'eight_spoked_asterisk',
-'electric_plug', 'elephant', 'email', 'end', 'envelope', 'es', 'euro',
-'european_castle', 'european_post_office', 'evergreen_tree', 'exclamation',
-'expressionless', 'eyeglasses', 'eyes', 'facepunch', 'factory', 'fallen_leaf',
-'family', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel',
-'file_folder', 'finnadie', 'fire', 'fire_engine', 'fireworks',
-'first_quarter_moon', 'first_quarter_moon_with_face', 'fish', 'fish_cake',
-'fishing_pole_and_fish', 'fist', 'five', 'flags', 'flashlight', 'floppy_disk',
-'flower_playing_cards', 'flushed', 'foggy', 'football', 'fork_and_knife',
-'fountain', 'four', 'four_leaf_clover', 'fr', 'free', 'fried_shrimp', 'fries',
-'frog', 'frowning', 'fu', 'fuelpump', 'full_moon', 'full_moon_with_face',
-'game_die', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl',
-'globe_with_meridians', 'goat', 'goberserk', 'godmode', 'golf', 'grapes',
-'green_apple', 'green_book', 'green_heart', 'grey_exclamation', 'grey_question',
-'grimacing', 'grin', 'grinning', 'guardsman', 'guitar', 'gun', 'haircut',
-'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash',
-'hatched_chick', 'hatching_chick', 'headphones', 'hear_no_evil', 'heart',
-'heart_decoration', 'heart_eyes', 'heart_eyes_cat', 'heartbeat', 'heartpulse',
-'hearts', 'heavy_check_mark', 'heavy_division_sign', 'heavy_dollar_sign',
-'heavy_exclamation_mark', 'heavy_minus_sign', 'heavy_multiplication_x',
-'heavy_plus_sign', 'helicopter', 'herb', 'hibiscus', 'high_brightness',
-'high_heel', 'hocho', 'honey_pot', 'honeybee', 'horse', 'horse_racing',
-'hospital', 'hotel', 'hotsprings', 'hourglass', 'hourglass_flowing_sand',
-'house', 'house_with_garden', 'hurtrealbad', 'hushed', 'ice_cream', 'icecream',
-'id', 'ideograph_advantage', 'imp', 'inbox_tray', 'incoming_envelope',
-'information_desk_person', 'information_source', 'innocent', 'interrobang',
-'iphone', 'it', 'izakaya_lantern', 'jack_o_lantern', 'japan', 'japanese_castle',
-'japanese_goblin', 'japanese_ogre', 'jeans', 'joy', 'joy_cat', 'jp', 'key',
-'keycap_ten', 'kimono', 'kiss', 'kissing', 'kissing_cat', 'kissing_closed_eyes',
-'kissing_face', 'kissing_heart', 'kissing_smiling_eyes', 'koala', 'koko', 'kr',
-'large_blue_circle', 'large_blue_diamond', 'large_orange_diamond',
-'last_quarter_moon', 'last_quarter_moon_with_face', 'laughing', 'leaves',
-'ledger', 'left_luggage', 'left_right_arrow', 'leftwards_arrow_with_hook',
-'lemon', 'leo', 'leopard', 'libra', 'light_rail', 'link', 'lips', 'lipstick',
-'lock', 'lock_with_ink_pen', 'lollipop', 'loop', 'loudspeaker', 'love_hotel',
-'love_letter', 'low_brightness', 'm', 'mag', 'mag_right', 'mahjong', 'mailbox',
-'mailbox_closed', 'mailbox_with_mail', 'mailbox_with_no_mail', 'man',
-'man_with_gua_pi_mao', 'man_with_turban', 'mans_shoe', 'maple_leaf', 'mask',
-'massage', 'meat_on_bone', 'mega', 'melon', 'memo', 'mens', 'metal', 'metro',
-'microphone', 'microscope', 'milky_way', 'minibus', 'minidisc',
-'mobile_phone_off', 'money_with_wings', 'moneybag', 'monkey', 'monkey_face',
-'monorail', 'moon', 'mortar_board', 'mount_fuji', 'mountain_bicyclist',
-'mountain_cableway', 'mountain_railway', 'mouse', 'mouse2', 'movie_camera',
-'moyai', 'muscle', 'mushroom', 'musical_keyboard', 'musical_note',
-'musical_score', 'mute', 'nail_care', 'name_badge', 'neckbeard', 'necktie',
-'negative_squared_cross_mark', 'neutral_face', 'new', 'new_moon',
-'new_moon_with_face', 'newspaper', 'ng', 'nine', 'no_bell', 'no_bicycles',
-'no_entry', 'no_entry_sign', 'no_good', 'no_mobile_phones', 'no_mouth',
-'no_pedestrians', 'no_smoking', 'non-potable_water', 'nose', 'notebook',
-'notebook_with_decorative_cover', 'notes', 'nut_and_bolt', 'o', 'o2', 'ocean',
-'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman',
-'older_man', 'older_woman', 'on', 'oncoming_automobile', 'oncoming_bus',
-'oncoming_police_car', 'oncoming_taxi', 'one', 'open_file_folder', 'open_hands',
-'open_mouth', 'ophiuchus', 'orange_book', 'outbox_tray', 'ox', 'page_facing_up',
-'page_with_curl', 'pager', 'palm_tree', 'panda_face', 'paperclip', 'parking',
-'part_alternation_mark', 'partly_sunny', 'passport_control', 'paw_prints',
-'peach', 'pear', 'pencil', 'pencil2', 'penguin', 'pensive', 'performing_arts',
-'persevere', 'person_frowning', 'person_with_blond_hair',
-'person_with_pouting_face', 'phone', 'pig', 'pig2', 'pig_nose', 'pill',
-'pineapple', 'pisces', 'pizza', 'plus1', 'point_down', 'point_left',
-'point_right', 'point_up', 'point_up_2', 'police_car', 'poodle', 'poop',
-'post_office', 'postal_horn', 'postbox', 'potable_water', 'pouch',
-'poultry_leg', 'pound', 'pouting_cat', 'pray', 'princess', 'punch',
-'purple_heart', 'purse', 'pushpin', 'put_litter_in_its_place', 'question',
-'rabbit', 'rabbit2', 'racehorse', 'radio', 'radio_button', 'rage', 'rage1',
-'rage2', 'rage3', 'rage4', 'railway_car', 'rainbow', 'raised_hand',
-'raised_hands', 'raising_hand', 'ram', 'ramen', 'rat', 'recycle', 'red_car',
-'red_circle', 'registered', 'relaxed', 'relieved', 'repeat', 'repeat_one',
-'restroom', 'revolving_hearts', 'rewind', 'ribbon', 'rice', 'rice_ball',
-'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rooster',
-'rose', 'rotating_light', 'round_pushpin', 'rowboat', 'ru', 'rugby_football',
-'runner', 'running', 'running_shirt_with_sash', 'sa', 'sagittarius', 'sailboat',
-'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school',
-'school_satchel', 'scissors', 'scorpius', 'scream', 'scream_cat', 'scroll',
-'seat', 'secret', 'see_no_evil', 'seedling', 'seven', 'shaved_ice', 'sheep',
-'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'shower', 'signal_strength',
-'six', 'six_pointed_star', 'ski', 'skull', 'sleeping', 'sleepy', 'slot_machine',
-'small_blue_diamond', 'small_orange_diamond', 'small_red_triangle',
-'small_red_triangle_down', 'smile', 'smile_cat', 'smiley', 'smiley_cat',
-'smiling_imp', 'smirk', 'smirk_cat', 'smoking', 'snail', 'snake', 'snowboarder',
-'snowflake', 'snowman', 'sob', 'soccer', 'soon', 'sos', 'sound',
-'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles',
-'sparkling_heart', 'speak_no_evil', 'speaker', 'speech_balloon', 'speedboat',
-'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty',
-'steam_locomotive', 'stew', 'straight_ruler', 'strawberry', 'stuck_out_tongue',
-'stuck_out_tongue_closed_eyes', 'stuck_out_tongue_winking_eye', 'sun_with_face',
-'sunflower', 'sunglasses', 'sunny', 'sunrise', 'sunrise_over_mountains',
-'surfer', 'sushi', 'suspect', 'suspension_railway', 'sweat', 'sweat_drops',
-'sweat_smile', 'sweet_potato', 'swimmer', 'symbols', 'syringe', 'tada',
-'tanabata_tree', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone',
-'telephone_receiver', 'telescope', 'tennis', 'tent', 'thought_balloon', 'three',
-'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tiger2', 'tired_face', 'tm',
-'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'tractor',
-'traffic_light', 'train', 'train2', 'tram', 'triangular_flag_on_post',
-'triangular_ruler', 'trident', 'triumph', 'trolleybus', 'trollface', 'trophy',
-'tropical_drink', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip',
-'turtle', 'tv', 'twisted_rightwards_arrows', 'two', 'two_hearts',
-'two_men_holding_hands', 'two_women_holding_hands', 'u5272', 'u5408', 'u55b6',
-'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7981', 'u7a7a', 'uk',
-'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v',
-'vertical_traffic_light', 'vhs', 'vibration_mode', 'video_camera', 'video_game',
-'violin', 'virgo', 'volcano', 'vs', 'walking', 'waning_crescent_moon',
-'waning_gibbous_moon', 'warning', 'watch', 'water_buffalo', 'watermelon',
-'wave', 'wavy_dash', 'waxing_crescent_moon', 'waxing_gibbous_moon', 'wc',
-'weary', 'wedding', 'whale', 'whale2', 'wheelchair', 'white_check_mark',
-'white_circle', 'white_flower', 'white_square', 'white_square_button',
-'wind_chime', 'wine_glass', 'wink', 'wolf', 'woman', 'womans_clothes',
-'womans_hat', 'womens', 'worried', 'wrench', 'x', 'yellow_heart', 'yen', 'yum',
-'zap', 'zero', 'zzz'];
+ 'accept', 'aerial_tramway', 'airplane', 'alarm_clock', 'alien', 'ambulance',
+ 'anchor', 'angel', 'anger', 'angry', 'anguished', 'ant', 'apple', 'aquarius',
+ 'aries', 'arrow_backward', 'arrow_double_down', 'arrow_double_up', 'arrow_down',
+ 'arrow_down_small', 'arrow_forward', 'arrow_heading_down', 'arrow_heading_up',
+ 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right',
+ 'arrow_right_hook', 'arrow_up', 'arrow_up_down', 'arrow_up_small',
+ 'arrow_upper_left', 'arrow_upper_right', 'arrows_clockwise',
+ 'arrows_counterclockwise', 'art', 'articulated_lorry', 'astonished', 'atm', 'b',
+ 'baby', 'baby_bottle', 'baby_chick', 'baby_symbol', 'baggage_claim', 'balloon',
+ 'ballot_box_with_check', 'bamboo', 'banana', 'bangbang', 'bank', 'bar_chart',
+ 'barber', 'baseball', 'basketball', 'bath', 'bathtub', 'battery', 'bear', 'bee',
+ 'beer', 'beers', 'beetle', 'beginner', 'bell', 'bento', 'bicyclist', 'bike',
+ 'bikini', 'bird', 'birthday', 'black_circle', 'black_joker', 'black_nib',
+ 'black_square', 'black_square_button', 'blossom', 'blowfish', 'blue_book',
+ 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'bookmark',
+ 'bookmark_tabs', 'books', 'boom', 'boot', 'bouquet', 'bow', 'bowling', 'bowtie',
+ 'boy', 'bread', 'bride_with_veil', 'bridge_at_night', 'briefcase',
+ 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus',
+ 'busstop', 'bust_in_silhouette', 'busts_in_silhouette', 'cactus', 'cake',
+ 'calendar', 'calling', 'camel', 'camera', 'cancer', 'candy', 'capital_abcd',
+ 'capricorn', 'car', 'card_index', 'carousel_horse', 'cat', 'cat2', 'cd',
+ 'chart', 'chart_with_downwards_trend', 'chart_with_upwards_trend',
+ 'checkered_flag', 'cherries', 'cherry_blossom', 'chestnut', 'chicken',
+ 'children_crossing', 'chocolate_bar', 'christmas_tree', 'church', 'cinema',
+ 'circus_tent', 'city_sunrise', 'city_sunset', 'cl', 'clap', 'clapper',
+ 'clipboard', 'clock1', 'clock10', 'clock1030', 'clock11', 'clock1130',
+ 'clock12', 'clock1230', 'clock130', 'clock2', 'clock230', 'clock3', 'clock330',
+ 'clock4', 'clock430', 'clock5', 'clock530', 'clock6', 'clock630', 'clock7',
+ 'clock730', 'clock8', 'clock830', 'clock9', 'clock930', 'closed_book',
+ 'closed_lock_with_key', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail',
+ 'coffee', 'cold_sweat', 'collision', 'computer', 'confetti_ball', 'confounded',
+ 'confused', 'congratulations', 'construction', 'construction_worker',
+ 'convenience_store', 'cookie', 'cool', 'cop', 'copyright', 'corn', 'couple',
+ 'couple_with_heart', 'couplekiss', 'cow', 'cow2', 'credit_card', 'crocodile',
+ 'crossed_flags', 'crown', 'cry', 'crying_cat_face', 'crystal_ball', 'cupid',
+ 'curly_loop', 'currency_exchange', 'curry', 'custard', 'customs', 'cyclone',
+ 'dancer', 'dancers', 'dango', 'dart', 'dash', 'date', 'de', 'deciduous_tree',
+ 'department_store', 'diamond_shape_with_a_dot_inside', 'diamonds',
+ 'disappointed', 'disappointed_relieved', 'dizzy', 'dizzy_face', 'do_not_litter',
+ 'dog', 'dog2', 'dollar', 'dolls', 'dolphin', 'donut', 'door', 'doughnut',
+ 'dragon', 'dragon_face', 'dress', 'dromedary_camel', 'droplet', 'dvd', 'e-mail',
+ 'ear', 'ear_of_rice', 'earth_africa', 'earth_americas', 'earth_asia', 'egg',
+ 'eggplant', 'eight', 'eight_pointed_black_star', 'eight_spoked_asterisk',
+ 'electric_plug', 'elephant', 'email', 'end', 'envelope', 'es', 'euro',
+ 'european_castle', 'european_post_office', 'evergreen_tree', 'exclamation',
+ 'expressionless', 'eyeglasses', 'eyes', 'facepunch', 'factory', 'fallen_leaf',
+ 'family', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel',
+ 'file_folder', 'finnadie', 'fire', 'fire_engine', 'fireworks',
+ 'first_quarter_moon', 'first_quarter_moon_with_face', 'fish', 'fish_cake',
+ 'fishing_pole_and_fish', 'fist', 'five', 'flags', 'flashlight', 'floppy_disk',
+ 'flower_playing_cards', 'flushed', 'foggy', 'football', 'fork_and_knife',
+ 'fountain', 'four', 'four_leaf_clover', 'fr', 'free', 'fried_shrimp', 'fries',
+ 'frog', 'frowning', 'fu', 'fuelpump', 'full_moon', 'full_moon_with_face',
+ 'game_die', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl',
+ 'globe_with_meridians', 'goat', 'goberserk', 'godmode', 'golf', 'grapes',
+ 'green_apple', 'green_book', 'green_heart', 'grey_exclamation', 'grey_question',
+ 'grimacing', 'grin', 'grinning', 'guardsman', 'guitar', 'gun', 'haircut',
+ 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash',
+ 'hatched_chick', 'hatching_chick', 'headphones', 'hear_no_evil', 'heart',
+ 'heart_decoration', 'heart_eyes', 'heart_eyes_cat', 'heartbeat', 'heartpulse',
+ 'hearts', 'heavy_check_mark', 'heavy_division_sign', 'heavy_dollar_sign',
+ 'heavy_exclamation_mark', 'heavy_minus_sign', 'heavy_multiplication_x',
+ 'heavy_plus_sign', 'helicopter', 'herb', 'hibiscus', 'high_brightness',
+ 'high_heel', 'hocho', 'honey_pot', 'honeybee', 'horse', 'horse_racing',
+ 'hospital', 'hotel', 'hotsprings', 'hourglass', 'hourglass_flowing_sand',
+ 'house', 'house_with_garden', 'hurtrealbad', 'hushed', 'ice_cream', 'icecream',
+ 'id', 'ideograph_advantage', 'imp', 'inbox_tray', 'incoming_envelope',
+ 'information_desk_person', 'information_source', 'innocent', 'interrobang',
+ 'iphone', 'it', 'izakaya_lantern', 'jack_o_lantern', 'japan', 'japanese_castle',
+ 'japanese_goblin', 'japanese_ogre', 'jeans', 'joy', 'joy_cat', 'jp', 'key',
+ 'keycap_ten', 'kimono', 'kiss', 'kissing', 'kissing_cat', 'kissing_closed_eyes',
+ 'kissing_face', 'kissing_heart', 'kissing_smiling_eyes', 'koala', 'koko', 'kr',
+ 'large_blue_circle', 'large_blue_diamond', 'large_orange_diamond',
+ 'last_quarter_moon', 'last_quarter_moon_with_face', 'laughing', 'leaves',
+ 'ledger', 'left_luggage', 'left_right_arrow', 'leftwards_arrow_with_hook',
+ 'lemon', 'leo', 'leopard', 'libra', 'light_rail', 'link', 'lips', 'lipstick',
+ 'lock', 'lock_with_ink_pen', 'lollipop', 'loop', 'loudspeaker', 'love_hotel',
+ 'love_letter', 'low_brightness', 'm', 'mag', 'mag_right', 'mahjong', 'mailbox',
+ 'mailbox_closed', 'mailbox_with_mail', 'mailbox_with_no_mail', 'man',
+ 'man_with_gua_pi_mao', 'man_with_turban', 'mans_shoe', 'maple_leaf', 'mask',
+ 'massage', 'meat_on_bone', 'mega', 'melon', 'memo', 'mens', 'metal', 'metro',
+ 'microphone', 'microscope', 'milky_way', 'minibus', 'minidisc',
+ 'mobile_phone_off', 'money_with_wings', 'moneybag', 'monkey', 'monkey_face',
+ 'monorail', 'moon', 'mortar_board', 'mount_fuji', 'mountain_bicyclist',
+ 'mountain_cableway', 'mountain_railway', 'mouse', 'mouse2', 'movie_camera',
+ 'moyai', 'muscle', 'mushroom', 'musical_keyboard', 'musical_note',
+ 'musical_score', 'mute', 'nail_care', 'name_badge', 'neckbeard', 'necktie',
+ 'negative_squared_cross_mark', 'neutral_face', 'new', 'new_moon',
+ 'new_moon_with_face', 'newspaper', 'ng', 'nine', 'no_bell', 'no_bicycles',
+ 'no_entry', 'no_entry_sign', 'no_good', 'no_mobile_phones', 'no_mouth',
+ 'no_pedestrians', 'no_smoking', 'non-potable_water', 'nose', 'notebook',
+ 'notebook_with_decorative_cover', 'notes', 'nut_and_bolt', 'o', 'o2', 'ocean',
+ 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman',
+ 'older_man', 'older_woman', 'on', 'oncoming_automobile', 'oncoming_bus',
+ 'oncoming_police_car', 'oncoming_taxi', 'one', 'open_file_folder', 'open_hands',
+ 'open_mouth', 'ophiuchus', 'orange_book', 'outbox_tray', 'ox', 'page_facing_up',
+ 'page_with_curl', 'pager', 'palm_tree', 'panda_face', 'paperclip', 'parking',
+ 'part_alternation_mark', 'partly_sunny', 'passport_control', 'paw_prints',
+ 'peach', 'pear', 'pencil', 'pencil2', 'penguin', 'pensive', 'performing_arts',
+ 'persevere', 'person_frowning', 'person_with_blond_hair',
+ 'person_with_pouting_face', 'phone', 'pig', 'pig2', 'pig_nose', 'pill',
+ 'pineapple', 'pisces', 'pizza', 'plus1', 'point_down', 'point_left',
+ 'point_right', 'point_up', 'point_up_2', 'police_car', 'poodle', 'poop',
+ 'post_office', 'postal_horn', 'postbox', 'potable_water', 'pouch',
+ 'poultry_leg', 'pound', 'pouting_cat', 'pray', 'princess', 'punch',
+ 'purple_heart', 'purse', 'pushpin', 'put_litter_in_its_place', 'question',
+ 'rabbit', 'rabbit2', 'racehorse', 'radio', 'radio_button', 'rage', 'rage1',
+ 'rage2', 'rage3', 'rage4', 'railway_car', 'rainbow', 'raised_hand',
+ 'raised_hands', 'raising_hand', 'ram', 'ramen', 'rat', 'recycle', 'red_car',
+ 'red_circle', 'registered', 'relaxed', 'relieved', 'repeat', 'repeat_one',
+ 'restroom', 'revolving_hearts', 'rewind', 'ribbon', 'rice', 'rice_ball',
+ 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rooster',
+ 'rose', 'rotating_light', 'round_pushpin', 'rowboat', 'ru', 'rugby_football',
+ 'runner', 'running', 'running_shirt_with_sash', 'sa', 'sagittarius', 'sailboat',
+ 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school',
+ 'school_satchel', 'scissors', 'scorpius', 'scream', 'scream_cat', 'scroll',
+ 'seat', 'secret', 'see_no_evil', 'seedling', 'seven', 'shaved_ice', 'sheep',
+ 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'shower', 'signal_strength',
+ 'six', 'six_pointed_star', 'ski', 'skull', 'sleeping', 'sleepy', 'slot_machine',
+ 'small_blue_diamond', 'small_orange_diamond', 'small_red_triangle',
+ 'small_red_triangle_down', 'smile', 'smile_cat', 'smiley', 'smiley_cat',
+ 'smiling_imp', 'smirk', 'smirk_cat', 'smoking', 'snail', 'snake', 'snowboarder',
+ 'snowflake', 'snowman', 'sob', 'soccer', 'soon', 'sos', 'sound',
+ 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles',
+ 'sparkling_heart', 'speak_no_evil', 'speaker', 'speech_balloon', 'speedboat',
+ 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty',
+ 'steam_locomotive', 'stew', 'straight_ruler', 'strawberry', 'stuck_out_tongue',
+ 'stuck_out_tongue_closed_eyes', 'stuck_out_tongue_winking_eye', 'sun_with_face',
+ 'sunflower', 'sunglasses', 'sunny', 'sunrise', 'sunrise_over_mountains',
+ 'surfer', 'sushi', 'suspect', 'suspension_railway', 'sweat', 'sweat_drops',
+ 'sweat_smile', 'sweet_potato', 'swimmer', 'symbols', 'syringe', 'tada',
+ 'tanabata_tree', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone',
+ 'telephone_receiver', 'telescope', 'tennis', 'tent', 'thought_balloon', 'three',
+ 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tiger2', 'tired_face', 'tm',
+ 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'tractor',
+ 'traffic_light', 'train', 'train2', 'tram', 'triangular_flag_on_post',
+ 'triangular_ruler', 'trident', 'triumph', 'trolleybus', 'trollface', 'trophy',
+ 'tropical_drink', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip',
+ 'turtle', 'tv', 'twisted_rightwards_arrows', 'two', 'two_hearts',
+ 'two_men_holding_hands', 'two_women_holding_hands', 'u5272', 'u5408', 'u55b6',
+ 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7981', 'u7a7a', 'uk',
+ 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v',
+ 'vertical_traffic_light', 'vhs', 'vibration_mode', 'video_camera', 'video_game',
+ 'violin', 'virgo', 'volcano', 'vs', 'walking', 'waning_crescent_moon',
+ 'waning_gibbous_moon', 'warning', 'watch', 'water_buffalo', 'watermelon',
+ 'wave', 'wavy_dash', 'waxing_crescent_moon', 'waxing_gibbous_moon', 'wc',
+ 'weary', 'wedding', 'whale', 'whale2', 'wheelchair', 'white_check_mark',
+ 'white_circle', 'white_flower', 'white_square', 'white_square_button',
+ 'wind_chime', 'wine_glass', 'wink', 'wolf', 'woman', 'womans_clothes',
+ 'womans_hat', 'womens', 'worried', 'wrench', 'x', 'yellow_heart', 'yen', 'yum',
+ 'zap', 'zero', 'zzz'];
diff --git a/client/lib/modal.js b/client/lib/modal.js
index 1ca8804b..d5350264 100644
--- a/client/lib/modal.js
+++ b/client/lib/modal.js
@@ -31,7 +31,7 @@ window.Modal = new class {
this._currentModal.set({ header, modalName });
this._onCloseGoTo = onCloseGoTo;
}
-};
+}();
Blaze.registerHelper('Modal', Modal);
diff --git a/client/lib/popup.js b/client/lib/popup.js
index d9e29ff1..0a700f82 100644
--- a/client/lib/popup.js
+++ b/client/lib/popup.js
@@ -190,7 +190,7 @@ window.Popup = new class {
return title !== translationKey ? title : defaultTitle;
};
}
-};
+}();
// We close a potential opened popup on any left click on the document, or go
// one step back by pressing escape.
diff --git a/models/cards.js b/models/cards.js
index b62bfea8..8676dfdc 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -18,9 +18,9 @@ Cards.attachSchema(new SimpleSchema({
listId: {
type: String,
},
- // The system could work without this `boardId` information (we could deduce
- // the board identifier from the card), but it would make the system more
- // difficult to manage and less efficient.
+ // The system could work without this `boardId` information (we could deduce
+ // the board identifier from the card), but it would make the system more
+ // difficult to manage and less efficient.
boardId: {
type: String,
},
@@ -146,8 +146,8 @@ Cards.helpers({
cover() {
const cover = Attachments.findOne(this.coverId);
- // if we return a cover before it is fully stored, we will get errors when we try to display it
- // todo XXX we could return a default "upload pending" image in the meantime?
+ // if we return a cover before it is fully stored, we will get errors when we try to display it
+ // todo XXX we could return a default "upload pending" image in the meantime?
return cover && cover.url() && cover;
},
@@ -339,7 +339,7 @@ function cardMembers(userId, doc, fieldNames, modifier) {
if (!_.contains(fieldNames, 'members'))
return;
let memberId;
- // Say hello to the new member
+ // Say hello to the new member
if (modifier.$addToSet && modifier.$addToSet.members) {
memberId = modifier.$addToSet.members;
if (!_.contains(doc.members, memberId)) {
@@ -353,10 +353,10 @@ function cardMembers(userId, doc, fieldNames, modifier) {
}
}
- // Say goodbye to the former member
+ // Say goodbye to the former member
if (modifier.$pull && modifier.$pull.members) {
memberId = modifier.$pull.members;
- // Check that the former member is member of the card
+ // Check that the former member is member of the card
if (_.contains(doc.members, memberId)) {
Activities.insert({
userId,
@@ -396,8 +396,8 @@ function cardRemover(userId, doc) {
if (Meteor.isServer) {
- // Cards are often fetched within a board, so we create an index to make these
- // queries more efficient.
+ // Cards are often fetched within a board, so we create an index to make these
+ // queries more efficient.
Meteor.startup(() => {
Cards._collection._ensureIndex({boardId: 1, createdAt: -1});
});
@@ -406,24 +406,24 @@ if (Meteor.isServer) {
cardCreation(userId, doc);
});
- // New activity for card (un)archivage
+ // New activity for card (un)archivage
Cards.after.update((userId, doc, fieldNames) => {
cardState(userId, doc, fieldNames);
});
- //New activity for card moves
+ //New activity for card moves
Cards.after.update(function (userId, doc, fieldNames) {
const oldListId = this.previous.listId;
cardMove(userId, doc, fieldNames, oldListId);
});
- // Add a new activity if we add or remove a member to the card
+ // Add a new activity if we add or remove a member to the card
Cards.before.update((userId, doc, fieldNames, modifier) => {
cardMembers(userId, doc, fieldNames, modifier);
});
- // Remove all activities associated with a card if we remove the card
- // Remove also card_comments / checklists / attachments
+ // Remove all activities associated with a card if we remove the card
+ // Remove also card_comments / checklists / attachments
Cards.after.remove((userId, doc) => {
cardRemover(userId, doc);
});
@@ -498,12 +498,12 @@ if (Meteor.isServer) {
if (req.body.hasOwnProperty('title')) {
const newTitle = req.body.title;
Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false},
- {$set: {title: newTitle}});
+ {$set: {title: newTitle}});
}
if (req.body.hasOwnProperty('listId')) {
const newParamListId = req.body.listId;
Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false},
- {$set: {listId: newParamListId}});
+ {$set: {listId: newParamListId}});
const card = Cards.findOne({_id: paramCardId} );
cardMove(req.body.authorId, card, {fieldName: 'listId'}, paramListId);
@@ -512,7 +512,7 @@ if (Meteor.isServer) {
if (req.body.hasOwnProperty('description')) {
const newDescription = req.body.description;
Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false},
- {$set: {description: newDescription}});
+ {$set: {description: newDescription}});
}
JsonRoutes.sendResult(res, {
code: 200,
diff --git a/models/invitationCodes.js b/models/invitationCodes.js
index 5761977a..53163f06 100644
--- a/models/invitationCodes.js
+++ b/models/invitationCodes.js
@@ -34,8 +34,8 @@ InvitationCodes.helpers({
});
// InvitationCodes.before.insert((userId, doc) => {
- // doc.createdAt = new Date();
- // doc.authorId = userId;
+// doc.createdAt = new Date();
+// doc.authorId = userId;
// });
if (Meteor.isServer) {
diff --git a/package.json b/package.json
index 46e7d234..0ec6913f 100644
--- a/package.json
+++ b/package.json
@@ -20,15 +20,17 @@
},
"homepage": "https://wekan.github.io",
"devDependencies": {
- "eslint": "^2.0.0"
+ "eslint": "^4.11.0"
},
"dependencies": {
- "babel-runtime": "^6.23.0",
- "bcrypt": "^1.0.2",
+ "babel-runtime": "^6.26.0",
+ "bcrypt": "^1.0.3",
"bson": "^1.0.4",
- "es6-promise": "^4.1.0",
- "meteor-node-stubs": "^0.2.6",
+ "es6-promise": "^4.1.1",
+ "fibers": "^2.0.0",
+ "meteor-node-stubs": "^0.3.2",
"os": "^0.1.1",
- "xss": "^0.3.3"
+ "phantomjs-prebuilt": "^2.1.16",
+ "xss": "^0.3.4"
}
}
diff --git a/sandstorm.js b/sandstorm.js
index 6b7c8172..b6bbdc67 100644
--- a/sandstorm.js
+++ b/sandstorm.js
@@ -22,7 +22,7 @@ const sandstormBoard = {
if (isSandstorm && Meteor.isServer) {
const fs = require('fs');
- const Capnp = require('capnp');
+ const Capnp = require("/node_modules/capnp.js");
const Package = Capnp.importSystem('sandstorm/package.capnp');
const Powerbox = Capnp.importSystem('sandstorm/powerbox.capnp');
const Identity = Capnp.importSystem('sandstorm/identity.capnp');
@@ -73,7 +73,7 @@ if (isSandstorm && Meteor.isServer) {
session.claimRequest(token).then((response) => {
const identity = response.cap.castAs(Identity.Identity);
const promises = [api.getIdentityId(identity), identity.getProfile(),
- httpBridge.saveIdentity(identity)];
+ httpBridge.saveIdentity(identity)];
return Promise.all(promises).then((responses) => {
const identityId = responses[0].id.toString('hex').slice(0, 32);
const profile = responses[1].profile;
@@ -113,9 +113,9 @@ if (isSandstorm && Meteor.isServer) {
const identity = response.identity;
return identity.getProfile().then(() => {
return { identity,
- mentioned: !!user.mentioned,
- subscribed: !!user.subscribed,
- };
+ mentioned: !!user.mentioned,
+ subscribed: !!user.subscribed,
+ };
});
}).catch(() => {
// Ignore identities that fail to restore. Either they were added before we set
@@ -130,7 +130,7 @@ if (isSandstorm && Meteor.isServer) {
return session.activity(event);
}).then(() => done(),
- (e) => done(e));
+ (e) => done(e));
})();
}
diff --git a/server/migrations.js b/server/migrations.js
index 76721623..f828a14c 100644
--- a/server/migrations.js
+++ b/server/migrations.js
@@ -109,9 +109,9 @@ Migrations.add('add-member-isactive-field', () => {
Boards.find({}, {fields: {members: 1}}).forEach((board) => {
const allUsersWithSomeActivity = _.chain(
Activities.find({ boardId: board._id }, { fields:{ userId:1 }}).fetch())
- .pluck('userId')
- .uniq()
- .value();
+ .pluck('userId')
+ .uniq()
+ .value();
const currentUsers = _.pluck(board.members, 'userId');
const formerUsers = _.difference(allUsersWithSomeActivity, currentUsers);
diff --git a/server/notifications/outgoing.js b/server/notifications/outgoing.js
index ed3d8df7..779d41a0 100644
--- a/server/notifications/outgoing.js
+++ b/server/notifications/outgoing.js
@@ -30,8 +30,8 @@ Meteor.methods({
};
[ 'cardId', 'listId', 'oldListId',
- 'boardId', 'comment', 'user',
- 'card', 'commentId',
+ 'boardId', 'comment', 'user',
+ 'card', 'commentId',
].forEach((key) => {
if (params[key]) value[key] = params[key];
});
diff --git a/snapcraft.yaml b/snapcraft.yaml
index e4466544..e574be1f 100644
--- a/snapcraft.yaml
+++ b/snapcraft.yaml
@@ -70,12 +70,12 @@ parts:
wekan:
source: .
plugin: nodejs
- node-engine: 4.8.4
+ node-engine: 6.12.2
node-packages:
- - npm@4.6.1
+ - npm@5.6.0
- node-gyp
- node-pre-gyp
- - fibers@1.0.15
+ - fibers@2.0.0
build-packages:
- python
- g++
@@ -88,16 +88,10 @@ parts:
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
echo "installing meteor first"
curl https://install.meteor.com/ -o install_meteor.sh
- sed -i "s|RELEASE=.*|RELEASE=\"1.4.4.1\"|g" install_meteor.sh
+ sed -i "s|RELEASE=.*|RELEASE=\"1.6\"|g" install_meteor.sh
chmod +x install_meteor.sh
sh install_meteor.sh
rm install_meteor.sh
- mkdir packages
- cd packages
- git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
- git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
- sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/.meteor/packages/meteor-useraccounts-core/package.js
- cd ..
build: |
rm -rf package-lock.json .build
meteor add standard-minifier-js --allow-superuser