diff --git a/composer.lock b/composer.lock index c5ef682..b5616ea 100644 --- a/composer.lock +++ b/composer.lock @@ -1,23 +1,23 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "cc98799ce9bc12d4405acb67e867d8b7", "packages": [ { "name": "craue/formflow-bundle", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/craue/CraueFormFlowBundle.git", - "reference": "8b0d069c617c2ad1a2ed4746e346b6401acb496e" + "reference": "0b2dcc18d16eac54e0a4df7a1bbd3e811b23939c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craue/CraueFormFlowBundle/zipball/8b0d069c617c2ad1a2ed4746e346b6401acb496e", - "reference": "8b0d069c617c2ad1a2ed4746e346b6401acb496e", + "url": "https://api.github.com/repos/craue/CraueFormFlowBundle/zipball/0b2dcc18d16eac54e0a4df7a1bbd3e811b23939c", + "reference": "0b2dcc18d16eac54e0a4df7a1bbd3e811b23939c", "shasum": "" }, "require": { @@ -77,24 +77,25 @@ "symfony", "wizard" ], - "time": "2019-12-03T08:29:19+00:00" + "time": "2020-03-08T10:38:02+00:00" }, { "name": "doctrine/annotations", - "version": "v1.8.0", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + "reference": "b9d758e831c70751155c698c2f7df4665314a1cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/b9d758e831c70751155c698c2f7df4665314a1cb", + "reference": "b9d758e831c70751155c698c2f7df4665314a1cb", "shasum": "" }, "require": { "doctrine/lexer": "1.*", + "ext-tokenizer": "*", "php": "^7.1" }, "require-dev": { @@ -104,7 +105,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.9.x-dev" } }, "autoload": { @@ -145,7 +146,7 @@ "docblock", "parser" ], - "time": "2019-10-01T18:55:10+00:00" + "time": "2020-04-20T09:18:32+00:00" }, { "name": "doctrine/collections", @@ -281,16 +282,16 @@ }, { "name": "friendsofsymfony/jsrouting-bundle", - "version": "2.5.1", + "version": "2.5.4", "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSJsRoutingBundle.git", - "reference": "81cf14bf3db5e6fe3ef0442fc762891422005d3b" + "reference": "7dfd2165c1170a73e5929e70fb80ef57f5539869" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSJsRoutingBundle/zipball/81cf14bf3db5e6fe3ef0442fc762891422005d3b", - "reference": "81cf14bf3db5e6fe3ef0442fc762891422005d3b", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSJsRoutingBundle/zipball/7dfd2165c1170a73e5929e70fb80ef57f5539869", + "reference": "7dfd2165c1170a73e5929e70fb80ef57f5539869", "shasum": "" }, "require": { @@ -339,7 +340,7 @@ "javascript", "routing" ], - "time": "2019-12-02T08:01:22+00:00" + "time": "2020-04-15T09:21:31+00:00" }, { "name": "psr/cache", @@ -438,16 +439,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -481,20 +482,20 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { "name": "sensio/framework-extra-bundle", - "version": "v5.5.2", + "version": "v5.5.3", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "92acfcc610e2180c52790ec3ff2e893f67e76b32" + "reference": "98f0807137b13d0acfdf3c255a731516e97015de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/92acfcc610e2180c52790ec3ff2e893f67e76b32", - "reference": "92acfcc610e2180c52790ec3ff2e893f67e76b32", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/98f0807137b13d0acfdf3c255a731516e97015de", + "reference": "98f0807137b13d0acfdf3c255a731516e97015de", "shasum": "" }, "require": { @@ -559,20 +560,20 @@ "annotations", "controllers" ], - "time": "2019-12-12T16:21:49+00:00" + "time": "2019-12-27T08:57:19+00:00" }, { "name": "symfony/asset", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "3f97e57596884f7b9158d564a533112a0d19dbdd" + "reference": "5bdbd8878b69e3be16d036890ea3081172ea28c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/3f97e57596884f7b9158d564a533112a0d19dbdd", - "reference": "3f97e57596884f7b9158d564a533112a0d19dbdd", + "url": "https://api.github.com/repos/symfony/asset/zipball/5bdbd8878b69e3be16d036890ea3081172ea28c5", + "reference": "5bdbd8878b69e3be16d036890ea3081172ea28c5", "shasum": "" }, "require": { @@ -615,20 +616,20 @@ ], "description": "Symfony Asset Component", "homepage": "https://symfony.com", - "time": "2019-08-03T21:50:52+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/cache", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "2a7bcc592adcaab9efc165bbced5a91fe905fad4" + "reference": "8794ccf68ac341fc19311919d2287f7557bfccba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/2a7bcc592adcaab9efc165bbced5a91fe905fad4", - "reference": "2a7bcc592adcaab9efc165bbced5a91fe905fad4", + "url": "https://api.github.com/repos/symfony/cache/zipball/8794ccf68ac341fc19311919d2287f7557bfccba", + "reference": "8794ccf68ac341fc19311919d2287f7557bfccba", "shasum": "" }, "require": { @@ -693,7 +694,7 @@ "caching", "psr6" ], - "time": "2019-12-01T10:50:31+00:00" + "time": "2020-01-27T09:15:09+00:00" }, { "name": "symfony/cache-contracts", @@ -755,16 +756,16 @@ }, { "name": "symfony/config", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9822766942cc233363ba573675f0b3d7283b0bc6" + "reference": "7b7d5d35a5ba5a62f2c6c69f574e36595e587d11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9822766942cc233363ba573675f0b3d7283b0bc6", - "reference": "9822766942cc233363ba573675f0b3d7283b0bc6", + "url": "https://api.github.com/repos/symfony/config/zipball/7b7d5d35a5ba5a62f2c6c69f574e36595e587d11", + "reference": "7b7d5d35a5ba5a62f2c6c69f574e36595e587d11", "shasum": "" }, "require": { @@ -815,20 +816,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:50:31+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/console", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "92e3577f4310553c83e362db25cc73f9673217de" + "reference": "82aeab8f852a63e83d781617841237944392cd45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/92e3577f4310553c83e362db25cc73f9673217de", - "reference": "92e3577f4310553c83e362db25cc73f9673217de", + "url": "https://api.github.com/repos/symfony/console/zipball/82aeab8f852a63e83d781617841237944392cd45", + "reference": "82aeab8f852a63e83d781617841237944392cd45", "shasum": "" }, "require": { @@ -890,20 +891,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:04:59+00:00" + "time": "2020-01-25T12:32:28+00:00" }, { "name": "symfony/debug", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "7793eea884aae3f1ba339ed8990b65d67c0b4075" + "reference": "8e362996356f2555d493ee3d8285424853955e8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/7793eea884aae3f1ba339ed8990b65d67c0b4075", - "reference": "7793eea884aae3f1ba339ed8990b65d67c0b4075", + "url": "https://api.github.com/repos/symfony/debug/zipball/8e362996356f2555d493ee3d8285424853955e8f", + "reference": "8e362996356f2555d493ee3d8285424853955e8f", "shasum": "" }, "require": { @@ -946,20 +947,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-11-28T10:55:21+00:00" + "time": "2020-01-25T12:32:28+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "27d8bf5aebc3d4c7bfa95e23025ecdfb3637a27d" + "reference": "468bfb60a60b7caa03e4722c43f5359df47b4349" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/27d8bf5aebc3d4c7bfa95e23025ecdfb3637a27d", - "reference": "27d8bf5aebc3d4c7bfa95e23025ecdfb3637a27d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/468bfb60a60b7caa03e4722c43f5359df47b4349", + "reference": "468bfb60a60b7caa03e4722c43f5359df47b4349", "shasum": "" }, "require": { @@ -1019,20 +1020,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-12-01T08:34:52+00:00" + "time": "2020-01-14T16:43:06+00:00" }, { "name": "symfony/dotenv", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "62d93bf07edd0d76f033d65a7fd1c1ce50d28b50" + "reference": "3e41dc2a3c517819b23cb4d1c95f5116182a8dd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/62d93bf07edd0d76f033d65a7fd1c1ce50d28b50", - "reference": "62d93bf07edd0d76f033d65a7fd1c1ce50d28b50", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/3e41dc2a3c517819b23cb4d1c95f5116182a8dd0", + "reference": "3e41dc2a3c517819b23cb4d1c95f5116182a8dd0", "shasum": "" }, "require": { @@ -1076,20 +1077,20 @@ "env", "environment" ], - "time": "2019-10-18T11:23:15+00:00" + "time": "2020-01-08T17:19:22+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87a1ae7480f2020818013605a65776b9033bcc4f" + "reference": "75f99d7489409207d09c6cd75a6c773ccbb516d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87a1ae7480f2020818013605a65776b9033bcc4f", - "reference": "87a1ae7480f2020818013605a65776b9033bcc4f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/75f99d7489409207d09c6cd75a6c773ccbb516d5", + "reference": "75f99d7489409207d09c6cd75a6c773ccbb516d5", "shasum": "" }, "require": { @@ -1146,7 +1147,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:25:45+00:00" + "time": "2020-01-09T13:17:05+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1208,16 +1209,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "33301491743c72740069fd61ee0b9e6b24b0fb97" + "reference": "fdc0ac5e64f7555818411a17993bb24be4270769" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/33301491743c72740069fd61ee0b9e6b24b0fb97", - "reference": "33301491743c72740069fd61ee0b9e6b24b0fb97", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fdc0ac5e64f7555818411a17993bb24be4270769", + "reference": "fdc0ac5e64f7555818411a17993bb24be4270769", "shasum": "" }, "require": { @@ -1254,20 +1255,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-11-26T03:44:44+00:00" + "time": "2020-01-21T08:20:29+00:00" }, { "name": "symfony/finder", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "3d72a13a7edcffecc73151821eb75c57e9214e00" + "reference": "8174c13b932c71f10cdd8dfcd8f5e494f1e7003d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3d72a13a7edcffecc73151821eb75c57e9214e00", - "reference": "3d72a13a7edcffecc73151821eb75c57e9214e00", + "url": "https://api.github.com/repos/symfony/finder/zipball/8174c13b932c71f10cdd8dfcd8f5e494f1e7003d", + "reference": "8174c13b932c71f10cdd8dfcd8f5e494f1e7003d", "shasum": "" }, "require": { @@ -1303,20 +1304,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-11-17T21:56:13+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/flex", - "version": "v1.6.0", + "version": "v1.6.2", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "952f45d1c5077e658cb16a61d11603bee873f968" + "reference": "e4f5a2653ca503782a31486198bd1dd1c9a47f83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/952f45d1c5077e658cb16a61d11603bee873f968", - "reference": "952f45d1c5077e658cb16a61d11603bee873f968", + "url": "https://api.github.com/repos/symfony/flex/zipball/e4f5a2653ca503782a31486198bd1dd1c9a47f83", + "reference": "e4f5a2653ca503782a31486198bd1dd1c9a47f83", "shasum": "" }, "require": { @@ -1352,20 +1353,20 @@ } ], "description": "Composer plugin for Symfony", - "time": "2019-12-13T18:05:11+00:00" + "time": "2020-01-30T12:06:45+00:00" }, { "name": "symfony/form", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "4fc2f047c99c87e572a5232ead88ca192bb2df23" + "reference": "05fac4992a100642806a50cc0c84fb4a8a326c14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/4fc2f047c99c87e572a5232ead88ca192bb2df23", - "reference": "4fc2f047c99c87e572a5232ead88ca192bb2df23", + "url": "https://api.github.com/repos/symfony/form/zipball/05fac4992a100642806a50cc0c84fb4a8a326c14", + "reference": "05fac4992a100642806a50cc0c84fb4a8a326c14", "shasum": "" }, "require": { @@ -1436,20 +1437,20 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2019-12-01T08:39:44+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/framework-bundle", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "39fa21a555c5b451222b37d59925f5d4704ba0c0" + "reference": "4ea8f63e005af800e140c1bcfb1f748a006defd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/39fa21a555c5b451222b37d59925f5d4704ba0c0", - "reference": "39fa21a555c5b451222b37d59925f5d4704ba0c0", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/4ea8f63e005af800e140c1bcfb1f748a006defd1", + "reference": "4ea8f63e005af800e140c1bcfb1f748a006defd1", "shasum": "" }, "require": { @@ -1467,6 +1468,7 @@ "symfony/routing": "^4.3" }, "conflict": { + "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.0", "phpdocumentor/type-resolver": "<0.2.1", "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", @@ -1559,20 +1561,20 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "time": "2019-11-28T11:39:15+00:00" + "time": "2020-01-14T14:28:35+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "fcafc7c53784919e4bbcb6d5df73cabbb5c39e76" + "reference": "90af881cedc857dca17990cae96f37727b8ae1d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fcafc7c53784919e4bbcb6d5df73cabbb5c39e76", - "reference": "fcafc7c53784919e4bbcb6d5df73cabbb5c39e76", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/90af881cedc857dca17990cae96f37727b8ae1d6", + "reference": "90af881cedc857dca17990cae96f37727b8ae1d6", "shasum": "" }, "require": { @@ -1614,20 +1616,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:29:27+00:00" + "time": "2020-01-31T09:10:37+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3feb99b01560f94173d8fbc5a203ea497d01d499" + "reference": "fcd8fe5b98d435da856b310a01a4f281668607c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3feb99b01560f94173d8fbc5a203ea497d01d499", - "reference": "3feb99b01560f94173d8fbc5a203ea497d01d499", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fcd8fe5b98d435da856b310a01a4f281668607c0", + "reference": "fcd8fe5b98d435da856b310a01a4f281668607c0", "shasum": "" }, "require": { @@ -1706,20 +1708,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-12-01T14:00:23+00:00" + "time": "2020-01-31T12:38:38+00:00" }, { "name": "symfony/inflector", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "f97c69c132c08e31d291689d2d77bb0878094acb" + "reference": "8c699257379098d26fa400edad29f703b380efcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/f97c69c132c08e31d291689d2d77bb0878094acb", - "reference": "f97c69c132c08e31d291689d2d77bb0878094acb", + "url": "https://api.github.com/repos/symfony/inflector/zipball/8c699257379098d26fa400edad29f703b380efcf", + "reference": "8c699257379098d26fa400edad29f703b380efcf", "shasum": "" }, "require": { @@ -1764,20 +1766,20 @@ "symfony", "words" ], - "time": "2019-11-05T19:58:22+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/intl", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "7d3fdbfa69f80e27140654d975acd4a52000e8be" + "reference": "2d139d02ddae582c382d30cccd2ee4c814043518" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/7d3fdbfa69f80e27140654d975acd4a52000e8be", - "reference": "7d3fdbfa69f80e27140654d975acd4a52000e8be", + "url": "https://api.github.com/repos/symfony/intl/zipball/2d139d02ddae582c382d30cccd2ee4c814043518", + "reference": "2d139d02ddae582c382d30cccd2ee4c814043518", "shasum": "" }, "require": { @@ -1839,20 +1841,20 @@ "l10n", "localization" ], - "time": "2019-11-25T16:40:38+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/mime", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "22aecf6b11638ef378fab25d6c5a2da8a31a1448" + "reference": "50f65ca2a6c33702728024d33e4b9461f67623c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/22aecf6b11638ef378fab25d6c5a2da8a31a1448", - "reference": "22aecf6b11638ef378fab25d6c5a2da8a31a1448", + "url": "https://api.github.com/repos/symfony/mime/zipball/50f65ca2a6c33702728024d33e4b9461f67623c4", + "reference": "50f65ca2a6c33702728024d33e4b9461f67623c4", "shasum": "" }, "require": { @@ -1898,20 +1900,20 @@ "mime", "mime-type" ], - "time": "2019-11-12T13:10:02+00:00" + "time": "2020-01-01T11:51:43+00:00" }, { "name": "symfony/options-resolver", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "f46c7fc8e207bd8a2188f54f8738f232533765a4" + "reference": "3438c6fe65a9794b0e9f3686d0e3771412a2c47a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f46c7fc8e207bd8a2188f54f8738f232533765a4", - "reference": "f46c7fc8e207bd8a2188f54f8738f232533765a4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3438c6fe65a9794b0e9f3686d0e3771412a2c47a", + "reference": "3438c6fe65a9794b0e9f3686d0e3771412a2c47a", "shasum": "" }, "require": { @@ -1952,20 +1954,20 @@ "configuration", "options" ], - "time": "2019-10-28T20:59:01+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b" + "reference": "9c281272735eb66476e0fa7381e03fb0d4b60197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b", - "reference": "b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/9c281272735eb66476e0fa7381e03fb0d4b60197", + "reference": "9c281272735eb66476e0fa7381e03fb0d4b60197", "shasum": "" }, "require": { @@ -1978,7 +1980,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2010,26 +2012,40 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46" + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6f9c239e61e1b0c9229a28ff89a812dc449c3d46", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "symfony/polyfill-php72": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -2037,7 +2053,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2072,20 +2088,34 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", "shasum": "" }, "require": { @@ -2097,7 +2127,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2131,20 +2161,34 @@ "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038" + "reference": "37b0976c78b94856543260ce09b460a7bc852747" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/66fea50f6cb37a35eea048d75a7d99a45b586038", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", + "reference": "37b0976c78b94856543260ce09b460a7bc852747", "shasum": "" }, "require": { @@ -2153,7 +2197,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2186,20 +2230,34 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f" + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", "shasum": "" }, "require": { @@ -2208,7 +2266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2244,20 +2302,34 @@ "portable", "shim" ], - "time": "2019-11-27T16:25:15+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/property-access", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "2abd699fca214838afdd151fd2a2f8a8b07a738a" + "reference": "28ecead27bd17937b3f904396b026a8e3915d0cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/2abd699fca214838afdd151fd2a2f8a8b07a738a", - "reference": "2abd699fca214838afdd151fd2a2f8a8b07a738a", + "url": "https://api.github.com/repos/symfony/property-access/zipball/28ecead27bd17937b3f904396b026a8e3915d0cd", + "reference": "28ecead27bd17937b3f904396b026a8e3915d0cd", "shasum": "" }, "require": { @@ -2311,20 +2383,20 @@ "property path", "reflection" ], - "time": "2019-12-01T10:50:31+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/routing", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a252cd9441a00e71b52a28838cbd14115795a725" + "reference": "6cc4b6a92e3c623b2c7e56180728839b0caf8564" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a252cd9441a00e71b52a28838cbd14115795a725", - "reference": "a252cd9441a00e71b52a28838cbd14115795a725", + "url": "https://api.github.com/repos/symfony/routing/zipball/6cc4b6a92e3c623b2c7e56180728839b0caf8564", + "reference": "6cc4b6a92e3c623b2c7e56180728839b0caf8564", "shasum": "" }, "require": { @@ -2387,20 +2459,20 @@ "uri", "url" ], - "time": "2019-12-01T08:34:52+00:00" + "time": "2020-01-08T14:00:15+00:00" }, { "name": "symfony/security-bundle", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "8d157b5a96c2d7561e29eca3574344727482d3fb" + "reference": "1cc02bd8e44eef0bd4ecfd53a8b4d7b26f675d85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/8d157b5a96c2d7561e29eca3574344727482d3fb", - "reference": "8d157b5a96c2d7561e29eca3574344727482d3fb", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/1cc02bd8e44eef0bd4ecfd53a8b4d7b26f675d85", + "reference": "1cc02bd8e44eef0bd4ecfd53a8b4d7b26f675d85", "shasum": "" }, "require": { @@ -2412,7 +2484,7 @@ "symfony/security-core": "~4.3", "symfony/security-csrf": "~4.2", "symfony/security-guard": "~4.2", - "symfony/security-http": "~4.3.9|^4.4.1" + "symfony/security-http": "~4.3.10|^4.4.3" }, "conflict": { "symfony/browser-kit": "<4.2", @@ -2471,20 +2543,20 @@ ], "description": "Symfony SecurityBundle", "homepage": "https://symfony.com", - "time": "2019-11-30T13:16:45+00:00" + "time": "2020-01-08T17:19:22+00:00" }, { "name": "symfony/security-core", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "8c46ea77fe0738f2495eacc08fa34e1e19ff0b0d" + "reference": "8d008438e4bbdf04086d1048d51cc1b5dfac2046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/8c46ea77fe0738f2495eacc08fa34e1e19ff0b0d", - "reference": "8c46ea77fe0738f2495eacc08fa34e1e19ff0b0d", + "url": "https://api.github.com/repos/symfony/security-core/zipball/8d008438e4bbdf04086d1048d51cc1b5dfac2046", + "reference": "8d008438e4bbdf04086d1048d51cc1b5dfac2046", "shasum": "" }, "require": { @@ -2543,20 +2615,20 @@ ], "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", - "time": "2019-10-28T17:07:32+00:00" + "time": "2020-01-31T09:10:37+00:00" }, { "name": "symfony/security-csrf", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "0760ec651ea8ff81e22097780337e43f3a795769" + "reference": "9e435026ab45f073880d1fbe0e1b17e7df6bf642" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/0760ec651ea8ff81e22097780337e43f3a795769", - "reference": "0760ec651ea8ff81e22097780337e43f3a795769", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/9e435026ab45f073880d1fbe0e1b17e7df6bf642", + "reference": "9e435026ab45f073880d1fbe0e1b17e7df6bf642", "shasum": "" }, "require": { @@ -2602,20 +2674,20 @@ ], "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", - "time": "2019-09-24T15:54:14+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/security-guard", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/security-guard.git", - "reference": "62cc82a384f2c1c75c58189fcf713032f6fef1e9" + "reference": "5d87ee4ffa5aa6e594008fa3cc65bc8f86ad6438" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/62cc82a384f2c1c75c58189fcf713032f6fef1e9", - "reference": "62cc82a384f2c1c75c58189fcf713032f6fef1e9", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/5d87ee4ffa5aa6e594008fa3cc65bc8f86ad6438", + "reference": "5d87ee4ffa5aa6e594008fa3cc65bc8f86ad6438", "shasum": "" }, "require": { @@ -2656,20 +2728,20 @@ ], "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", - "time": "2019-10-28T17:07:32+00:00" + "time": "2020-01-04T18:57:41+00:00" }, { "name": "symfony/security-http", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "75e96df3a1b9b38c67e2fa208894f72dae5e1147" + "reference": "2b4b8632956c680400006376fad0a4f9889d4be1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/75e96df3a1b9b38c67e2fa208894f72dae5e1147", - "reference": "75e96df3a1b9b38c67e2fa208894f72dae5e1147", + "url": "https://api.github.com/repos/symfony/security-http/zipball/2b4b8632956c680400006376fad0a4f9889d4be1", + "reference": "2b4b8632956c680400006376fad0a4f9889d4be1", "shasum": "" }, "require": { @@ -2721,20 +2793,20 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "time": "2019-11-30T13:16:45+00:00" + "time": "2020-01-31T09:10:37+00:00" }, { "name": "symfony/serializer", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "12ce178feef47bed8316cc48e68892f9a34c0794" + "reference": "cd4f545209e1f3d408b5adda729c59bfd714a1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/12ce178feef47bed8316cc48e68892f9a34c0794", - "reference": "12ce178feef47bed8316cc48e68892f9a34c0794", + "url": "https://api.github.com/repos/symfony/serializer/zipball/cd4f545209e1f3d408b5adda729c59bfd714a1a5", + "reference": "cd4f545209e1f3d408b5adda729c59bfd714a1a5", "shasum": "" }, "require": { @@ -2801,7 +2873,7 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2019-11-28T11:29:50+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/service-contracts", @@ -2863,16 +2935,16 @@ }, { "name": "symfony/translation", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "73f86a49454d9477864ccbb6c06993e24a052a48" + "reference": "46e462be71935ae15eab531e4d491d801857f24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/73f86a49454d9477864ccbb6c06993e24a052a48", - "reference": "73f86a49454d9477864ccbb6c06993e24a052a48", + "url": "https://api.github.com/repos/symfony/translation/zipball/46e462be71935ae15eab531e4d491d801857f24c", + "reference": "46e462be71935ae15eab531e4d491d801857f24c", "shasum": "" }, "require": { @@ -2935,7 +3007,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-11-26T03:44:44+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/translation-contracts", @@ -2996,16 +3068,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "29a701da694fec427c8b3a3d32ef99766e506aaf" + "reference": "9574613b74ed066f775eaf94bb15476ef58609de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/29a701da694fec427c8b3a3d32ef99766e506aaf", - "reference": "29a701da694fec427c8b3a3d32ef99766e506aaf", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9574613b74ed066f775eaf94bb15476ef58609de", + "reference": "9574613b74ed066f775eaf94bb15476ef58609de", "shasum": "" }, "require": { @@ -3093,20 +3165,20 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2019-11-30T08:28:34+00:00" + "time": "2020-01-08T17:19:22+00:00" }, { "name": "symfony/twig-bundle", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "869ebf144acafd19fb9c8c386808c26624f28572" + "reference": "0471344717bfb081f10209ad6b8fd520ca8ebd9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/869ebf144acafd19fb9c8c386808c26624f28572", - "reference": "869ebf144acafd19fb9c8c386808c26624f28572", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/0471344717bfb081f10209ad6b8fd520ca8ebd9d", + "reference": "0471344717bfb081f10209ad6b8fd520ca8ebd9d", "shasum": "" }, "require": { @@ -3170,20 +3242,20 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "time": "2019-10-29T14:56:06+00:00" + "time": "2020-01-04T12:24:57+00:00" }, { "name": "symfony/validator", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "539484217f9966aa93e01915c5035c74b6ea1b9b" + "reference": "0d2dcf4ae26db5b6781f40fcab9785f427ee7fa4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/539484217f9966aa93e01915c5035c74b6ea1b9b", - "reference": "539484217f9966aa93e01915c5035c74b6ea1b9b", + "url": "https://api.github.com/repos/symfony/validator/zipball/0d2dcf4ae26db5b6781f40fcab9785f427ee7fa4", + "reference": "0d2dcf4ae26db5b6781f40fcab9785f427ee7fa4", "shasum": "" }, "require": { @@ -3263,20 +3335,20 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2019-11-30T08:28:34+00:00" + "time": "2020-01-31T09:10:37+00:00" }, { "name": "symfony/var-exporter", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "8cccc7d4fde4d72d0bf9d70f01ffa3ba1ec3510b" + "reference": "563f728784ea09c8154ea57cf8192ae5d6f0d277" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8cccc7d4fde4d72d0bf9d70f01ffa3ba1ec3510b", - "reference": "8cccc7d4fde4d72d0bf9d70f01ffa3ba1ec3510b", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/563f728784ea09c8154ea57cf8192ae5d6f0d277", + "reference": "563f728784ea09c8154ea57cf8192ae5d6f0d277", "shasum": "" }, "require": { @@ -3323,20 +3395,20 @@ "instantiate", "serialize" ], - "time": "2019-12-01T08:39:44+00:00" + "time": "2020-01-01T11:51:43+00:00" }, { "name": "symfony/yaml", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "324cf4b19c345465fad14f3602050519e09e361d" + "reference": "8e0a95493b734ca8195acf3e1f3d89e88b957db5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/324cf4b19c345465fad14f3602050519e09e361d", - "reference": "324cf4b19c345465fad14f3602050519e09e361d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/8e0a95493b734ca8195acf3e1f3d89e88b957db5", + "reference": "8e0a95493b734ca8195acf3e1f3d89e88b957db5", "shasum": "" }, "require": { @@ -3382,7 +3454,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-10-30T12:58:49+00:00" + "time": "2020-01-21T11:09:03+00:00" }, { "name": "twig/extensions", @@ -3441,16 +3513,16 @@ }, { "name": "twig/twig", - "version": "v2.12.2", + "version": "v2.12.5", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed" + "reference": "18772e0190734944277ee97a02a9a6c6555fcd94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed", - "reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/18772e0190734944277ee97a02a9a6c6555fcd94", + "reference": "18772e0190734944277ee97a02a9a6c6555fcd94", "shasum": "" }, "require": { @@ -3460,8 +3532,7 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/debug": "^3.4|^4.2", - "symfony/phpunit-bridge": "^4.4@dev|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.0" }, "type": "library", "extra": { @@ -3490,7 +3561,6 @@ }, { "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -3504,7 +3574,7 @@ "keywords": [ "templating" ], - "time": "2019-11-11T16:52:09+00:00" + "time": "2020-02-11T15:31:23+00:00" }, { "name": "willdurand/jsonp-callback-validator", @@ -3550,16 +3620,16 @@ "packages-dev": [ { "name": "symfony/process", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "207dab1f17d34ad71ea72e9741ab8049a9d8251b" + "reference": "61ab103012c3072fb340447a34598714ba74ba6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/207dab1f17d34ad71ea72e9741ab8049a9d8251b", - "reference": "207dab1f17d34ad71ea72e9741ab8049a9d8251b", + "url": "https://api.github.com/repos/symfony/process/zipball/61ab103012c3072fb340447a34598714ba74ba6f", + "reference": "61ab103012c3072fb340447a34598714ba74ba6f", "shasum": "" }, "require": { @@ -3595,20 +3665,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-11-28T10:05:26+00:00" + "time": "2020-01-09T09:39:05+00:00" }, { "name": "symfony/web-server-bundle", - "version": "v4.3.9", + "version": "v4.3.11", "source": { "type": "git", "url": "https://github.com/symfony/web-server-bundle.git", - "reference": "cf3172e6c3a1c996058b377cc92011b747607184" + "reference": "2338445b78f1fb212a96f4286abdc77ee1e92607" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-server-bundle/zipball/cf3172e6c3a1c996058b377cc92011b747607184", - "reference": "cf3172e6c3a1c996058b377cc92011b747607184", + "url": "https://api.github.com/repos/symfony/web-server-bundle/zipball/2338445b78f1fb212a96f4286abdc77ee1e92607", + "reference": "2338445b78f1fb212a96f4286abdc77ee1e92607", "shasum": "" }, "require": { @@ -3654,7 +3724,7 @@ ], "description": "Symfony WebServerBundle", "homepage": "https://symfony.com", - "time": "2019-11-26T03:44:44+00:00" + "time": "2020-01-04T12:24:57+00:00" } ], "aliases": [], @@ -3667,5 +3737,6 @@ "ext-ctype": "*", "ext-iconv": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/public/css/emojionearea.css b/public/css/emojionearea.css new file mode 100644 index 0000000..63da016 --- /dev/null +++ b/public/css/emojionearea.css @@ -0,0 +1,560 @@ +.dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] { + position: absolute; + z-index: 1000; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); } + .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item { + font-size: 14px; + padding: 1px 3px; + border: 0; } + .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item a { + text-decoration: none; + display: block; + height: 100%; + line-height: 1.8em; + padding: 0 1.54em 0 .615em; + color: #4f4f4f; } + .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item:hover, .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item.active { + background-color: #e4e4e4; } + .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item:hover a, .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item.active a { + color: #333; } + .dropdown-menu.textcomplete-dropdown[data-strategy="emojionearea"] li.textcomplete-item .emojioneemoji { + font-size: inherit; + height: 2ex; + width: 2.1ex; + min-height: 20px; + min-width: 20px; + display: inline-block; + margin: 0 5px .2ex 0; + line-height: normal; + vertical-align: middle; + max-width: 100%; + top: 0; } + +.emojionearea-text [class*=emojione-], .emojionearea-text .emojioneemoji { + font-size: inherit; + height: 2ex; + width: 2.1ex; + min-height: 20px; + min-width: 20px; + display: inline-block; + margin: -.2ex .15em .2ex; + line-height: normal; + vertical-align: middle; + max-width: 100%; + top: 0; } + +.emojionearea, .emojionearea * { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } +.emojionearea.emojionearea-disable { + position: relative; + background-color: #eee; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; } + .emojionearea.emojionearea-disable:before { + content: ""; + display: block; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + opacity: 0.3; + position: absolute; + background-color: #eee; } +.emojionearea, .emojionearea.form-control { + display: block; + position: relative !important; + width: 100%; + height: auto; + padding: 0; + font-size: 14px; + border: 0; + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-transition: border-color 0.15s ease-in-out, -moz-box-shadow 0.15s ease-in-out; + -o-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } +.emojionearea.focused { + border-color: #66AFE9; + outline: 0; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } +.emojionearea .emojionearea-editor { + display: block; + height: auto; + min-height: 8em; + max-height: 15em; + overflow: auto; + padding: 6px 24px 6px 12px; + line-height: 1.42857143; + font-size: inherit; + color: #555555; + background-color: transparent; + border: 0; + cursor: text; + margin-right: 1px; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .emojionearea .emojionearea-editor:empty:before { + content: attr(placeholder); + display: block; + color: #BBBBBB; } + .emojionearea .emojionearea-editor:focus { + border: 0; + outline: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .emojionearea .emojionearea-editor [class*=emojione-], .emojionearea .emojionearea-editor .emojioneemoji { + font-size: inherit; + height: 2ex; + width: 2.1ex; + min-height: 20px; + min-width: 20px; + display: inline-block; + margin: -.2ex .15em .2ex; + line-height: normal; + vertical-align: middle; + max-width: 100%; + top: 0; } +.emojionearea.emojionearea-inline { + height: 34px; } + .emojionearea.emojionearea-inline > .emojionearea-editor { + height: 32px; + min-height: 20px; + overflow: hidden; + white-space: nowrap; + position: absolute; + top: 0; + left: 12px; + right: 24px; + padding: 6px 0; } + .emojionearea.emojionearea-inline > .emojionearea-button { + top: 4px; } +.emojionearea .emojionearea-button { + z-index: 5; + position: absolute; + right: 3px; + top: 3px; + width: 24px; + height: 24px; + opacity: 0.6; + cursor: pointer; + -moz-transition: opacity 300ms ease-in-out; + -o-transition: opacity 300ms ease-in-out; + -webkit-transition: opacity 300ms ease-in-out; + transition: opacity 300ms ease-in-out; } + .emojionearea .emojionearea-button:hover { + opacity: 1; } + .emojionearea .emojionearea-button > div { + display: block; + width: 24px; + height: 24px; + position: absolute; + -moz-transition: all 400ms ease-in-out; + -o-transition: all 400ms ease-in-out; + -webkit-transition: all 400ms ease-in-out; + transition: all 400ms ease-in-out; } + .emojionearea .emojionearea-button > div.emojionearea-button-open { + background-position: 0 -24px; + filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); + opacity: 1; } + .emojionearea .emojionearea-button > div.emojionearea-button-close { + background-position: 0 0; + -webkit-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; } + .emojionearea .emojionearea-button.active > div.emojionearea-button-open { + -webkit-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; } + .emojionearea .emojionearea-button.active > div.emojionearea-button-close { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); + opacity: 1; } +.emojionearea .emojionearea-picker { + background: #FFFFFF; + position: absolute; + -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.32); + -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.32); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.32); + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + height: 276px; + width: 316px; + top: -15px; + right: -15px; + z-index: 90; + -moz-transition: all 0.25s ease-in-out; + -o-transition: all 0.25s ease-in-out; + -webkit-transition: all 0.25s ease-in-out; + transition: all 0.25s ease-in-out; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; } + .emojionearea .emojionearea-picker.hidden { + display: none; } + .emojionearea .emojionearea-picker .emojionearea-wrapper { + position: relative; + height: 276px; + width: 316px; } + .emojionearea .emojionearea-picker .emojionearea-wrapper:after { + content: ""; + display: block; + position: absolute; + background-repeat: no-repeat; + z-index: 91; } + .emojionearea .emojionearea-picker .emojionearea-filters { + width: 100%; + position: absolute; + z-index: 95; } + .emojionearea .emojionearea-picker .emojionearea-filters { + background: #F5F7F9; + padding: 0 0 0 7px; + height: 40px; } + .emojionearea .emojionearea-picker .emojionearea-filters .emojionearea-filter { + display: block; + float: left; + height: 40px; + width: 32px; + filter: inherit; + padding: 7px 1px 0; + cursor: pointer; + -webkit-filter: grayscale(1); + filter: grayscale(1); } + .emojionearea .emojionearea-picker .emojionearea-filters .emojionearea-filter.active { + background: #fff; } + .emojionearea .emojionearea-picker .emojionearea-filters .emojionearea-filter.active, .emojionearea .emojionearea-picker .emojionearea-filters .emojionearea-filter:hover { + -webkit-filter: grayscale(0); + filter: grayscale(0); } + .emojionearea .emojionearea-picker .emojionearea-filters .emojionearea-filter > i { + width: 24px; + height: 24px; + top: 0; } + .emojionearea .emojionearea-picker .emojionearea-filters .emojionearea-filter > img { + width: 24px; + height: 24px; + margin: 0 3px; } + .emojionearea .emojionearea-picker .emojionearea-search-panel { + height: 30px; + position: absolute; + z-index: 95; + top: 40px; + left: 0; + right: 0; + padding: 5px 0 5px 8px; } + .emojionearea .emojionearea-picker .emojionearea-search-panel .emojionearea-tones { + float: right; + margin-right: 10px; + margin-top: -1px; } + .emojionearea .emojionearea-picker .emojionearea-tones-panel .emojionearea-tones { + position: absolute; + top: 4px; + left: 171px; } + .emojionearea .emojionearea-picker .emojionearea-search { + float: left; + padding: 0; + height: 20px; + width: 160px; } + .emojionearea .emojionearea-picker .emojionearea-search > input { + outline: none; + width: 160px; + min-width: 160px; + height: 20px; } + .emojionearea .emojionearea-picker .emojionearea-tones { + padding: 0; + width: 120px; + height: 20px; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone { + display: inline-block; + padding: 0; + border: 0; + vertical-align: middle; + outline: none; + background: transparent; + cursor: pointer; + position: relative; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-0, .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-0:after { + background-color: #ffcf3e; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-1, .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-1:after { + background-color: #fae3c5; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-2, .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-2:after { + background-color: #e2cfa5; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-3, .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-3:after { + background-color: #daa478; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-4, .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-4:after { + background-color: #a78058; } + .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-5, .emojionearea .emojionearea-picker .emojionearea-tones > .btn-tone.btn-tone-5:after { + background-color: #5e4d43; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-bullet > .btn-tone, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-square > .btn-tone { + width: 20px; + height: 20px; + margin: 0; + background-color: transparent; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-bullet > .btn-tone:after, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-square > .btn-tone:after { + content: ""; + position: absolute; + display: block; + top: 4px; + left: 4px; + width: 12px; + height: 12px; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-bullet > .btn-tone.active:after, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-square > .btn-tone.active:after { + top: 0; + left: 0; + width: 20px; + height: 20px; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-radio > .btn-tone, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-checkbox > .btn-tone { + width: 16px; + height: 16px; + margin: 0px 2px; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-radio > .btn-tone.active:after, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-checkbox > .btn-tone.active:after { + content: ""; + position: absolute; + display: block; + background-color: transparent; + border: 2px solid #fff; + width: 8px; + height: 8px; + top: 2px; + left: 2px; + box-sizing: initial; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-bullet > .btn-tone, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-bullet > .btn-tone:after, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-radio > .btn-tone, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-radio > .btn-tone:after { + -moz-border-radius: 100%; + -webkit-border-radius: 100%; + border-radius: 100%; } + .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-square > .btn-tone, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-square > .btn-tone:after, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-checkbox > .btn-tone, .emojionearea .emojionearea-picker .emojionearea-tones.emojionearea-tones-checkbox > .btn-tone:after { + -moz-border-radius: 1px; + -webkit-border-radius: 1px; + border-radius: 1px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area { + height: 236px; } + .emojionearea .emojionearea-picker .emojionearea-search-panel + .emojionearea-scroll-area { + height: 206px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area { + overflow: auto; + overflow-x: hidden; + width: 100%; + position: absolute; + padding: 0 0 5px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-emojis-list { + z-index: 1; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-title { + display: block; + font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; + font-size: 13px; + font-weight: normal; + color: #b2b2b2; + background: #FFFFFF; + line-height: 20px; + margin: 0; + padding: 7px 0 5px 6px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-title:after, .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-title:before { + content: " "; + display: block; + clear: both; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-block { + padding: 0 0 0 7px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-block > .emojionearea-category { + padding: 0 !important; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-block > .emojionearea-category:after, .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-block > .emojionearea-category:before { + content: " "; + display: block; + clear: both; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-block:after, .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojionearea-category-block:before { + content: " "; + display: block; + clear: both; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area [class*=emojione-] { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + margin: 0; + width: 24px; + height: 24px; + top: 0; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojibtn { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + width: 24px; + height: 24px; + float: left; + display: block; + margin: 1px; + padding: 3px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojibtn:hover { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background-color: #e4e4e4; + cursor: pointer; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojibtn i, .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojibtn img { + float: left; + display: block; + width: 24px; + height: 24px; } + .emojionearea .emojionearea-picker .emojionearea-scroll-area .emojibtn img.lazy-emoji { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-top .emojionearea-filters { + top: 0; + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + border-top-left-radius: 5px; + -moz-border-radius-topright: 5px; + -webkit-border-top-right-radius: 5px; + border-top-right-radius: 5px; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-top.emojionearea-search-position-top .emojionearea-scroll-area { + bottom: 0; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-top.emojionearea-search-position-bottom .emojionearea-scroll-area { + top: 40px; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-top.emojionearea-search-position-bottom .emojionearea-search-panel { + top: initial; + bottom: 0; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-bottom .emojionearea-filters { + bottom: 0; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-bottom.emojionearea-search-position-bottom .emojionearea-scroll-area { + top: 0; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-bottom.emojionearea-search-position-bottom .emojionearea-search-panel { + top: initial; + bottom: 40px; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-bottom.emojionearea-search-position-top .emojionearea-scroll-area { + top: initial; + bottom: 40px; } + .emojionearea .emojionearea-picker.emojionearea-filters-position-bottom.emojionearea-search-position-top .emojionearea-search-panel { + top: 0; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-top { + margin-top: -286px; + right: -14px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-top .emojionearea-wrapper:after { + width: 19px; + height: 10px; + background-position: -2px -49px; + bottom: -10px; + right: 20px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-top.emojionearea-filters-position-bottom .emojionearea-wrapper:after { + background-position: -2px -80px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-left, .emojionearea .emojionearea-picker.emojionearea-picker-position-right { + margin-right: -326px; + top: -8px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-left .emojionearea-wrapper:after, .emojionearea .emojionearea-picker.emojionearea-picker-position-right .emojionearea-wrapper:after { + width: 10px; + height: 19px; + background-position: 0px -60px; + top: 13px; + left: -10px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-left.emojionearea-filters-position-bottom .emojionearea-wrapper:after, .emojionearea .emojionearea-picker.emojionearea-picker-position-right.emojionearea-filters-position-bottom .emojionearea-wrapper:after { + background-position: right -60px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-bottom { + margin-top: 10px; + right: -14px; + top: 47px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-bottom .emojionearea-wrapper:after { + width: 19px; + height: 10px; + background-position: -2px -100px; + top: -10px; + right: 20px; } + .emojionearea .emojionearea-picker.emojionearea-picker-position-bottom.emojionearea-filters-position-bottom .emojionearea-wrapper:after { + background-position: -2px -90px; } +.emojionearea .emojionearea-button.active + .emojionearea-picker { + filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); + opacity: 1; } +.emojionearea .emojionearea-button.active + .emojionearea-picker-position-top { + margin-top: -269px; } +.emojionearea .emojionearea-button.active + .emojionearea-picker-position-left, +.emojionearea .emojionearea-button.active + .emojionearea-picker-position-right { + margin-right: -309px; } +.emojionearea .emojionearea-button.active + .emojionearea-picker-position-bottom { + margin-top: -7px; } +.emojionearea.emojionearea-standalone { + display: inline-block; + width: auto; + box-shadow: none; } + .emojionearea.emojionearea-standalone .emojionearea-editor { + min-height: 33px; + position: relative; + padding: 6px 42px 6px 6px; } + .emojionearea.emojionearea-standalone .emojionearea-editor::before { + content: ""; + position: absolute; + top: 4px; + left: 50%; + bottom: 4px; + border-left: 1px solid #e6e6e6; } + .emojionearea.emojionearea-standalone .emojionearea-editor.has-placeholder { + background-repeat: no-repeat; + background-position: 20px 4px; } + .emojionearea.emojionearea-standalone .emojionearea-editor.has-placeholder .emojioneemoji { + opacity: 0.4; } + .emojionearea.emojionearea-standalone .emojionearea-button { + top: 0; + right: 0; + bottom: 0; + left: 0; + width: auto; + height: auto; } + .emojionearea.emojionearea-standalone .emojionearea-button > div { + right: 6px; + top: 5px; } + .emojionearea.emojionearea-standalone .emojionearea-picker.emojionearea-picker-position-bottom .emojionearea-wrapper:after, .emojionearea.emojionearea-standalone .emojionearea-picker.emojionearea-picker-position-top .emojionearea-wrapper:after { + right: 23px; } + .emojionearea.emojionearea-standalone .emojionearea-picker.emojionearea-picker-position-left .emojionearea-wrapper:after, .emojionearea.emojionearea-standalone .emojionearea-picker.emojionearea-picker-position-right .emojionearea-wrapper:after { + top: 15px; } + +.emojionearea .emojionearea-button > div, .emojionearea .emojionearea-picker .emojionearea-wrapper:after { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAABuCAYAAADMB4ipAAAHfElEQVRo3u1XS1NT2Rb+9uOcQF4YlAJzLymFUHaLrdxKULvEUNpdTnRqD532f+AHMLMc94gqR1Zbt8rBnUh3YXipPGKwRDoWgXvrYiFUlEdIkPPYZ/dAkwox5yQCVt/bzRrBPnt9e+211/etFeDQDu3ArL+/X37OeqmRWoH7+vpItfWawStF1tfXR+zW9xW5ne0p8loOcAKuCdwpRft60C8a+X5zTvebCqcAvmidf1GGHtqhHdpf1qqKzsrKipyensbi4iKWl5cBAMFgEG1tbYhGo2hpadlbmxseHpaDg4MAgI6ODng8HgBAPp/H/Pw8AODatWvo7e2tvUHrui7v3r2L+fl5XL58GVeuXIHH49m1N5/Py0ePHmF0dBQdHR24desWVFXdtYdXAn/48CHm5+dx8+ZNRKPRigEUDpuenpb3799H4YaOnWh5eVmOj48jFoshGo0STdPkwMCAXF5elqV7BgYGpKZpMhqNklgshrGxMbx580Y6gicSCTDGEIvFAADpdBqpVArJZLK4J5lMIpVKIZ1OAwBisRgYY0gkEs6Rp1IphMNh+Hw+AgCGYQAANE0r7in8Xfjm8/lIOBzGq1evnMHX19fR1NRU/D8UCoFzjnA4XFwLh8PgnCMUChXXmpqakM1mUfVBS62xsZHk83lZWi1nz579ZA0AhBDO4A0NDchkMsWSJIRAURRiVy26rktVVUkmk0EgEHAGP3XqFKamppDP56Vpmrhz5w5u374t/X4/OP+w3TRNZLNZ6LoO0zSRz+dlf38/Ll686Jzz8+fPQwiBeDwOt9tNrl+/jkwmU6yaQpVkMhncuHEDbrebxONxCCEQiUScIw8Gg+TBgwdyZGQEyWRSdnV1kVQqJYeGhrC6ugrGGEKhEHp7e3Hy5EmSTCblvXv30NPTg2AwSA6M/vF4HCMjI7b0/yzh8vv9AIBsNrt34aokuQsLC7skt729varkHtqftUFf++FHsrq0QN3eBvp68Tfvf9Mv12oFCYU7G//e9nVuO7dpNbe2W4M//yQr0p8yRvyBo1Zr++lwLcCt7afD/sBRizJGavrB1dDYYh47Htrq+Kb7jBNwxzfdZ44dD201NLaYVUkU7ozQpuAJBkARwnRZpunN5zaa5hJjiXLH05GeiMd7JEM5zzHGNQBGZvk/Iv0yYVWMvK0zKk1Dl6ahW5RQobjqdjy+wEZn9PKF0n2d0csXPL7AhuKq26GECtPQLdPQZVtn1LlB69p7yRVVSEiDEGJwRd12e4+8PR3piRQidnuPvOWKuk0IMSSkwRVV6Np7WVVbSqvGsgSnlKkAFNPQXdrOtuKqcxtcUTUAhmUJnVJmlleJo3CVHmAaOlPUOmYJkxFKibQsSRkXhr4juKIKO2BHVSwcoLrqCVdUYho6K3YYRRWmoUtdey/tgKtK7rUffiQAsLq08MnbNLe2WwBgB/zHzueFyD8nwlIfbvdx8eU0WV1aKD1cVAMs9+F2j9gUPEEKemEJIe3AnXy4XfkBoNKSZHNthWfX31EA69VKttyHVyIOY1wRwmS6tqNsrr31vXo5k/bUu4gT2cp9lhbm0rzCJpeUUrE0vS63+c7/6uXMbDUWl/ssLczNFrVFddUT09AZpUy1LKvO0DVfPrfR9HxqfNbuEe185l9MFX3o6tIC5YpKFLWOfdQQ93Zu49j0+FDCDtjOp1yaOQCYhs4Y40wI05XfWj8yPT40Ua2ey33mEmMTtp2IUEq0nW3FKeJPGPjRp1Iz2QUuLUu66txG9NLVSK3gBZ+C1lcE54oqKOOCK6rm8QU2unu+u1ANuNynvFsBAG1ubbdMQ5eGviMAFDuP0w3sfMpvQEtb24fOQncU1bXl8R7JnOu+ZNv97XxKJwY6+PNPsrm13drObVqUMlMIU5OWpVHOc96Go5lTnV2fzC/VfAozD7HTCa6olBBa1Imlhbmq2lLuQ5xaW6nCPfnln0Yt7bDUhzhps8cfKH5//uTXmvS81OeLdqI/ZoROzSZrHqG/OvOPzxuhK5VgJTvV2bW3EdqJRABwrvvS/kfoSkoZvXT1YEbociHr7vnuYEfogpBFL109HKH/h0fomnXg3Lff79r7/MmvVbWG7gX4QObzc99+Tz7mHKah05KcW6ahQ9feS6cbMCdgt7eBWJagjCuUAC5tZzuouuo0Spm0hElc9R4cbf4bVl8v1p6WUmCuqEwIs34ruxaeeTy4uJVd67As08UVlVmWoG5vA7FLG3WMmHEupVTyW+vh2cn4DADMTsaTuc21LiGEhzHOnQ6gNtMrJSBMCKHkNt999WLi0S7hejEZH81n174WpukiIMw0dKq66p3Bw50RwhUVXFGJKUy28Xal48VkfKrSlWenhsc23q2cEB9SR7iiItwZIbbgHn8AlDFCCMW7laXjqZnHjkNpaubJzNuVpWZCKChjxOMPVH/QlaW0f/G3ZLqWWl6ce/bvlddp7yFD/w8Z+njoX1+GoZMjgzMAMDkyeLAMnRh+uKveJ0YGD4ahEyODFRk6OfrL/hj67GnckaHPng7vjaGzyYmaGDr77KktQ38H8tqx8Wja+WIAAAAASUVORK5CYII=') !important; } + +.emojionearea.emojionearea-standalone .emojionearea-editor.has-placeholder { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAC/v79T5hyIAAAAAXRSTlMAQObYZgAAABNJREFUCNdjYGNgQEb/P4AQqiAASiUEG6Vit44AAAAASUVORK5CYII=') !important; } + +/*# sourceMappingURL=emojionearea.css.map */ diff --git a/public/css/style.css b/public/css/style.css index ec48d99..ec9f585 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -23,3 +23,4 @@ html, body { height: 150px; background-color: #f5f5f5; } + diff --git a/public/js/emojionearea.js b/public/js/emojionearea.js new file mode 100644 index 0000000..2167bbc --- /dev/null +++ b/public/js/emojionearea.js @@ -0,0 +1,1782 @@ +/*! + * EmojioneArea v3.4.1 + * https://github.com/mervick/emojionearea + * Copyright Andrey Izman and other contributors + * Released under the MIT license + * Date: 2018-04-27T09:03Z + */ +window = ( typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {} ); +document = window.document || {}; +; ( function ( factory, global ) { + if ( typeof require === "function" && typeof exports === "object" && typeof module === "object" ) { + + // CommonJS + factory( require( "jquery" ) ); + } else if ( typeof define === "function" && define.amd ) { + + // AMD + define( [ "jquery" ], factory ); + } else { + + // Normal script tag + factory( global.jQuery ); + } +}( function ( $ ) { + "use strict"; + + var unique = 0; + var eventStorage = {}; + var possibleEvents = {}; + var emojione = window.emojione; + var readyCallbacks = []; + function emojioneReady (fn) { + if (emojione) { + fn(); + } else { + readyCallbacks.push(fn); + } + }; + var blankImg = 'data:image/gif;base64,R0lGODlhAQABAJH/AP///wAAAMDAwAAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw=='; + var slice = [].slice; + var css_class = "emojionearea"; + var emojioneSupportMode = 0; + var invisibleChar = '​'; + function trigger(self, event, args) { + var result = true, j = 1; + if (event) { + event = event.toLowerCase(); + do { + var _event = j==1 ? '@' + event : event; + if (eventStorage[self.id][_event] && eventStorage[self.id][_event].length) { + $.each(eventStorage[self.id][_event], function (i, fn) { + return result = fn.apply(self, args|| []) !== false; + }); + } + } while (result && !!j--); + } + return result; + } + function attach(self, element, events, target) { + target = target || function (event, callerEvent) { return $(callerEvent.currentTarget) }; + $.each(events, function(event, link) { + event = $.isArray(events) ? link : event; + (possibleEvents[self.id][link] || (possibleEvents[self.id][link] = [])) + .push([element, event, target]); + }); + } + function getTemplate(template, unicode, shortname) { + var imageType = emojione.imageType, imagePath; + if (imageType=='svg'){ + imagePath = emojione.imagePathSVG; + } else { + imagePath = emojione.imagePathPNG; + } + var friendlyName = ''; + if (shortname) { + friendlyName = shortname.substr(1, shortname.length - 2).replace(/_/g, ' ').replace(/\w\S*/g, function(txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); + } + var fname = ''; + if (unicode.uc_base && emojioneSupportMode > 4) { + fname = unicode.uc_base; + unicode = unicode.uc_output.toUpperCase(); + } else { + fname = unicode; + } + template = template.replace('{name}', shortname || '') + .replace('{friendlyName}', friendlyName) + .replace('{img}', imagePath + (emojioneSupportMode < 2 ? fname.toUpperCase() : fname) + '.' + imageType) + .replace('{uni}', unicode); + + if(shortname) { + template = template.replace('{alt}', emojione.shortnameToUnicode(shortname)); + } else { + template = template.replace('{alt}', emojione.convert(unicode)); + } + + return template; + }; + function shortnameTo(str, template, clear) { + return str.replace(/:?\+?[\w_\-]+:?/g, function(shortname) { + shortname = ":" + shortname.replace(/:$/,'').replace(/^:/,'') + ":"; + var unicode = emojione.emojioneList[shortname]; + if (unicode) { + if (emojioneSupportMode > 4) { + return getTemplate(template, unicode, shortname); + } else { + if (emojioneSupportMode > 3) unicode = unicode.unicode; + return getTemplate(template, unicode[unicode.length-1], shortname); + } + } + return clear ? '' : shortname; + }); + }; + function pasteHtmlAtCaret(html) { + var sel, range; + if (window.getSelection) { + sel = window.getSelection(); + if (sel.getRangeAt && sel.rangeCount) { + range = sel.getRangeAt(0); + range.deleteContents(); + var el = document.createElement("div"); + el.innerHTML = html; + var frag = document.createDocumentFragment(), node, lastNode; + while ( (node = el.firstChild) ) { + lastNode = frag.appendChild(node); + } + range.insertNode(frag); + if (lastNode) { + range = range.cloneRange(); + range.setStartAfter(lastNode); + range.collapse(true); + sel.removeAllRanges(); + sel.addRange(range); + } + } + } else if (document.selection && document.selection.type != "Control") { + document.selection.createRange().pasteHTML(html); + } + } + function getEmojioneVersion() { + return window.emojioneVersion || '3.1.2'; + }; + function isObject(variable) { + return typeof variable === 'object'; + }; + function detectVersion(emojione) { + var version; + if (emojione.cacheBustParam) { + version = emojione.cacheBustParam; + if (!isObject(emojione['jsEscapeMap'])) return '1.5.2'; + if (version === "?v=1.2.4") return '2.0.0'; + if (version === "?v=2.0.1") return '2.1.0'; // v2.0.1 || v2.1.0 + if (version === "?v=2.1.1") return '2.1.1'; + if (version === "?v=2.1.2") return '2.1.2'; + if (version === "?v=2.1.3") return '2.1.3'; + if (version === "?v=2.1.4") return '2.1.4'; + if (version === "?v=2.2.7") return '2.2.7'; + return '2.2.7'; + } else { + return emojione.emojiVersion; + } + }; + function getSupportMode(version) { + switch (version) { + case '1.5.2': return 0; + case '2.0.0': return 1; + case '2.1.0': + case '2.1.1': return 2; + case '2.1.2': return 3; + case '2.1.3': + case '2.1.4': + case '2.2.7': return 4; + case '3.0.1': + case '3.0.2': + case '3.0.3': + case '3.0': return 5; + case '3.1.0': + case '3.1.1': + case '3.1.2': + case '3.1': + default: return 6; + } + }; + function getDefaultOptions () { + if ($.fn.emojioneArea && $.fn.emojioneArea.defaults) { + return $.fn.emojioneArea.defaults; + } + + var defaultOptions = { + attributes: { + dir : "ltr", + spellcheck : false, + autocomplete : "off", + autocorrect : "off", + autocapitalize : "off", + }, + search : true, + placeholder : null, + emojiPlaceholder : ":smiley:", + searchPlaceholder : "SEARCH", + container : null, + hideSource : true, + shortnames : true, + sprite : true, + pickerPosition : "top", // top | bottom | right + filtersPosition : "top", // top | bottom + searchPosition : "top", // top | bottom + hidePickerOnBlur : true, + buttonTitle : "Use the TAB key to insert emoji faster", + tones : true, + tonesStyle : "bullet", // bullet | radio | square | checkbox + inline : null, // null - auto + saveEmojisAs : "unicode", // unicode | shortname | image + shortcuts : true, + autocomplete : true, + autocompleteTones : false, + standalone : false, + useInternalCDN : true, // Use the self loading mechanism + imageType : "png", // Default image type used by internal CDN + recentEmojis : true, + textcomplete: { + maxCount : 15, + placement : null // null - default | top | absleft | absright + } + }; + + var supportMode = !emojione ? getSupportMode(getEmojioneVersion()) : getSupportMode(detectVersion(emojione)); + + if (supportMode > 4) { + defaultOptions.filters = { + tones: { + title: "Diversity", + emoji: "open_hands raised_hands palms_up_together clap pray thumbsup thumbsdown punch fist left_facing_fist right_facing_fist " + + "fingers_crossed v metal love_you_gesture ok_hand point_left point_right point_up_2 point_down point_up raised_hand " + + "raised_back_of_hand hand_splayed vulcan wave call_me muscle middle_finger writing_hand selfie nail_care ear " + + "nose baby boy girl man woman blond-haired_woman blond-haired_man older_man older_woman " + + "man_with_chinese_cap woman_wearing_turban man_wearing_turban woman_police_officer " + + "man_police_officer woman_construction_worker man_construction_worker " + + "woman_guard man_guard woman_detective man_detective woman_health_worker man_health_worker " + + "woman_farmer man_farmer woman_cook man_cook woman_student man_student woman_singer man_singer woman_teacher " + + "man_teacher woman_factory_worker man_factory_worker woman_technologist man_technologist woman_office_worker " + + "man_office_worker woman_mechanic man_mechanic woman_scientist man_scientist woman_artist man_artist " + + "woman_firefighter man_firefighter woman_pilot man_pilot woman_astronaut man_astronaut woman_judge " + + "man_judge mrs_claus santa princess prince bride_with_veil man_in_tuxedo angel pregnant_woman " + + "breast_feeding woman_bowing man_bowing man_tipping_hand woman_tipping_hand " + + "man_gesturing_no woman_gesturing_no man_gesturing_ok woman_gesturing_ok " + + "man_raising_hand woman_raising_hand woman_facepalming man_facepalming " + + "woman_shrugging man_shrugging man_pouting woman_pouting " + + "man_frowning woman_frowning man_getting_haircut woman_getting_haircut " + + "man_getting_face_massage woman_getting_face_massage man_in_business_suit_levitating dancer man_dancing " + + "woman_walking man_walking woman_running man_running adult child older_adult " + + "bearded_person woman_with_headscarf woman_mage man_mage " + + "woman_fairy man_fairy woman_vampire man_vampire mermaid merman woman_elf man_elf " + + "snowboarder woman_lifting_weights man_lifting_weights woman_cartwheeling " + + "man_cartwheeling woman_bouncing_ball man_bouncing_ball " + + "woman_playing_handball man_playing_handball woman_golfing man_golfing " + + "woman_surfing man_surfing woman_swimming man_swimming woman_playing_water_polo " + + "man_playing_water_polo woman_rowing_boat man_rowing_boat " + + "horse_racing woman_biking man_biking woman_mountain_biking " + + "man_mountain_biking woman_juggling man_juggling " + + "woman_in_steamy_room man_in_steamy_room woman_climbing " + + "man_climbing woman_in_lotus_position man_in_lotus_position bath person_in_bed" + }, + + recent: { + icon: "clock3", + title: "Recent", + emoji: "" + }, + + smileys_people: { + icon: "yum", + title: "Smileys & People", + emoji: "grinning smiley smile grin laughing sweat_smile joy rofl relaxed blush innocent slight_smile upside_down " + + "wink relieved crazy_face star_struck heart_eyes kissing_heart kissing kissing_smiling_eyes kissing_closed_eyes yum " + + "stuck_out_tongue_winking_eye stuck_out_tongue_closed_eyes stuck_out_tongue money_mouth hugging nerd sunglasses " + + "cowboy smirk unamused disappointed pensive worried face_with_raised_eyebrow face_with_monocle confused slight_frown " + + "frowning2 persevere confounded tired_face weary triumph angry rage face_with_symbols_over_mouth " + + "no_mouth neutral_face expressionless hushed frowning anguished open_mouth astonished dizzy_face exploding_head flushed scream " + + "fearful cold_sweat cry disappointed_relieved drooling_face sob sweat sleepy sleeping rolling_eyes thinking " + + "shushing_face face_with_hand_over_mouth lying_face grimacing zipper_mouth face_vomiting nauseated_face sneezing_face mask thermometer_face " + + "head_bandage smiling_imp imp japanese_ogre japanese_goblin poop ghost skull skull_crossbones alien space_invader " + + "robot jack_o_lantern clown smiley_cat smile_cat joy_cat heart_eyes_cat smirk_cat kissing_cat scream_cat crying_cat_face " + + "pouting_cat open_hands raised_hands palms_up_together clap pray handshake thumbsup thumbsdown punch fist left_facing_fist " + + "right_facing_fist fingers_crossed v metal love_you_gesture ok_hand point_left point_right point_up_2 point_down point_up " + + "raised_hand raised_back_of_hand hand_splayed vulcan wave call_me muscle middle_finger writing_hand selfie " + + "nail_care ring lipstick kiss lips tongue ear nose footprints eye eyes speaking_head bust_in_silhouette " + + "busts_in_silhouette baby boy girl man woman blond-haired_woman blond_haired_man older_man older_woman " + + "man_with_chinese_cap woman_wearing_turban man_wearing_turban woman_police_officer police_officer " + + "woman_construction_worker construction_worker woman_guard guard woman_detective detective woman_health_worker " + + "man_health_worker woman_farmer man_farmer woman_cook man_cook woman_student man_student woman_singer man_singer " + + "woman_teacher man_teacher woman_factory_worker man_factory_worker woman_technologist man_technologist " + + "woman_office_worker man_office_worker woman_mechanic man_mechanic woman_scientist man_scientist woman_artist " + + "man_artist woman_firefighter man_firefighter woman_pilot man_pilot woman_astronaut man_astronaut woman_judge " + + "man_judge mrs_claus santa princess prince bride_with_veil man_in_tuxedo angel pregnant_woman breast_feeding woman_bowing " + + "man_bowing woman_tipping_hand man_tipping_hand woman_gesturing_no man_gesturing_no woman_gesturing_ok " + + "man_gesturing_ok woman_raising_hand man_raising_hand woman_facepalming man_facepalming woman_shrugging " + + "man_shrugging woman_pouting man_pouting woman_frowning man_frowning woman_getting_haircut man_getting_haircut " + + "woman_getting_face_massage man_getting_face_massage man_in_business_suit_levitating dancer man_dancing women_with_bunny_ears_partying " + + "men_with_bunny_ears_partying woman_walking man_walking woman_running man_running couple two_women_holding_hands " + + "two_men_holding_hands couple_with_heart couple_ww couple_mm couplekiss kiss_ww kiss_mm family family_mwg family_mwgb " + + "family_mwbb family_mwgg family_wwb family_wwg family_wwgb family_wwbb family_wwgg family_mmb family_mmg family_mmgb " + + "family_mmbb family_mmgg family_woman_boy family_woman_girl family_woman_girl_boy family_woman_boy_boy " + + "family_woman_girl_girl family_man_boy family_man_girl family_man_girl_boy family_man_boy_boy family_man_girl_girl " + + "bearded_person woman_with_headscarf woman_mage man_mage woman_fairy man_fairy woman_vampire man_vampire " + + "mermaid merman woman_elf man_elf woman_genie man_genie woman_zombie man_zombie " + + "womans_clothes shirt jeans necktie dress bikini kimono high_heel sandal boot mans_shoe athletic_shoe womans_hat " + + "tophat mortar_board crown helmet_with_cross school_satchel pouch purse handbag briefcase eyeglasses dark_sunglasses " + + "closed_umbrella umbrella2 brain billed_cap scarf gloves coat socks " + }, + + animals_nature: { + icon: "hamster", + title: "Animals & Nature", + emoji: "dog cat mouse hamster rabbit fox bear panda_face koala tiger lion_face cow pig pig_nose frog monkey_face see_no_evil " + + "hear_no_evil speak_no_evil monkey chicken penguin bird baby_chick hatching_chick hatched_chick duck eagle owl bat wolf boar " + + "horse unicorn bee bug butterfly snail shell beetle ant spider spider_web turtle snake lizard scorpion crab squid octopus shrimp " + + "tropical_fish fish blowfish dolphin shark whale whale2 crocodile leopard tiger2 water_buffalo ox cow2 deer dromedary_camel camel " + + "elephant rhino gorilla racehorse pig2 goat ram sheep dog2 poodle cat2 rooster turkey dove rabbit2 mouse2 rat chipmunk dragon " + + "giraffe zebra hedgehog sauropod t_rex cricket dragon_face feet cactus christmas_tree evergreen_tree deciduous_tree palm_tree seedling herb shamrock four_leaf_clover " + + "bamboo tanabata_tree leaves fallen_leaf maple_leaf mushroom ear_of_rice bouquet tulip rose wilted_rose sunflower blossom " + + "cherry_blossom hibiscus earth_americas earth_africa earth_asia full_moon waning_gibbous_moon last_quarter_moon " + + "waning_crescent_moon new_moon waxing_crescent_moon first_quarter_moon waxing_gibbous_moon new_moon_with_face " + + "full_moon_with_face sun_with_face first_quarter_moon_with_face last_quarter_moon_with_face crescent_moon dizzy star star2 " + + "sparkles zap fire boom comet sunny white_sun_small_cloud partly_sunny white_sun_cloud white_sun_rain_cloud rainbow cloud " + + "cloud_rain thunder_cloud_rain cloud_lightning cloud_snow snowman2 snowman snowflake wind_blowing_face dash cloud_tornado " + + "fog ocean droplet sweat_drops umbrella " + }, + + food_drink: { + icon: "pizza", + title: "Food & Drink", + emoji: "green_apple apple pear tangerine lemon banana watermelon grapes strawberry melon cherries peach pineapple kiwi " + + "avocado tomato eggplant cucumber carrot corn hot_pepper potato sweet_potato chestnut peanuts honey_pot croissant " + + "bread french_bread cheese egg cooking bacon pancakes fried_shrimp poultry_leg meat_on_bone pizza hotdog hamburger " + + "fries stuffed_flatbread taco burrito salad shallow_pan_of_food spaghetti ramen stew fish_cake sushi bento curry " + + "rice_ball rice rice_cracker oden dango shaved_ice ice_cream icecream cake birthday custard lollipop candy " + + "chocolate_bar popcorn doughnut cookie milk baby_bottle coffee tea sake beer beers champagne_glass wine_glass " + + "tumbler_glass cocktail tropical_drink champagne spoon fork_and_knife fork_knife_plate dumpling fortune_cookie " + + "takeout_box chopsticks bowl_with_spoon cup_with_straw coconut broccoli pie pretzel cut_of_meat sandwich canned_food" + }, + + activity: { + icon: "basketball", + title: "Activity", + emoji: "soccer basketball football baseball tennis volleyball rugby_football 8ball ping_pong badminton goal hockey field_hockey " + + "cricket_game golf bow_and_arrow fishing_pole_and_fish boxing_glove martial_arts_uniform ice_skate ski skier snowboarder " + + "woman_lifting_weights man_lifting_weights person_fencing women_wrestling men_wrestling woman_cartwheeling " + + "man_cartwheeling woman_bouncing_ball man_bouncing_ball woman_playing_handball man_playing_handball woman_golfing " + + "man_golfing woman_surfing man_surfing woman_swimming man_swimming woman_playing_water_polo " + + "man_playing_water_polo woman_rowing_boat man_rowing_boat horse_racing woman_biking man_biking woman_mountain_biking man_mountain_biking " + + "woman_in_steamy_room man_in_steamy_room woman_climbing man_climbing woman_in_lotus_position man_in_lotus_position " + + "running_shirt_with_sash medal military_medal first_place second_place " + + "third_place trophy rosette reminder_ribbon ticket tickets circus_tent woman_juggling man_juggling performing_arts art " + + "clapper microphone headphones musical_score musical_keyboard drum saxophone trumpet guitar violin game_die dart bowling " + + "video_game slot_machine sled curling_stone " + }, + + travel_places: { + icon: "rocket", + title: "Travel & Places", + emoji: "red_car taxi blue_car bus trolleybus race_car police_car ambulance fire_engine minibus truck articulated_lorry tractor " + + "scooter bike motor_scooter motorcycle rotating_light oncoming_police_car oncoming_bus oncoming_automobile oncoming_taxi " + + "aerial_tramway mountain_cableway suspension_railway railway_car train mountain_railway monorail bullettrain_side " + + "bullettrain_front light_rail steam_locomotive train2 metro tram station helicopter airplane_small airplane " + + "airplane_departure airplane_arriving rocket satellite_orbital seat canoe sailboat motorboat speedboat cruise_ship " + + "ferry ship anchor construction fuelpump busstop vertical_traffic_light traffic_light map moyai statue_of_liberty " + + "fountain tokyo_tower european_castle japanese_castle stadium ferris_wheel roller_coaster carousel_horse beach_umbrella " + + "beach island mountain mountain_snow mount_fuji volcano desert camping tent railway_track motorway construction_site " + + "factory house house_with_garden homes house_abandoned office department_store post_office european_post_office hospital " + + "bank hotel convenience_store school love_hotel wedding classical_building church mosque synagogue kaaba shinto_shrine " + + "japan rice_scene park sunrise sunrise_over_mountains stars sparkler fireworks city_sunset city_dusk cityscape " + + "night_with_stars milky_way bridge_at_night foggy flying_saucer" + }, + + objects: { + icon: "bulb", + title: "Objects", + emoji: "watch iphone calling computer keyboard desktop printer mouse_three_button trackball joystick compression minidisc " + + "floppy_disk cd dvd vhs camera camera_with_flash video_camera movie_camera projector film_frames telephone_receiver " + + "telephone pager fax tv radio microphone2 level_slider control_knobs stopwatch timer alarm_clock clock hourglass " + + "hourglass_flowing_sand satellite battery electric_plug bulb flashlight candle wastebasket oil money_with_wings " + + "dollar yen euro pound moneybag credit_card gem scales wrench hammer hammer_pick tools pick nut_and_bolt gear " + + "chains gun bomb knife dagger crossed_swords shield smoking coffin urn amphora crystal_ball prayer_beads barber " + + "alembic telescope microscope hole pill syringe thermometer toilet potable_water shower bathtub bath bellhop key " + + "key2 door couch bed sleeping_accommodation frame_photo shopping_bags shopping_cart gift balloon flags ribbon " + + "confetti_ball tada dolls izakaya_lantern wind_chime envelope envelope_with_arrow incoming_envelope e-mail " + + "love_letter inbox_tray outbox_tray package label mailbox_closed mailbox mailbox_with_mail mailbox_with_no_mail " + + "postbox postal_horn scroll page_with_curl page_facing_up bookmark_tabs bar_chart chart_with_upwards_trend " + + "chart_with_downwards_trend notepad_spiral calendar_spiral calendar date card_index card_box ballot_box " + + "file_cabinet clipboard file_folder open_file_folder dividers newspaper2 newspaper notebook " + + "notebook_with_decorative_cover ledger closed_book green_book blue_book orange_book books book bookmark link " + + "paperclip paperclips triangular_ruler straight_ruler pushpin round_pushpin scissors pen_ballpoint pen_fountain " + + "black_nib paintbrush crayon pencil pencil2 mag mag_right lock_with_ink_pen closed_lock_with_key lock unlock" + }, + + symbols: { + icon: "heartpulse", + title: "Symbols", + emoji: "heart orange_heart yellow_heart green_heart blue_heart purple_heart black_heart broken_heart heart_exclamation two_hearts " + + "revolving_hearts heartbeat heartpulse sparkling_heart cupid gift_heart heart_decoration peace cross star_and_crescent " + + "om_symbol wheel_of_dharma star_of_david six_pointed_star menorah yin_yang orthodox_cross place_of_worship ophiuchus " + + "aries taurus gemini cancer leo virgo libra scorpius sagittarius capricorn aquarius pisces id atom accept radioactive " + + "biohazard mobile_phone_off vibration_mode u6709 u7121 u7533 u55b6 u6708 eight_pointed_black_star vs white_flower " + + "ideograph_advantage secret congratulations u5408 u6e80 u5272 u7981 a b ab cl o2 sos x o octagonal_sign no_entry " + + "name_badge no_entry_sign 100 anger hotsprings no_pedestrians do_not_litter no_bicycles non-potable_water underage " + + "no_mobile_phones no_smoking exclamation grey_exclamation question grey_question bangbang interrobang low_brightness " + + "high_brightness part_alternation_mark warning children_crossing trident fleur-de-lis beginner recycle " + + "white_check_mark u6307 chart sparkle eight_spoked_asterisk negative_squared_cross_mark globe_with_meridians " + + "diamond_shape_with_a_dot_inside m cyclone zzz atm wc wheelchair parking u7a7a sa passport_control customs " + + "baggage_claim left_luggage mens womens baby_symbol restroom put_litter_in_its_place cinema signal_strength koko " + + "symbols information_source abc abcd capital_abcd ng ok up cool new free zero one two three four five six seven " + + "eight nine keycap_ten 1234 hash asterisk arrow_forward pause_button play_pause stop_button record_button eject " + + "track_next track_previous fast_forward rewind arrow_double_up arrow_double_down arrow_backward arrow_up_small " + + "arrow_down_small arrow_right arrow_left arrow_up arrow_down arrow_upper_right arrow_lower_right arrow_lower_left " + + "arrow_upper_left arrow_up_down left_right_arrow arrow_right_hook leftwards_arrow_with_hook arrow_heading_up " + + "arrow_heading_down twisted_rightwards_arrows repeat repeat_one arrows_counterclockwise arrows_clockwise " + + "musical_note notes heavy_plus_sign heavy_minus_sign heavy_division_sign heavy_multiplication_x heavy_dollar_sign " + + "currency_exchange tm copyright registered wavy_dash curly_loop loop end back on top soon heavy_check_mark " + + "ballot_box_with_check radio_button white_circle black_circle red_circle blue_circle small_red_triangle " + + "small_red_triangle_down small_orange_diamond small_blue_diamond large_orange_diamond large_blue_diamond " + + "white_square_button black_square_button black_small_square white_small_square black_medium_small_square " + + "white_medium_small_square black_medium_square white_medium_square black_large_square white_large_square speaker " + + "mute sound loud_sound bell no_bell mega loudspeaker speech_left eye_in_speech_bubble speech_balloon thought_balloon " + + "anger_right spades clubs hearts diamonds black_joker flower_playing_cards mahjong clock1 clock2 clock3 clock4 clock5 " + + "clock6 clock7 clock8 clock9 clock10 clock11 clock12 clock130 clock230 clock330 clock430 clock530 clock630 " + + "clock730 clock830 clock930 clock1030 clock1130 clock1230" + }, + + flags: { + icon: "flag_gb", + title: "Flags", + emoji: "flag_white flag_black checkered_flag triangular_flag_on_post rainbow_flag flag_af flag_ax flag_al flag_dz flag_as " + + "flag_ad flag_ao flag_ai flag_aq flag_ag flag_ar flag_am flag_aw flag_au flag_at flag_az flag_bs flag_bh flag_bd flag_bb " + + "flag_by flag_be flag_bz flag_bj flag_bm flag_bt flag_bo flag_ba flag_bw flag_br flag_io flag_vg flag_bn flag_bg flag_bf " + + "flag_bi flag_kh flag_cm flag_ca flag_ic flag_cv flag_bq flag_ky flag_cf flag_td flag_cl flag_cn flag_cx flag_cc flag_co " + + "flag_km flag_cg flag_cd flag_ck flag_cr flag_ci flag_hr flag_cu flag_cw flag_cy flag_cz flag_dk flag_dj flag_dm flag_do " + + "flag_ec flag_eg flag_sv flag_gq flag_er flag_ee flag_et flag_eu flag_fk flag_fo flag_fj flag_fi flag_fr flag_gf flag_pf " + + "flag_tf flag_ga flag_gm flag_ge flag_de flag_gh flag_gi flag_gr flag_gl flag_gd flag_gp flag_gu flag_gt flag_gg flag_gn " + + "flag_gw flag_gy flag_ht flag_hn flag_hk flag_hu flag_is flag_in flag_id flag_ir flag_iq flag_ie flag_im flag_il flag_it " + + "flag_jm flag_jp crossed_flags flag_je flag_jo flag_kz flag_ke flag_ki flag_xk flag_kw flag_kg flag_la flag_lv flag_lb " + + "flag_ls flag_lr flag_ly flag_li flag_lt flag_lu flag_mo flag_mk flag_mg flag_mw flag_my flag_mv flag_ml flag_mt flag_mh " + + "flag_mq flag_mr flag_mu flag_yt flag_mx flag_fm flag_md flag_mc flag_mn flag_me flag_ms flag_ma flag_mz flag_mm flag_na " + + "flag_nr flag_np flag_nl flag_nc flag_nz flag_ni flag_ne flag_ng flag_nu flag_nf flag_kp flag_mp flag_no flag_om flag_pk " + + "flag_pw flag_ps flag_pa flag_pg flag_py flag_pe flag_ph flag_pn flag_pl flag_pt flag_pr flag_qa flag_re flag_ro flag_ru " + + "flag_rw flag_ws flag_sm flag_st flag_sa flag_sn flag_rs flag_sc flag_sl flag_sg flag_sx flag_sk flag_si flag_gs flag_sb " + + "flag_so flag_za flag_kr flag_ss flag_es flag_lk flag_bl flag_sh flag_kn flag_lc flag_pm flag_vc flag_sd flag_sr flag_sz " + + "flag_se flag_ch flag_sy flag_tw flag_tj flag_tz flag_th flag_tl flag_tg flag_tk flag_to flag_tt flag_tn flag_tr flag_tm " + + "flag_tc flag_tv flag_vi flag_ug flag_ua flag_ae flag_gb flag_us flag_uy flag_uz flag_vu flag_va flag_ve flag_vn flag_wf " + + "flag_eh flag_ye flag_zm flag_zw flag_ac flag_ta flag_bv flag_hm flag_sj flag_um flag_ea flag_cp flag_dg flag_mf " + + "united_nations england scotland wales" + } + }; + } else { + defaultOptions.filters = { + tones: { + title: "Diversity", + emoji: "santa runner surfer swimmer lifter ear nose point_up_2 point_down point_left point_right punch " + + "wave ok_hand thumbsup thumbsdown clap open_hands boy girl man woman cop bride_with_veil person_with_blond_hair " + + "man_with_gua_pi_mao man_with_turban older_man grandma baby construction_worker princess angel " + + "information_desk_person guardsman dancer nail_care massage haircut muscle spy hand_splayed middle_finger " + + "vulcan no_good ok_woman bow raising_hand raised_hands person_frowning person_with_pouting_face pray rowboat " + + "bicyclist mountain_bicyclist walking bath metal point_up basketball_player fist raised_hand v writing_hand" + }, + + recent: { + icon: "clock3", + title: "Recent", + emoji: "" + }, + + smileys_people: { + icon: "yum", + title: "Smileys & People", + emoji: "grinning grimacing grin joy smiley smile sweat_smile laughing innocent wink blush slight_smile " + + "upside_down relaxed yum relieved heart_eyes kissing_heart kissing kissing_smiling_eyes " + + "kissing_closed_eyes stuck_out_tongue_winking_eye stuck_out_tongue_closed_eyes stuck_out_tongue " + + "money_mouth nerd sunglasses hugging smirk no_mouth neutral_face expressionless unamused rolling_eyes " + + "thinking flushed disappointed worried angry rage pensive confused slight_frown frowning2 persevere " + + "confounded tired_face weary triumph open_mouth scream fearful cold_sweat hushed frowning anguished " + + "cry disappointed_relieved sleepy sweat sob dizzy_face astonished zipper_mouth mask thermometer_face " + + "head_bandage sleeping zzz poop smiling_imp imp japanese_ogre japanese_goblin skull ghost alien robot " + + "smiley_cat smile_cat joy_cat heart_eyes_cat smirk_cat kissing_cat scream_cat crying_cat_face " + + "pouting_cat raised_hands clap wave thumbsup thumbsdown punch fist v ok_hand raised_hand open_hands " + + "muscle pray point_up point_up_2 point_down point_left point_right middle_finger hand_splayed metal " + + "vulcan writing_hand nail_care lips tongue ear nose eye eyes bust_in_silhouette busts_in_silhouette " + + "speaking_head baby boy girl man woman person_with_blond_hair older_man older_woman man_with_gua_pi_mao " + + "man_with_turban cop construction_worker guardsman spy santa angel princess bride_with_veil walking " + + "runner dancer dancers couple two_men_holding_hands two_women_holding_hands bow information_desk_person " + + "no_good ok_woman raising_hand person_with_pouting_face person_frowning haircut massage couple_with_heart " + + "couple_ww couple_mm couplekiss kiss_ww kiss_mm family family_mwg family_mwgb family_mwbb family_mwgg " + + "family_wwb family_wwg family_wwgb family_wwbb family_wwgg family_mmb family_mmg family_mmgb family_mmbb " + + "family_mmgg womans_clothes shirt jeans necktie dress bikini kimono lipstick kiss footprints high_heel " + + "sandal boot mans_shoe athletic_shoe womans_hat tophat helmet_with_cross mortar_board crown school_satchel " + + "pouch purse handbag briefcase eyeglasses dark_sunglasses ring closed_umbrella" + }, + + animals_nature: { + icon: "hamster", + title: "Animals & Nature", + emoji: "dog cat mouse hamster rabbit bear panda_face koala tiger lion_face cow pig pig_nose frog " + + "octopus monkey_face see_no_evil hear_no_evil speak_no_evil monkey chicken penguin bird baby_chick " + + "hatching_chick hatched_chick wolf boar horse unicorn bee bug snail beetle ant spider scorpion crab " + + "snake turtle tropical_fish fish blowfish dolphin whale whale2 crocodile leopard tiger2 water_buffalo " + + "ox cow2 dromedary_camel camel elephant goat ram sheep racehorse pig2 rat mouse2 rooster turkey dove " + + "dog2 poodle cat2 rabbit2 chipmunk feet dragon dragon_face cactus christmas_tree evergreen_tree " + + "deciduous_tree palm_tree seedling herb shamrock four_leaf_clover bamboo tanabata_tree leaves " + + "fallen_leaf maple_leaf ear_of_rice hibiscus sunflower rose tulip blossom cherry_blossom bouquet " + + "mushroom chestnut jack_o_lantern shell spider_web earth_americas earth_africa earth_asia full_moon " + + "waning_gibbous_moon last_quarter_moon waning_crescent_moon new_moon waxing_crescent_moon " + + "first_quarter_moon waxing_gibbous_moon new_moon_with_face full_moon_with_face first_quarter_moon_with_face " + + "last_quarter_moon_with_face sun_with_face crescent_moon star star2 dizzy sparkles comet sunny " + + "white_sun_small_cloud partly_sunny white_sun_cloud white_sun_rain_cloud cloud cloud_rain " + + "thunder_cloud_rain cloud_lightning zap fire boom snowflake cloud_snow snowman2 snowman wind_blowing_face " + + "dash cloud_tornado fog umbrella2 umbrella droplet sweat_drops ocean" + }, + + food_drink: { + icon: "pizza", + title: "Food & Drink", + emoji: "green_apple apple pear tangerine lemon banana watermelon grapes strawberry melon cherries peach " + + "pineapple tomato eggplant hot_pepper corn sweet_potato honey_pot bread cheese poultry_leg meat_on_bone " + + "fried_shrimp egg hamburger fries hotdog pizza spaghetti taco burrito ramen stew fish_cake sushi bento " + + "curry rice_ball rice rice_cracker oden dango shaved_ice ice_cream icecream cake birthday custard candy " + + "lollipop chocolate_bar popcorn doughnut cookie beer beers wine_glass cocktail tropical_drink champagne " + + "sake tea coffee baby_bottle fork_and_knife fork_knife_plate" + }, + + activity: { + icon: "basketball", + title: "Activity", + emoji: "soccer basketball football baseball tennis volleyball rugby_football 8ball golf golfer ping_pong " + + "badminton hockey field_hockey cricket ski skier snowboarder ice_skate bow_and_arrow fishing_pole_and_fish " + + "rowboat swimmer surfer bath basketball_player lifter bicyclist mountain_bicyclist horse_racing levitate " + + "trophy running_shirt_with_sash medal military_medal reminder_ribbon rosette ticket tickets performing_arts " + + "art circus_tent microphone headphones musical_score musical_keyboard saxophone trumpet guitar violin " + + "clapper video_game space_invader dart game_die slot_machine bowling" + }, + + travel_places: { + icon: "rocket", + title: "Travel & Places", + emoji: "red_car taxi blue_car bus trolleybus race_car police_car ambulance fire_engine minibus truck " + + "articulated_lorry tractor motorcycle bike rotating_light oncoming_police_car oncoming_bus " + + "oncoming_automobile oncoming_taxi aerial_tramway mountain_cableway suspension_railway railway_car " + + "train monorail bullettrain_side bullettrain_front light_rail mountain_railway steam_locomotive train2 " + + "metro tram station helicopter airplane_small airplane airplane_departure airplane_arriving sailboat " + + "motorboat speedboat ferry cruise_ship rocket satellite_orbital seat anchor construction fuelpump busstop " + + "vertical_traffic_light traffic_light checkered_flag ship ferris_wheel roller_coaster carousel_horse " + + "construction_site foggy tokyo_tower factory fountain rice_scene mountain mountain_snow mount_fuji volcano " + + "japan camping tent park motorway railway_track sunrise sunrise_over_mountains desert beach island " + + "city_sunset city_dusk cityscape night_with_stars bridge_at_night milky_way stars sparkler fireworks " + + "rainbow homes european_castle japanese_castle stadium statue_of_liberty house house_with_garden " + + "house_abandoned office department_store post_office european_post_office hospital bank hotel " + + "convenience_store school love_hotel wedding classical_building church mosque synagogue kaaba shinto_shrine" + }, + + objects: { + icon: "bulb", + title: "Objects", + emoji: "watch iphone calling computer keyboard desktop printer mouse_three_button trackball joystick " + + "compression minidisc floppy_disk cd dvd vhs camera camera_with_flash video_camera movie_camera projector " + + "film_frames telephone_receiver telephone pager fax tv radio microphone2 level_slider control_knobs " + + "stopwatch timer alarm_clock clock hourglass_flowing_sand hourglass satellite battery electric_plug bulb " + + "flashlight candle wastebasket oil money_with_wings dollar yen euro pound moneybag credit_card gem scales " + + "wrench hammer hammer_pick tools pick nut_and_bolt gear chains gun bomb knife dagger crossed_swords shield " + + "smoking skull_crossbones coffin urn amphora crystal_ball prayer_beads barber alembic telescope microscope " + + "hole pill syringe thermometer label bookmark toilet shower bathtub key key2 couch sleeping_accommodation " + + "bed door bellhop frame_photo map beach_umbrella moyai shopping_bags balloon flags ribbon gift confetti_ball " + + "tada dolls wind_chime crossed_flags izakaya_lantern envelope envelope_with_arrow incoming_envelope e-mail " + + "love_letter postbox mailbox_closed mailbox mailbox_with_mail mailbox_with_no_mail package postal_horn " + + "inbox_tray outbox_tray scroll page_with_curl bookmark_tabs bar_chart chart_with_upwards_trend " + + "chart_with_downwards_trend page_facing_up date calendar calendar_spiral card_index card_box ballot_box " + + "file_cabinet clipboard notepad_spiral file_folder open_file_folder dividers newspaper2 newspaper notebook " + + "closed_book green_book blue_book orange_book notebook_with_decorative_cover ledger books book link " + + "paperclip paperclips scissors triangular_ruler straight_ruler pushpin round_pushpin triangular_flag_on_post " + + "flag_white flag_black closed_lock_with_key lock unlock lock_with_ink_pen pen_ballpoint pen_fountain " + + "black_nib pencil pencil2 crayon paintbrush mag mag_right" + }, + + symbols: { + icon: "heartpulse", + title: "Symbols", + emoji: "heart yellow_heart green_heart blue_heart purple_heart broken_heart heart_exclamation two_hearts " + + "revolving_hearts heartbeat heartpulse sparkling_heart cupid gift_heart heart_decoration peace cross " + + "star_and_crescent om_symbol wheel_of_dharma star_of_david six_pointed_star menorah yin_yang orthodox_cross " + + "place_of_worship ophiuchus aries taurus gemini cancer leo virgo libra scorpius sagittarius capricorn " + + "aquarius pisces id atom u7a7a u5272 radioactive biohazard mobile_phone_off vibration_mode u6709 u7121 " + + "u7533 u55b6 u6708 eight_pointed_black_star vs accept white_flower ideograph_advantage secret congratulations " + + "u5408 u6e80 u7981 a b ab cl o2 sos no_entry name_badge no_entry_sign x o anger hotsprings no_pedestrians " + + "do_not_litter no_bicycles non-potable_water underage no_mobile_phones exclamation grey_exclamation question " + + "grey_question bangbang interrobang 100 low_brightness high_brightness trident fleur-de-lis part_alternation_mark " + + "warning children_crossing beginner recycle u6307 chart sparkle eight_spoked_asterisk negative_squared_cross_mark " + + "white_check_mark diamond_shape_with_a_dot_inside cyclone loop globe_with_meridians m atm sa passport_control " + + "customs baggage_claim left_luggage wheelchair no_smoking wc parking potable_water mens womens baby_symbol " + + "restroom put_litter_in_its_place cinema signal_strength koko ng ok up cool new free zero one two three four " + + "five six seven eight nine ten 1234 arrow_forward pause_button play_pause stop_button record_button track_next " + + "track_previous fast_forward rewind twisted_rightwards_arrows repeat repeat_one arrow_backward arrow_up_small " + + "arrow_down_small arrow_double_up arrow_double_down arrow_right arrow_left arrow_up arrow_down arrow_upper_right " + + "arrow_lower_right arrow_lower_left arrow_upper_left arrow_up_down left_right_arrow arrows_counterclockwise " + + "arrow_right_hook leftwards_arrow_with_hook arrow_heading_up arrow_heading_down hash asterisk information_source " + + "abc abcd capital_abcd symbols musical_note notes wavy_dash curly_loop heavy_check_mark arrows_clockwise " + + "heavy_plus_sign heavy_minus_sign heavy_division_sign heavy_multiplication_x heavy_dollar_sign currency_exchange " + + "copyright registered tm end back on top soon ballot_box_with_check radio_button white_circle black_circle " + + "red_circle large_blue_circle small_orange_diamond small_blue_diamond large_orange_diamond large_blue_diamond " + + "small_red_triangle black_small_square white_small_square black_large_square white_large_square small_red_triangle_down " + + "black_medium_square white_medium_square black_medium_small_square white_medium_small_square black_square_button " + + "white_square_button speaker sound loud_sound mute mega loudspeaker bell no_bell black_joker mahjong spades " + + "clubs hearts diamonds flower_playing_cards thought_balloon anger_right speech_balloon clock1 clock2 clock3 " + + "clock4 clock5 clock6 clock7 clock8 clock9 clock10 clock11 clock12 clock130 clock230 clock330 clock430 " + + "clock530 clock630 clock730 clock830 clock930 clock1030 clock1130 clock1230 eye_in_speech_bubble" + }, + + flags: { + icon: "flag_gb", + title: "Flags", + emoji: "ac af al dz ad ao ai ag ar am aw au at az bs bh bd bb by be bz bj bm bt bo ba bw br bn bg bf bi " + + "cv kh cm ca ky cf td flag_cl cn co km cg flag_cd cr hr cu cy cz dk dj dm do ec eg sv gq er ee et fk fo " + + "fj fi fr pf ga gm ge de gh gi gr gl gd gu gt gn gw gy ht hn hk hu is in flag_id ir iq ie il it ci jm jp " + + "je jo kz ke ki xk kw kg la lv lb ls lr ly li lt lu mo mk mg mw my mv ml mt mh mr mu mx fm md mc mn me " + + "ms ma mz mm na nr np nl nc nz ni ne flag_ng nu kp no om pk pw ps pa pg py pe ph pl pt pr qa ro ru rw " + + "sh kn lc vc ws sm st flag_sa sn rs sc sl sg sk si sb so za kr es lk sd sr sz se ch sy tw tj tz th tl " + + "tg to tt tn tr flag_tm flag_tm ug ua ae gb us vi uy uz vu va ve vn wf eh ye zm zw re ax ta io bq cx " + + "cc gg im yt nf pn bl pm gs tk bv hm sj um ic ea cp dg as aq vg ck cw eu gf tf gp mq mp sx ss tc " + } + }; + }; + + return defaultOptions; + }; + function getOptions(options) { + var default_options = getDefaultOptions(); + if (options && options['filters']) { + var filters = default_options.filters; + $.each(options['filters'], function(filter, data) { + if (!isObject(data) || $.isEmptyObject(data)) { + delete filters[filter]; + return; + } + $.each(data, function(key, val) { + filters[filter][key] = val; + }); + }); + options['filters'] = filters; + } + return $.extend({}, default_options, options); + }; + + var saveSelection, restoreSelection; + if (window.getSelection && document.createRange) { + saveSelection = function(el) { + var sel = window.getSelection && window.getSelection(); + if (sel && sel.rangeCount > 0) { + return sel.getRangeAt(0); + } + }; + + restoreSelection = function(el, sel) { + var range = document.createRange(); + range.setStart(sel.startContainer, sel.startOffset); + range.setEnd(sel.endContainer, sel.endOffset) + + sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + } + } else if (document.selection && document.body.createTextRange) { + saveSelection = function(el) { + return document.selection.createRange(); + }; + + restoreSelection = function(el, sel) { + var textRange = document.body.createTextRange(); + textRange.moveToElementText(el); + textRange.setStart(sel.startContanier, sel.startOffset); + textRange.setEnd(sel.endContainer, sel.endOffset); + textRange.select(); + }; + } + + + var uniRegexp; + function unicodeTo(str, template) { + return str.replace(uniRegexp, function(unicodeChar) { + var map = emojione[(emojioneSupportMode === 0 ? 'jsecapeMap' : 'jsEscapeMap')]; + if (typeof unicodeChar !== 'undefined' && unicodeChar in map) { + return getTemplate(template, map[unicodeChar], emojione.toShort(unicodeChar)); + } + return unicodeChar; + }); + } + function htmlFromText(str, self) { + str = str + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/`/g, '`') + .replace(/(?:\r\n|\r|\n)/g, '\n') + .replace(/(\n+)/g, '
$1
') + .replace(/\n/g, '
') + .replace(/<\/div>/g, ''); + if (self.shortnames) { + str = emojione.shortnameToUnicode(str); + } + return unicodeTo(str, self.emojiTemplate) + .replace(/\t/g, '    ') + .replace(/ /g, '  '); + } + function textFromHtml(str, self) { + str = str + .replace(/ /g, '\n') + .replace(/ /g, '\t') + .replace(/]*alt="([^"]+)"[^>]*>/ig, '$1') + .replace(/\n|\r/g, '') + .replace(/]*>/ig, '\n') + .replace(/(?:<(?:div|p|ol|ul|li|pre|code|object)[^>]*>)+/ig, '
') + .replace(/(?:<\/(?:div|p|ol|ul|li|pre|code|object)>)+/ig, '
') + .replace(/\n
<\/div>/ig, '\n') + .replace(/
<\/div>\n/ig, '\n') + .replace(/(?:
)+<\/div>/ig, '\n') + .replace(/([^\n])<\/div>
/ig, '$1\n') + .replace(/(?:<\/div>)+/ig, '
') + .replace(/([^\n])<\/div>([^\n])/ig, '$1\n$2') + .replace(/<\/div>/ig, '') + .replace(/([^\n])
/ig, '$1\n') + .replace(/\n
/ig, '\n') + .replace(/
\n/ig, '\n\n') + .replace(/<(?:[^>]+)?>/g, '') + .replace(new RegExp(invisibleChar, 'g'), '') + .replace(/ /g, ' ') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/`/g, '`') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/&/g, '&'); + + switch (self.saveEmojisAs) { + case 'image': + str = unicodeTo(str, self.emojiTemplate); + break; + case 'shortname': + str = emojione.toShort(str); + } + return str; + } + function calcButtonPosition() { + var self = this, + offset = self.editor[0].offsetWidth - self.editor[0].clientWidth, + current = parseInt(self.button.css('marginRight')); + if (current !== offset) { + self.button.css({marginRight: offset}); + if (self.floatingPicker) { + self.picker.css({right: parseInt(self.picker.css('right')) - current + offset}); + } + } + } + function lazyLoading() { + var self = this; + if (!self.sprite && self.lasyEmoji[0] && self.lasyEmoji.eq(0).is(".lazy-emoji")) { + var pickerTop = self.picker.offset().top, + pickerBottom = pickerTop + self.picker.height() + 20; + + self.lasyEmoji.each(function() { + var e = $(this), top = e.offset().top; + + if (top > pickerTop && top < pickerBottom) { + e.attr("src", e.data("src")).removeClass("lazy-emoji"); + } + + if (top > pickerBottom) { + return false; + } + }); + self.lasyEmoji = self.lasyEmoji.filter(".lazy-emoji"); + } + }; + function selector (prefix, skip_dot) { + return (skip_dot ? '' : '.') + css_class + (prefix ? ("-" + prefix) : ""); + } + function div(prefix) { + var parent = $('
', isObject(prefix) ? prefix : {"class" : selector(prefix, true)}); + $.each(slice.call(arguments).slice(1), function(i, child) { + if ($.isFunction(child)) { + child = child.call(parent); + } + if (child) { + $(child).appendTo(parent); + } + }); + return parent; + } + function getRecent () { + return localStorage.getItem("recent_emojis") || ""; + } + function updateRecent(self, show) { + var emojis = getRecent(); + if (!self.recent || self.recent !== emojis || show) { + if (emojis.length) { + var skinnable = self.scrollArea.is(".skinnable"), + scrollTop, height; + + if (!skinnable) { + scrollTop = self.scrollArea.scrollTop(); + if (show) { + self.recentCategory.show(); + } + height = self.recentCategory.is(":visible") ? self.recentCategory.height() : 0; + } + + var items = shortnameTo(emojis, self.emojiBtnTemplate, true).split('|').join(''); + self.recentCategory.children(".emojibtn").remove(); + $(items).insertAfter(self.recentCategory.children(".emojionearea-category-title")); + + + self.recentCategory.children(".emojibtn").on("click", function() { + self.trigger("emojibtn.click", $(this)); + }); + + self.recentFilter.show(); + + if (!skinnable) { + self.recentCategory.show(); + + var height2 = self.recentCategory.height(); + + if (height !== height2) { + self.scrollArea.scrollTop(scrollTop + height2 - height); + } + } + } else { + if (self.recentFilter.hasClass("active")) { + self.recentFilter.removeClass("active").next().addClass("active"); + } + self.recentCategory.hide(); + self.recentFilter.hide(); + } + self.recent = emojis; + } + }; + function setRecent(self, emoji) { + var recent = getRecent(); + var emojis = recent.split("|"); + + var index = emojis.indexOf(emoji); + if (index !== -1) { + emojis.splice(index, 1); + } + emojis.unshift(emoji); + + if (emojis.length > 9) { + emojis.pop(); + } + + localStorage.setItem("recent_emojis", emojis.join("|")); + + updateRecent(self); + }; +// see https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js + function supportsLocalStorage () { + var test = 'test'; + try { + localStorage.setItem(test, test); + localStorage.removeItem(test); + return true; + } catch(e) { + return false; + } + } + function init(self, source, options) { + //calcElapsedTime('init', function() { + self.options = options = getOptions(options); + self.sprite = options.sprite && emojioneSupportMode < 3; + self.inline = options.inline === null ? source.is("INPUT") : options.inline; + self.shortnames = options.shortnames; + self.saveEmojisAs = options.saveEmojisAs; + self.standalone = options.standalone; + self.emojiTemplate = '{alt}' : 'emoji" src="{img}"/>'); + self.emojiTemplateAlt = self.sprite ? '' : ''; + self.emojiBtnTemplate = '' + self.emojiTemplateAlt + ''; + self.recentEmojis = options.recentEmojis && supportsLocalStorage(); + + var pickerPosition = options.pickerPosition; + self.floatingPicker = pickerPosition === 'top' || pickerPosition === 'bottom'; + self.source = source; + + if (source.is(":disabled") || source.is(".disabled")) { + self.disable(); + } + + var sourceValFunc = source.is("TEXTAREA") || source.is("INPUT") ? "val" : "text", + editor, button, picker, filters, filtersBtns, searchPanel, emojisList, categories, categoryBlocks, scrollArea, + tones = div('tones', + options.tones ? + function() { + this.addClass(selector('tones-' + options.tonesStyle, true)); + for (var i = 0; i <= 5; i++) { + this.append($("", { + "class": "btn-tone btn-tone-" + i + (!i ? " active" : ""), + "data-skin": i, + role: "button" + })); + } + } : null + ), + app = div({ + "class" : css_class + ((self.standalone) ? " " + css_class + "-standalone " : " ") + (source.attr("class") || ""), + role: "application" + }, + editor = self.editor = div("editor").attr({ + contenteditable: (self.standalone) ? false : true, + placeholder: options.placeholder || source.data("placeholder") || source.attr("placeholder") || "", + tabindex: 0 + }), + button = self.button = div('button', + div('button-open'), + div('button-close') + ).attr('title', options.buttonTitle), + picker = self.picker = div('picker', + div('wrapper', + filters = div('filters'), + (options.search ? + searchPanel = div('search-panel', + div('search', + options.search ? + function() { + self.search = $("", { + "placeholder": options.searchPlaceholder || "", + "type": "text", + "class": "search" + }); + this.append(self.search); + } : null + ), + tones + ) : null + ), + scrollArea = div('scroll-area', + options.tones && !options.search ? div('tones-panel', + tones + ) : null, + emojisList = div('emojis-list') + ) + ) + ).addClass(selector('picker-position-' + options.pickerPosition, true)) + .addClass(selector('filters-position-' + options.filtersPosition, true)) + .addClass(selector('search-position-' + options.searchPosition, true)) + .addClass('hidden') + ); + + if (options.search) { + searchPanel.addClass(selector('with-search', true)); + } + + self.searchSel = null; + + editor.data(source.data()); + + $.each(options.attributes, function(attr, value) { + editor.attr(attr, value); + }); + + var mainBlock = div('category-block').attr({"data-tone": 0}).prependTo(emojisList); + + $.each(options.filters, function(filter, params) { + var skin = 0; + if (filter === 'recent' && !self.recentEmojis) { + return; + } + if (filter !== 'tones') { + $("", { + "class": selector("filter", true) + " " + selector("filter-" + filter, true), + "data-filter": filter, + title: params.title + }) + .wrapInner(shortnameTo(params.icon, self.emojiTemplateAlt)) + .appendTo(filters); + } else if (options.tones) { + skin = 5; + } else { + return; + } + + do { + var category, + items = params.emoji.replace(/[\s,;]+/g, '|'); + + if (skin === 0) { + category = div('category').attr({ + name: filter, + "data-tone": skin + }).appendTo(mainBlock); + } else { + category = div('category-block').attr({ + name: filter, + "data-tone": skin + }).appendTo(emojisList); + } + + if (skin > 0) { + category.hide(); + items = items.split('|').join('_tone' + skin + '|') + '_tone' + skin; + } + + if (filter === 'recent') { + items = getRecent(); + } + + items = shortnameTo(items, + self.sprite ? + '' : + '', + true).split('|').join(''); + + category.html(items); + $('
').text(params.title).prependTo(category); + } while (--skin > 0); + }); + + options.filters = null; + if (!self.sprite) { + self.lasyEmoji = emojisList.find(".lazy-emoji"); + } + + filtersBtns = filters.find(selector("filter")); + filtersBtns.eq(0).addClass("active"); + categoryBlocks = emojisList.find(selector("category-block")) + categories = emojisList.find(selector("category")) + + self.recentFilter = filtersBtns.filter('[data-filter="recent"]'); + self.recentCategory = categories.filter("[name=recent]"); + + self.scrollArea = scrollArea; + + if (options.container) { + $(options.container).wrapInner(app); + } else { + app.insertAfter(source); + } + + if (options.hideSource) { + source.hide(); + } + + self.setText(source[sourceValFunc]()); + source[sourceValFunc](self.getText()); + calcButtonPosition.apply(self); + + // if in standalone mode and no value is set, initialise with a placeholder + if (self.standalone && !self.getText().length) { + var placeholder = $(source).data("emoji-placeholder") || options.emojiPlaceholder; + self.setText(placeholder); + editor.addClass("has-placeholder"); + } + + // attach() must be called before any .on() methods !!! + // 1) attach() stores events into possibleEvents{}, + // 2) .on() calls bindEvent() and stores handlers into eventStorage{}, + // 3) bindEvent() finds events in possibleEvents{} and bind founded via jQuery.on() + // 4) attached events via jQuery.on() calls trigger() + // 5) trigger() calls handlers stored into eventStorage{} + + attach(self, emojisList.find(".emojibtn"), {click: "emojibtn.click"}); + attach(self, window, {resize: "!resize"}); + attach(self, tones.children(), {click: "tone.click"}); + attach(self, [picker, button], {mousedown: "!mousedown"}, editor); + attach(self, button, {click: "button.click"}); + attach(self, editor, {paste :"!paste"}, editor); + attach(self, editor, ["focus", "blur"], function() { return self.stayFocused ? false : editor; } ); + attach(self, picker, {mousedown: "picker.mousedown", mouseup: "picker.mouseup", click: "picker.click", + keyup: "picker.keyup", keydown: "picker.keydown", keypress: "picker.keypress"}); + attach(self, editor, ["mousedown", "mouseup", "click", "keyup", "keydown", "keypress"]); + attach(self, picker.find(".emojionearea-filter"), {click: "filter.click"}); + attach(self, source, {change: "source.change"}); + + if (options.search) { + attach(self, self.search, {keyup: "search.keypress", focus: "search.focus", blur: "search.blur"}); + } + + var noListenScroll = false; + scrollArea.on('scroll', function () { + if (!noListenScroll) { + lazyLoading.call(self); + if (scrollArea.is(":not(.skinnable)")) { + var item = categories.eq(0), scrollTop = scrollArea.offset().top; + categories.each(function (i, e) { + if ($(e).offset().top - scrollTop >= 10) { + return false; + } + item = $(e); + }); + var filter = filtersBtns.filter('[data-filter="' + item.attr("name") + '"]'); + if (filter[0] && !filter.is(".active")) { + filtersBtns.removeClass("active"); + filter.addClass("active"); + } + } + } + }); + + self.on("@filter.click", function(filter) { + var isActive = filter.is(".active"); + if (scrollArea.is(".skinnable")) { + if (isActive) return; + tones.children().eq(0).click(); + } + noListenScroll = true; + if (!isActive) { + filtersBtns.filter(".active").removeClass("active"); + filter.addClass("active"); + } + var headerOffset = categories.filter('[name="' + filter.data('filter') + '"]').offset().top, + scroll = scrollArea.scrollTop(), + offsetTop = scrollArea.offset().top; + + scrollArea.stop().animate({ + scrollTop: headerOffset + scroll - offsetTop - 2 + }, 200, 'swing', function () { + lazyLoading.call(self); + noListenScroll = false; + }); + }) + + .on("@picker.show", function() { + if (self.recentEmojis) { + updateRecent(self); + } + lazyLoading.call(self); + }) + + .on("@tone.click", function(tone) { + tones.children().removeClass("active"); + var skin = tone.addClass("active").data("skin"); + if (skin) { + scrollArea.addClass("skinnable"); + categoryBlocks.hide().filter("[data-tone=" + skin + "]").show(); + filtersBtns.removeClass("active");//.not('[data-filter="recent"]').eq(0).addClass("active"); + } else { + scrollArea.removeClass("skinnable"); + categoryBlocks.hide().filter("[data-tone=0]").show(); + filtersBtns.eq(0).click(); + } + lazyLoading.call(self); + if (options.search) { + self.trigger('search.keypress'); + } + }) + + .on("@button.click", function(button) { + if (button.is(".active")) { + self.hidePicker(); + } else { + self.showPicker(); + self.searchSel = null; + } + }) + + .on("@!paste", function(editor, event) { + + var pasteText = function(text) { + var caretID = "caret-" + (new Date()).getTime(); + var html = htmlFromText(text, self); + pasteHtmlAtCaret(html); + pasteHtmlAtCaret(''); + editor.scrollTop(editorScrollTop); + var caret = $("#" + caretID), + top = caret.offset().top - editor.offset().top, + height = editor.height(); + if (editorScrollTop + top >= height || editorScrollTop > top) { + editor.scrollTop(editorScrollTop + top - 2 * height/3); + } + caret.remove(); + self.stayFocused = false; + calcButtonPosition.apply(self); + trigger(self, 'paste', [editor, text, html]); + }; + + if (event.originalEvent.clipboardData) { + var text = event.originalEvent.clipboardData.getData('text/plain'); + pasteText(text); + + if (event.preventDefault){ + event.preventDefault(); + } else { + event.stop(); + } + + event.returnValue = false; + event.stopPropagation(); + return false; + } + + self.stayFocused = true; + // insert invisible character for fix caret position + pasteHtmlAtCaret('' + invisibleChar + ''); + + var sel = saveSelection(editor[0]), + editorScrollTop = editor.scrollTop(), + clipboard = $("
", {contenteditable: true}) + .css({position: "fixed", left: "-999px", width: "1px", height: "1px", top: "20px", overflow: "hidden"}) + .appendTo($("BODY")) + .focus(); + + window.setTimeout(function() { + editor.focus(); + restoreSelection(editor[0], sel); + var text = textFromHtml(clipboard.html().replace(/\r\n|\n|\r/g, '
'), self); + clipboard.remove(); + pasteText(text); + }, 200); + }) + + .on("@emojibtn.click", function(emojibtn) { + editor.removeClass("has-placeholder"); + + if (self.searchSel !== null) { + editor.focus(); + restoreSelection(editor[0], self.searchSel); + self.searchSel = null; + } + + if (self.standalone) { + editor.html(shortnameTo(emojibtn.data("name"), self.emojiTemplate)); + self.trigger("blur"); + } else { + saveSelection(editor[0]); + pasteHtmlAtCaret(shortnameTo(emojibtn.data("name"), self.emojiTemplate)); + } + + if (self.recentEmojis) { + setRecent(self, emojibtn.data("name")); + } + + // self.search.val('').trigger("change"); + self.trigger('search.keypress'); + }) + + .on("@!resize @keyup @emojibtn.click", calcButtonPosition) + + .on("@!mousedown", function(editor, event) { + if ($(event.target).hasClass('search')) { + // Allow search clicks + self.stayFocused = true; + if (self.searchSel === null) { + self.searchSel = saveSelection(editor[0]); + } + } else { + if (!app.is(".focused")) { + editor.trigger("focus"); + } + event.preventDefault(); + } + return false; + }) + + .on("@change", function() { + var html = self.editor.html().replace(/<\/?(?:div|span|p)[^>]*>/ig, ''); + // clear input: chrome adds
when contenteditable is empty + if (!html.length || /^]*>$/i.test(html)) { + self.editor.html(self.content = ''); + } + source[sourceValFunc](self.getText()); + }) + + .on("@source.change", function() { + self.setText(source[sourceValFunc]()); + trigger('change'); + }) + + .on("@focus", function() { + app.addClass("focused"); + }) + + .on("@blur", function() { + app.removeClass("focused"); + + if (options.hidePickerOnBlur) { + self.hidePicker(); + } + + var content = self.editor.html(); + if (self.content !== content) { + self.content = content; + trigger(self, 'change', [self.editor]); + source.trigger("blur").trigger("change"); + } else { + source.trigger("blur"); + } + + if (options.search) { + self.search.val(''); + self.trigger('search.keypress', true); + } + }); + + if (options.search) { + + self.on("@search.focus", function() { + self.stayFocused = true; + self.search.addClass("focused"); + }) + + .on("@search.keypress", function(hide) { + var filterBtns = picker.find(".emojionearea-filter"); + var activeTone = (options.tones ? tones.find("i.active").data("skin") : 0); + var term = self.search.val().replace( / /g, "_" ).replace(/"/g, "\\\""); + + if (term && term.length) { + if (self.recentFilter.hasClass("active")) { + self.recentFilter.removeClass("active").next().addClass("active"); + } + + self.recentCategory.hide(); + self.recentFilter.hide(); + + categoryBlocks.each(function() { + var matchEmojis = function(category, activeTone) { + var $matched = category.find('.emojibtn[data-name*="' + term + '"]'); + if ($matched.length === 0) { + if (category.data('tone') === activeTone) { + category.hide(); + } + filterBtns.filter('[data-filter="' + category.attr('name') + '"]').hide(); + } else { + var $notMatched = category.find('.emojibtn:not([data-name*="' + term + '"])'); + $notMatched.hide(); + + $matched.show(); + + if (category.data('tone') === activeTone) { + category.show(); + } + + filterBtns.filter('[data-filter="' + category.attr('name') + '"]').show(); + } + } + + var $block = $(this); + if ($block.data('tone') === 0) { + categories.filter(':not([name="recent"])').each(function() { + matchEmojis($(this), 0); + }) + } else { + matchEmojis($block, activeTone); + } + }); + if (!noListenScroll) { + scrollArea.trigger('scroll'); + } else { + lazyLoading.call(self); + } + } else { + updateRecent(self, true); + categoryBlocks.filter('[data-tone="' + tones.find("i.active").data("skin") + '"]:not([name="recent"])').show(); + $('.emojibtn', categoryBlocks).show(); + filterBtns.show(); + lazyLoading.call(self); + } + }) + + .on("@search.blur", function() { + self.stayFocused = false; + self.search.removeClass("focused"); + self.trigger("blur"); + }); + } + self.on("@keyup", function(_, e) { + var html = self.editor.html().replace(/<\/?(?:div|span|p)[^>]*>/ig, ''); + // clear input: chrome adds
when contenteditable is empty + if (!html.length || /^]*>$/i.test(html)) { + self.editor.html(self.content = ''); + } + source[sourceValFunc](self.getText()); + let inputText; + inputText = self.getText(); + inputText = inputText + .replace(/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9.-]+[a-z0-9]+)/ig, '$1@$3') + .replace(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)/g, 'xxxxxxxxxxxxxxxxxxxxxxx'); + + $("#count").text(inputText.length); + }); + if (options.shortcuts) { + self.on("@keydown", function(_, e) { + + if (!e.ctrlKey) { + if (e.which == 9) { + e.preventDefault(); + button.click(); + } + else if (e.which == 27) { + e.preventDefault(); + if (button.is(".active")) { + self.hidePicker(); + } + } + } + }); + } + + if (isObject(options.events) && !$.isEmptyObject(options.events)) { + $.each(options.events, function(event, handler) { + self.on(event.replace(/_/g, '.'), handler); + }); + } + + if (options.autocomplete) { + var autocomplete = function() { + var textcompleteOptions = { + maxCount: options.textcomplete.maxCount, + placement: options.textcomplete.placement + }; + + if (options.shortcuts) { + textcompleteOptions.onKeydown = function (e, commands) { + if (!e.ctrlKey && e.which == 13) { + return commands.KEY_ENTER; + } + }; + } + + var map = $.map(emojione.emojioneList, function (_, emoji) { + return !options.autocompleteTones ? /_tone[12345]/.test(emoji) ? null : emoji : emoji; + }); + map.sort(); + editor.textcomplete([ + { + id: css_class, + match: /\B((:[\-+\w]*)|(@[\-+\w]*))$/, + search: function (term, callback) { + + if (term.startsWith(":")) { + callback($.map(map, function (emoji) { + return emoji.indexOf(term) === 0 ? emoji : null; + })); + } else if (term.startsWith("@")){ + $.ajax({ + url: "https://"+$('#data_api').attr('data-instance')+"/api/v2/search?type=accounts&q="+term.substring(1), + headers: {"Authorization": $('#data_api').attr('data-token')}, + context: document.body + }).done(function(value) { + // value = eval("(" + value + ")"); + callback($.map(value.accounts, function (value) { + return value; + })); + }); + } + }, + template: function (value) { + + + if (typeof value.acct == 'undefined') { + return shortnameTo(value, self.emojiTemplate) + " " + value.replace(/:/g, ''); + } else { + return ' @'+value.acct; + } + }, + replace: function (value) { + if (typeof value.acct == 'undefined') { + return shortnameTo(value, self.emojiTemplate); + }else{ + return "@"+value.acct; + } + }, + cache: true, + index: 1 + } + ], textcompleteOptions); + + if (options.textcomplete.placement) { + // Enable correct positioning for textcomplete + if ($(editor.data('textComplete').option.appendTo).css("position") == "static") { + $(editor.data('textComplete').option.appendTo).css("position", "relative"); + } + } + }; + + var initAutocomplete = function() { + if (self.disabled) { + var enable = function () { + self.off('enabled', enable); + autocomplete(); + }; + self.on('enabled', enable); + } else { + autocomplete(); + } + } + + if ($.fn.textcomplete) { + initAutocomplete(); + } else { + $.ajax({ + url: "https://cdn.rawgit.com/yuku-t/jquery-textcomplete/v1.3.4/dist/jquery.textcomplete.js", + dataType: "script", + cache: true, + success: initAutocomplete + }); + } + } + + if (self.inline) { + app.addClass(selector('inline', true)); + self.on("@keydown", function(_, e) { + if (e.which == 13) { + e.preventDefault(); + } + }); + } + + if (/firefox/i.test(navigator.userAgent)) { + // disabling resize images on Firefox + document.execCommand("enableObjectResizing", false, false); + } + + self.isReady = true; + self.trigger("onLoad", editor); + self.trigger("ready", editor); + //}, self.id === 1); // calcElapsedTime() + }; + var cdn = { + defaultBase: "https://cdnjs.cloudflare.com/ajax/libs/emojione/", + defaultBase3: "https://cdn.jsdelivr.net/", + base: null, + isLoading: false + }; + function loadEmojione(options) { + var emojioneVersion = getEmojioneVersion() + options = getOptions(options); + + if (!cdn.isLoading) { + if (!emojione || getSupportMode(detectVersion(emojione)) < 2) { + cdn.isLoading = true; + var emojioneJsCdnUrlBase; + if (getSupportMode(emojioneVersion) > 5) { + emojioneJsCdnUrlBase = cdn.defaultBase3 + "npm/emojione@" + emojioneVersion; + } else if (getSupportMode(emojioneVersion) > 4) { + emojioneJsCdnUrlBase = cdn.defaultBase3 + "emojione/" + emojioneVersion; + } else { + emojioneJsCdnUrlBase = cdn.defaultBase + "/" + emojioneVersion; + } + + $.ajax({ + url: emojioneJsCdnUrlBase + "/lib/js/emojione.min.js", + dataType: "script", + cache: true, + success: function () { + emojione = window.emojione; + emojioneVersion = detectVersion(emojione); + emojioneSupportMode = getSupportMode(emojioneVersion); + var sprite; + if (emojioneSupportMode > 4) { + cdn.base = cdn.defaultBase3 + "emojione/assets/" + emojioneVersion; + sprite = cdn.base + "/sprites/emojione-sprite-" + emojione.emojiSize + ".css"; + } else { + cdn.base = cdn.defaultBase + emojioneVersion + "/assets"; + sprite = cdn.base + "/sprites/emojione.sprites.css"; + } + if (options.sprite) { + if (document.createStyleSheet) { + document.createStyleSheet(sprite); + } else { + $('', {rel: 'stylesheet', href: sprite}).appendTo('head'); + } + } + while (readyCallbacks.length) { + readyCallbacks.shift().call(); + } + cdn.isLoading = false; + } + }); + } else { + emojioneVersion = detectVersion(emojione); + emojioneSupportMode = getSupportMode(emojioneVersion); + if (emojioneSupportMode > 4) { + cdn.base = cdn.defaultBase3 + "emojione/assets/" + emojioneVersion; + } else { + cdn.base = cdn.defaultBase + emojioneVersion + "/assets"; + } + } + } + + emojioneReady(function() { + var emojiSize = ""; + if (options.useInternalCDN) { + if (emojioneSupportMode > 4) emojiSize = emojione.emojiSize + "/"; + + emojione.imagePathPNG = cdn.base + "/png/" + emojiSize; + emojione.imagePathSVG = cdn.base + "/svg/" + emojiSize; + emojione.imagePathSVGSprites = cdn.base + "/sprites/emojione.sprites.svg"; + emojione.imageType = options.imageType; + } + if (getSupportMode(emojioneVersion) > 4) { + uniRegexp = emojione.regUnicode; + emojione.imageType = options.imageType || "png"; + } else { + uniRegexp = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(" + emojione.unicodeRegexp + ")", "gi"); + } + }); + }; + var EmojioneArea = function(element, options) { + var self = this; + loadEmojione(options); + eventStorage[self.id = ++unique] = {}; + possibleEvents[self.id] = {}; + emojioneReady(function() { + init(self, element, options); + }); + }; + function bindEvent(self, event) { + event = event.replace(/^@/, ''); + var id = self.id; + if (possibleEvents[id][event]) { + $.each(possibleEvents[id][event], function(i, ev) { + // ev[0] = element + // ev[1] = event + // ev[2] = target + $.each($.isArray(ev[0]) ? ev[0] : [ev[0]], function(i, el) { + $(el).on(ev[1], function() { + var args = slice.call(arguments), + target = $.isFunction(ev[2]) ? ev[2].apply(self, [event].concat(args)) : ev[2]; + if (target) { + trigger(self, event, [target].concat(args)); + } + }); + }); + }); + possibleEvents[id][event] = null; + } + } + + EmojioneArea.prototype.on = function(events, handler) { + if (events && $.isFunction(handler)) { + var self = this; + $.each(events.toLowerCase().split(' '), function(i, event) { + bindEvent(self, event); + (eventStorage[self.id][event] || (eventStorage[self.id][event] = [])).push(handler); + }); + } + return this; + }; + + EmojioneArea.prototype.off = function(events, handler) { + if (events) { + var id = this.id; + $.each(events.toLowerCase().replace(/_/g, '.').split(' '), function(i, event) { + if (eventStorage[id][event] && !/^@/.test(event)) { + if (handler) { + $.each(eventStorage[id][event], function(j, fn) { + if (fn === handler) { + eventStorage[id][event].splice(j, 1); + } + }); + } else { + eventStorage[id][event] = []; + } + } + }); + } + return this; + }; + + EmojioneArea.prototype.trigger = function() { + var args = slice.call(arguments), + call_args = [this].concat(args.slice(0,1)); + call_args.push(args.slice(1)); + return trigger.apply(this, call_args); + }; + + EmojioneArea.prototype.setFocus = function () { + var self = this; + emojioneReady(function () { + self.editor.focus(); + }); + return self; + }; + + EmojioneArea.prototype.setText = function (str) { + var self = this; + emojioneReady(function () { + self.editor.html(htmlFromText(str, self)); + self.content = self.editor.html(); + trigger(self, 'change', [self.editor]); + calcButtonPosition.apply(self); + }); + return self; + } + + EmojioneArea.prototype.getText = function() { + return textFromHtml(this.editor.html(), this); + } + + EmojioneArea.prototype.showPicker = function () { + var self = this; + if (self._sh_timer) { + window.clearTimeout(self._sh_timer); + } + self.picker.removeClass("hidden"); + self._sh_timer = window.setTimeout(function() { + self.button.addClass("active"); + }, 50); + trigger(self, "picker.show", [self.picker]); + return self; + } + + EmojioneArea.prototype.hidePicker = function () { + var self = this; + if (self._sh_timer) { + window.clearTimeout(self._sh_timer); + } + self.button.removeClass("active"); + self._sh_timer = window.setTimeout(function() { + self.picker.addClass("hidden"); + }, 500); + trigger(self, "picker.hide", [self.picker]); + return self; + } + + EmojioneArea.prototype.enable = function () { + var self = this; + var next = function () { + self.disabled = false; + self.editor.prop('contenteditable', true); + self.button.show(); + var editor = self[(self.standalone) ? "button" : "editor"]; + editor.parent().removeClass('emojionearea-disable'); + trigger(self, 'enabled', [editor]); + }; + self.isReady ? next() : self.on("ready", next); + return self; + } + + EmojioneArea.prototype.disable = function () { + var self = this; + self.disabled = true; + var next = function () { + self.editor.prop('contenteditable', false); + self.hidePicker(); + self.button.hide(); + var editor = self[(self.standalone) ? "button" : "editor"]; + editor.parent().addClass('emojionearea-disable'); + trigger(self, 'disabled', [editor]); + }; + self.isReady ? next() : self.on("ready", next); + return self; + } + + $.fn.emojioneArea = function(options) { + return this.each(function() { + if (!!this.emojioneArea) return this.emojioneArea; + $.data(this, 'emojioneArea', this.emojioneArea = new EmojioneArea($(this), options)); + return this.emojioneArea; + }); + }; + + $.fn.emojioneArea.defaults = getDefaultOptions(); + + $.fn.emojioneAreaText = function(options) { + options = getOptions(options); + + var self = this, pseudoSelf = { + shortnames: (options && typeof options.shortnames !== 'undefined' ? options.shortnames : true), + emojiTemplate: '{alt}' + }; + + loadEmojione(options); + emojioneReady(function() { + self.each(function() { + var $this = $(this); + if (!$this.hasClass('emojionearea-text')) { + $this.addClass('emojionearea-text').html(htmlFromText(($this.is('TEXTAREA') || $this.is('INPUT') ? $this.val() : $this.text()), pseudoSelf)); + } + return $this; + }); + }); + + return this; + }; + +}, window ) ); diff --git a/symfony.lock b/symfony.lock index 453784a..42155cd 100644 --- a/symfony.lock +++ b/symfony.lock @@ -33,7 +33,7 @@ ] }, "php": { - "version": "7.2" + "version": "7.3" }, "psr/cache": { "version": "1.0.1" diff --git a/templates/fediplan/schedule.html.twig b/templates/fediplan/schedule.html.twig index b445244..7868480 100644 --- a/templates/fediplan/schedule.html.twig +++ b/templates/fediplan/schedule.html.twig @@ -50,7 +50,7 @@
{{ form_label(form.content_warning) }} - {{ form_widget(form.content_warning, {'attr': {'class': 'form-control'}}) }} + {{ form_widget(form.content_warning, {'attr': {'class': 'form-control', 'data-emojiable':'true'}}) }} {% if not form.content_warning.vars.errors is empty %} {% for errorItem in form.content_warning.vars.errors %} @@ -66,7 +66,7 @@
{{ form_label(form.content) }} - {{ form_widget(form.content, {'attr': {'class': 'form-control','id':'composer_content'}}) }} + {{ form_widget(form.content, {'attr': {'class': 'form-control','id':'composer_content','data-emojiable':'true'}}) }} {% if not form.content.vars.errors is empty %} {% for errorItem in form.content.vars.errors %} @@ -214,7 +214,7 @@ - + {% endblock %} {% block javascripts %} @@ -316,7 +316,7 @@ {% } %} {% endverbatim %} - + @@ -325,6 +325,9 @@ + + + + {% endblock %}