diff --git a/composer.json b/composer.json index ead0e344636fcb44cfc1e4495788665dec5be98d..0562455beca4025dbaf72c617e744cfd71859248 100644 --- a/composer.json +++ b/composer.json @@ -79,36 +79,35 @@ ], "require": { "php": ">=7.0.8", - "browserstate/history.js": "^1.8", + "browserstate/history.js": "1.8", "ckeditor/indentblock": "4.8.0", - "composer/installers": "^1.0.20", "cweagans/composer-patches": "^1.0", "desandro/imagesloaded": "4.1.4", - "desandro/masonry": "^4.2", - "dimsemenov/magnific-popup": "^1.1", - "drupal-composer/drupal-scaffold": "^2.0.1", + "desandro/masonry": "4.2", + "dimsemenov/magnific-popup": "1.1", + "drupal-composer/drupal-scaffold": "2.5.4", "drupal/address": "1.1", "drupal/addtocalendar": "3.1", "drupal/admin_toolbar": "2.0", "drupal/administerusersbyrole": "2.0-beta1", "drupal/allowed_formats": "1.2", - "drupal/anchor_link": "^1.6", + "drupal/anchor_link": "1.6", "drupal/better_exposed_filters": "3.0-alpha6", - "drupal/bigmenu": "^1.0@alpha", - "drupal/block_field": "^1.0@alpha", - "drupal/block_permissions": "^1.0", - "drupal/block_region_permissions": "^1.2", + "drupal/bigmenu": "1.0.0-alpha1", + "drupal/block_field": "1.0.0-alpha8", + "drupal/block_permissions": "1.0", + "drupal/block_region_permissions": "1.2", "drupal/bootstrap": "3.16", - "drupal/ckeditor_indentblock": "^1.0@beta", - "drupal/config_direct_save": "^1.0", - "drupal/config_ignore": "^2.1", - "drupal/config_installer": "^1.0", - "drupal/config_update": "^1.5", - "drupal/console": "^1", + "drupal/ckeditor_indentblock": "1.0.0-beta1", + "drupal/config_direct_save": "1.0", + "drupal/config_ignore": "2.1", + "drupal/config_installer": "1.8", + "drupal/config_update": "1.5", + "drupal/console": "1.8", "drupal/content_access": "1.0-alpha1", - "drupal/core": "^8.8", + "drupal/core-recommended": "8.8.4", "drupal/crop": "2.0-rc1", - "drupal/ctools": "^3.0", + "drupal/ctools": "3.2", "drupal/devel": "2.0", "drupal/draggableviews": "1.0", "drupal/dropzonejs": "2.0-alpha3", @@ -116,7 +115,7 @@ "drupal/embed": "1.0", "drupal/entity": "1.0-beta1", "drupal/entity_browser": "1.4", - "drupal/entity_clone": "^1.0@beta", + "drupal/entity_clone": "1.0.0-beta3", "drupal/entity_embed": "1.0-beta2", "drupal/entity_reference_revisions": "1.3", "drupal/externalauth": "1.1", @@ -127,72 +126,72 @@ "drupal/focal_point": "1.2", "drupal/geolocation": "1.10", "drupal/google_analytics": "2.4", - "drupal/google_tag": "^1.3", - "drupal/honeypot": "^1.28", + "drupal/google_tag": "1.3", + "drupal/honeypot": "1.28", "drupal/image_popup": "1.1", "drupal/inline_entity_form": "1.0-rc1", - "drupal/libraries": "^3.0@alpha", - "drupal/link_attributes": "^1.0", + "drupal/libraries": "3.0.0-alpha1", + "drupal/link_attributes": "1.10", "drupal/linkit": "5.0-beta10", "drupal/magnific_popup": "1.3", - "drupal/mathjax": "^2.7", + "drupal/mathjax": "2.7", "drupal/media_entity_browser": "2.0-alpha2", "drupal/media_entity_twitter": "2.0-alpha2", "drupal/menu_block": "1.4", - "drupal/menu_block_title": "^1.1", - "drupal/menu_breadcrumb": "^1.7", + "drupal/menu_block_title": "1.1", + "drupal/menu_breadcrumb": "1.12", "drupal/metatag": "1.9", "drupal/migrate_devel": "1.x-dev", "drupal/migrate_plus": "4.0", "drupal/migrate_tools": "4.0", - "drupal/mobile_detect_twig_extensions": "^1.4", - "drupal/mobile_device_detection": "^3.2", - "drupal/module_filter": "^3.1", - "drupal/pantheon_advanced_page_cache": "^1.0", - "drupal/paragraphs": "^1.6", - "drupal/pathauto": "^1.0", - "drupal/realname": "^1.0@RC", - "drupal/rebuild_cache_access": "^1.4", - "drupal/recaptcha": "^2.4", - "drupal/redirect": "^1.3", + "drupal/mobile_detect_twig_extensions": "1.4", + "drupal/mobile_device_detection": "3.2", + "drupal/module_filter": "3.1", + "drupal/pantheon_advanced_page_cache": "1.0", + "drupal/paragraphs": "1.11", + "drupal/pathauto": "1.6", + "drupal/realname": "1.0.0-rc2", + "drupal/rebuild_cache_access": "1.4", + "drupal/recaptcha": "2.4", + "drupal/redirect": "1.3", "drupal/redis": "1.0", - "drupal/roleassign": "^1.0@alpha", - "drupal/scheduler": "^1.0", + "drupal/roleassign": "1.0.0-alpha2", + "drupal/scheduler": "1.1", "drupal/search_api": "1.1", "drupal/search_api_db": "1.1", - "drupal/simple_gmap": "^2.0", + "drupal/simple_gmap": "2.0", "drupal/simple_megamenu": "1.0-beta3", - "drupal/simple_sitemap": "^3.0", + "drupal/simple_sitemap": "3.0", "drupal/simplesamlphp_auth": "3.1", "drupal/smtp": "1.x-dev#84f789cbba894290cf82ed2558c8a4e7e24f3c89", - "drupal/social_media": "^1.3", - "drupal/social_media_links": "^2.6", + "drupal/social_media": "1.8", + "drupal/social_media_links": "2.6", "drupal/superfish": "1.2", "drupal/svg_image": "1.8", "drupal/token": "1.5", - "drupal/twig_tweak": "^2.4", + "drupal/twig_tweak": "2.4", "drupal/twitter_block": "3.0-alpha0", "drupal/userprotect": "1.0", - "drupal/video_embed_field": "^2.0", - "drupal/view_unpublished": "^1.0@alpha", + "drupal/video_embed_field": "2.2", + "drupal/view_unpublished": "1.0-alpha1", "drupal/views_accordion": "1.1", - "drupal/views_ajax_history": "^1.1", + "drupal/views_ajax_history": "1.2", "drupal/views_autocomplete_filters": "1.2", "drupal/views_bootstrap": "3.1", - "drupal/views_bulk_operations": "^3.0", + "drupal/views_bulk_operations": "3.4", "drupal/views_fieldsets": "3.3", - "drupal/views_infinite_scroll": "^1.5", + "drupal/views_infinite_scroll": "1.6", "drupal/views_slideshow": "4.4", "drupal/webform": "5.2", "drupal/webform_views": "5.0-alpha2", - "drush-ops/behat-drush-endpoint": "^0.0.5", - "drush/drush": "^9", - "enyo/dropzone": "^5.1", + "drush-ops/behat-drush-endpoint": "0.0.5", + "drush/drush": "9.7.1", + "enyo/dropzone": "5.1.1", "gdsmith/jquery.easing": "1.4.1", - "oomphinc/composer-installers-extender": "^1.1", - "pantheon-systems/quicksilver-pushback": "~1", - "rvtraveller/qs-composer-installer": "^1.1", - "zaporylie/composer-drupal-optimizations": "^1.0" + "oomphinc/composer-installers-extender": "1.1.2", + "pantheon-systems/quicksilver-pushback": "1.0.1", + "rvtraveller/qs-composer-installer": "1.1", + "zaporylie/composer-drupal-optimizations": "1.1" }, "require-dev": {}, "conflict": { diff --git a/composer.lock b/composer.lock index 447f2d5c18b7f052a4f5aca2d82991a23df446b6..28ad04c7660c7b84e9aaefd4c4e0f53a5a1a0a0a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8cec9c7423231dd620167f5914c49ee9", + "content-hash": "4d9c06944885f9bb9d568724fdf5445a", "packages": [ { "name": "alchemy/zippy", @@ -72,22 +72,22 @@ }, { "name": "asm89/stack-cors", - "version": "1.3.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/asm89/stack-cors.git", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" + "reference": "c163e2b614550aedcf71165db2473d936abbced6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/c163e2b614550aedcf71165db2473d936abbced6", + "reference": "c163e2b614550aedcf71165db2473d936abbced6", "shasum": "" }, "require": { "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", - "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" + "symfony/http-foundation": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0" }, "require-dev": { "phpunit/phpunit": "^5.0 || ^4.8.10", @@ -120,7 +120,7 @@ "cors", "stack" ], - "time": "2019-12-24T22:41:47+00:00" + "time": "2017-12-20T14:37:45+00:00" }, { "name": "browserstate/history.js", @@ -297,16 +297,16 @@ }, { "name": "composer/installers", - "version": "v1.5.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "049797d727261bf27f2690430d935067710049c2" + "reference": "141b272484481432cda342727a427dc1e206bfa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/049797d727261bf27f2690430d935067710049c2", - "reference": "049797d727261bf27f2690430d935067710049c2", + "url": "https://api.github.com/repos/composer/installers/zipball/141b272484481432cda342727a427dc1e206bfa0", + "reference": "141b272484481432cda342727a427dc1e206bfa0", "shasum": "" }, "require": { @@ -362,6 +362,7 @@ "RadPHP", "SMF", "Thelia", + "Whmcs", "WolfCMS", "agl", "aimeos", @@ -384,6 +385,7 @@ "installer", "itop", "joomla", + "known", "kohana", "laravel", "lavalite", @@ -413,27 +415,28 @@ "zend", "zikula" ], - "time": "2017-12-29T09:13:20+00:00" + "time": "2019-08-12T15:00:31+00:00" }, { "name": "composer/semver", - "version": "1.5.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, "type": "library", "extra": { @@ -474,7 +477,7 @@ "validation", "versioning" ], - "time": "2020-01-13T12:06:48+00:00" + "time": "2019-03-19T17:25:45+00:00" }, { "name": "consolidation/annotated-command", @@ -3384,16 +3387,16 @@ }, { "name": "drupal/core", - "version": "8.8.2", + "version": "8.8.4", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "f997857003276c2ae6d27db30f0eab9c7dd10e62" + "reference": "34e59fcf702c1b3c497bbd6e92e68e546c5d15b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/f997857003276c2ae6d27db30f0eab9c7dd10e62", - "reference": "f997857003276c2ae6d27db30f0eab9c7dd10e62", + "url": "https://api.github.com/repos/drupal/core/zipball/34e59fcf702c1b3c497bbd6e92e68e546c5d15b8", + "reference": "34e59fcf702c1b3c497bbd6e92e68e546c5d15b8", "shasum": "" }, "require": { @@ -3615,7 +3618,87 @@ "GPL-2.0-or-later" ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", - "time": "2020-02-01T19:51:15+00:00" + "time": "2020-03-18T16:26:33+00:00" + }, + { + "name": "drupal/core-recommended", + "version": "8.8.4", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-recommended.git", + "reference": "4155bff03954bae498029899f44e8adf697b20e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/4155bff03954bae498029899f44e8adf697b20e6", + "reference": "4155bff03954bae498029899f44e8adf697b20e6", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "1.2.0", + "composer/installers": "v1.7.0", + "composer/semver": "1.5.0", + "doctrine/annotations": "v1.4.0", + "doctrine/cache": "v1.6.2", + "doctrine/collections": "v1.4.0", + "doctrine/common": "v2.7.3", + "doctrine/inflector": "v1.2.0", + "doctrine/lexer": "1.0.2", + "drupal/core": "8.8.4", + "easyrdf/easyrdf": "0.9.1", + "egulias/email-validator": "2.1.11", + "guzzlehttp/guzzle": "6.3.3", + "guzzlehttp/promises": "v1.3.1", + "guzzlehttp/psr7": "1.6.1", + "masterminds/html5": "2.3.0", + "paragonie/random_compat": "v9.99.99", + "pear/archive_tar": "1.4.9", + "pear/console_getopt": "v1.4.2", + "pear/pear-core-minimal": "v1.10.9", + "pear/pear_exception": "v1.0.0", + "psr/container": "1.0.0", + "psr/http-message": "1.0.1", + "psr/log": "1.1.0", + "ralouphie/getallheaders": "3.0.3", + "stack/builder": "v1.0.5", + "symfony-cmf/routing": "1.4.1", + "symfony/class-loader": "v3.4.35", + "symfony/console": "v3.4.35", + "symfony/debug": "v3.4.35", + "symfony/dependency-injection": "v3.4.35", + "symfony/event-dispatcher": "v3.4.35", + "symfony/http-foundation": "v3.4.35", + "symfony/http-kernel": "v3.4.35", + "symfony/polyfill-ctype": "v1.12.0", + "symfony/polyfill-iconv": "v1.12.0", + "symfony/polyfill-mbstring": "v1.12.0", + "symfony/polyfill-php56": "v1.12.0", + "symfony/polyfill-php70": "v1.12.0", + "symfony/polyfill-util": "v1.12.0", + "symfony/process": "v3.4.35", + "symfony/psr-http-message-bridge": "v1.1.2", + "symfony/routing": "v3.4.35", + "symfony/serializer": "v3.4.35", + "symfony/translation": "v3.4.35", + "symfony/validator": "v3.4.35", + "symfony/yaml": "v3.4.35", + "twig/twig": "v1.42.3", + "typo3/phar-stream-wrapper": "v3.1.3", + "zendframework/zend-diactoros": "1.8.7", + "zendframework/zend-escaper": "2.6.1", + "zendframework/zend-feed": "2.12.0", + "zendframework/zend-stdlib": "3.2.1" + }, + "conflict": { + "webflo/drupal-core-strict": "*" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.", + "time": "2020-03-18T16:26:33+00:00" }, { "name": "drupal/crop", @@ -5978,7 +6061,8 @@ "homepage": "https://www.drupal.org/project/migrate_devel", "support": { "source": "http://cgit.drupalcode.org/migrate_devel" - } + }, + "time": "2017-06-25T23:46:13+00:00" }, { "name": "drupal/migrate_plus", @@ -8751,27 +8835,27 @@ }, { "name": "egulias/email-validator", - "version": "2.1.17", + "version": "2.1.11", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23", + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23", "shasum": "" }, "require": { "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "php": ">= 5.5" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1", + "symfony/phpunit-bridge": "^4.4@dev" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -8805,7 +8889,7 @@ "validation", "validator" ], - "time": "2020-02-13T22:36:52+00:00" + "time": "2019-08-13T17:33:27+00:00" }, { "name": "enyo/dropzone", @@ -9073,46 +9157,44 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.2", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { - "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", + "guzzlehttp/psr7": "^1.4", "php": ">=5.5" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" + "psr/log": "^1.0" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5-dev" + "dev-master": "6.3-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9136,7 +9218,7 @@ "rest", "web service" ], - "time": "2019-12-23T11:57:10+00:00" + "time": "2018-04-22T15:46:56+00:00" }, { "name": "guzzlehttp/promises", @@ -9514,33 +9596,31 @@ }, { "name": "masterminds/html5", - "version": "2.7.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2" + "reference": "2c37c6c520b995b761674de3be8455a381679067" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/104443ad663d15981225f99532ba73c2f1d6b6f2", - "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", + "reference": "2c37c6c520b995b761674de3be8455a381679067", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-dom": "*", "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35", + "phpunit/phpunit": "4.*", "sami/sami": "~2.0", "satooshi/php-coveralls": "1.0.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -9557,13 +9637,13 @@ "name": "Matt Butcher", "email": "technosophos@gmail.com" }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - }, { "name": "Asmir Mustafic", "email": "goetas@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" } ], "description": "An HTML5 parser and serializer.", @@ -9577,7 +9657,7 @@ "serializer", "xml" ], - "time": "2019-07-25T07:03:26+00:00" + "time": "2017-09-04T12:26:28+00:00" }, { "name": "mehrpadin/superfish", @@ -9894,16 +9974,16 @@ }, { "name": "pear/console_getopt", - "version": "v1.4.3", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, "type": "library", @@ -9920,6 +10000,11 @@ "BSD-2-Clause" ], "authors": [ + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, { "name": "Andrei Zmievski", "email": "andrei@php.net", @@ -9929,15 +10014,10 @@ "name": "Stig Bakken", "email": "stig@php.net", "role": "Developer" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net", - "role": "Helper" } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2019-11-20T18:27:48+00:00" + "time": "2019-02-06T16:52:33+00:00" }, { "name": "pear/console_table", @@ -9996,16 +10076,16 @@ }, { "name": "pear/pear-core-minimal", - "version": "v1.10.10", + "version": "v1.10.9", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { @@ -10036,20 +10116,20 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2019-11-19T19:00:24+00:00" + "time": "2019-03-13T18:15:44+00:00" }, { "name": "pear/pear_exception", - "version": "v1.0.1", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/pear/PEAR_Exception.git", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", "shasum": "" }, "require": { @@ -10065,9 +10145,9 @@ } }, "autoload": { - "classmap": [ - "PEAR/" - ] + "psr-0": { + "PEAR": "" + } }, "notification-url": "https://packagist.org/downloads/", "include-path": [ @@ -10091,7 +10171,7 @@ "keywords": [ "exception" ], - "time": "2019-12-10T10:24:42+00:00" + "time": "2015-02-10T20:07:52+00:00" }, { "name": "psr/container", @@ -10194,16 +10274,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "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/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { @@ -10212,7 +10292,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -10237,7 +10317,7 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2018-11-20T15:27:04+00:00" }, { "name": "psy/psysh", @@ -10735,16 +10815,16 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "bcdf6ff46e115b29be3186391f29e0da82cd6f72" + "reference": "e212b06996819a2bce026a63da03b7182d05a690" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/bcdf6ff46e115b29be3186391f29e0da82cd6f72", - "reference": "bcdf6ff46e115b29be3186391f29e0da82cd6f72", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e212b06996819a2bce026a63da03b7182d05a690", + "reference": "e212b06996819a2bce026a63da03b7182d05a690", "shasum": "" }, "require": { @@ -10787,7 +10867,7 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:05:51+00:00" + "time": "2019-08-20T13:31:17+00:00" }, { "name": "symfony/config", @@ -10855,16 +10935,16 @@ }, { "name": "symfony/console", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12" + "reference": "17b154f932c5874cdbda6d05796b6490eec9f9f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12", - "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12", + "url": "https://api.github.com/repos/symfony/console/zipball/17b154f932c5874cdbda6d05796b6490eec9f9f7", + "reference": "17b154f932c5874cdbda6d05796b6490eec9f9f7", "shasum": "" }, "require": { @@ -10923,7 +11003,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-01-10T07:52:48+00:00" + "time": "2019-11-13T07:12:39+00:00" }, { "name": "symfony/css-selector", @@ -10980,16 +11060,16 @@ }, { "name": "symfony/debug", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8" + "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/70dd18e93bb8bdf3c4db7fde832619fef9828cf8", - "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8", + "url": "https://api.github.com/repos/symfony/debug/zipball/f72e33fdb1170b326e72c3157f0cd456351dd086", + "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086", "shasum": "" }, "require": { @@ -11032,20 +11112,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-01-08T16:36:15+00:00" + "time": "2019-10-24T15:33:53+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc" + "reference": "0ea4d39ca82409a25a43b61ce828048a90000920" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/22000f10c9e1cfef051e8b4de46815b41a0223fc", - "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0ea4d39ca82409a25a43b61ce828048a90000920", + "reference": "0ea4d39ca82409a25a43b61ce828048a90000920", "shasum": "" }, "require": { @@ -11103,7 +11183,7 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2020-01-08T11:20:51+00:00" + "time": "2019-11-08T16:18:30+00:00" }, { "name": "symfony/dom-crawler", @@ -11164,16 +11244,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8" + "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/79ede8f2836e5ec910ebb325bde40f987244baa8", - "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177", + "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177", "shasum": "" }, "require": { @@ -11223,7 +11303,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:05:51+00:00" + "time": "2019-10-24T15:33:53+00:00" }, { "name": "symfony/filesystem", @@ -11326,16 +11406,16 @@ }, { "name": "symfony/http-foundation", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f3abd07a56111ebe6a1ad6f1cbc23e4f8983f8f5" + "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f3abd07a56111ebe6a1ad6f1cbc23e4f8983f8f5", - "reference": "f3abd07a56111ebe6a1ad6f1cbc23e4f8983f8f5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9e4b3ac8fa3348b4811674d23de32d201de225ce", + "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce", "shasum": "" }, "require": { @@ -11376,20 +11456,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:05:51+00:00" + "time": "2019-11-11T12:53:10+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ea8af453ccf14e24a6cb2fcc3ece5814cbcc0ff4" + "reference": "e1764b3de00ec5636dd03d02fd44bcb1147d70d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ea8af453ccf14e24a6cb2fcc3ece5814cbcc0ff4", - "reference": "ea8af453ccf14e24a6cb2fcc3ece5814cbcc0ff4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e1764b3de00ec5636dd03d02fd44bcb1147d70d9", + "reference": "e1764b3de00ec5636dd03d02fd44bcb1147d70d9", "shasum": "" }, "require": { @@ -11466,20 +11546,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-01-21T12:29:51+00:00" + "time": "2019-11-13T08:44:50+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.14.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", "shasum": "" }, "require": { @@ -11491,7 +11571,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -11524,20 +11604,20 @@ "polyfill", "portable" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.14.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e" + "reference": "685968b11e61a347c18bf25db32effa478be610f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/926832ce51059bb58211b7b2080a88e0c3b5328e", - "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f", + "reference": "685968b11e61a347c18bf25db32effa478be610f", "shasum": "" }, "require": { @@ -11549,7 +11629,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -11583,82 +11663,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.14.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.14-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "time": "2020-01-17T12:01:36+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.14.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", "shasum": "" }, "require": { @@ -11670,7 +11688,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -11704,20 +11722,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php56", - "version": "v1.14.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3" + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3", - "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403", + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403", "shasum": "" }, "require": { @@ -11727,7 +11745,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -11760,20 +11778,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.14.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "419c4940024c30ccc033650373a1fe13890d3255" + "reference": "54b4c428a0054e254223797d2713c31e08610831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/419c4940024c30ccc033650373a1fe13890d3255", - "reference": "419c4940024c30ccc033650373a1fe13890d3255", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831", + "reference": "54b4c428a0054e254223797d2713c31e08610831", "shasum": "" }, "require": { @@ -11783,7 +11801,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -11819,75 +11837,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.14.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.14-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-util", - "version": "v1.14.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-util.git", - "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3" + "reference": "4317de1386717b4c22caed7725350a8887ab205c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3", - "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c", + "reference": "4317de1386717b4c22caed7725350a8887ab205c", "shasum": "" }, "require": { @@ -11896,7 +11859,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -11926,20 +11889,20 @@ "polyfill", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/process", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a" + "reference": "c19da50bc3e8fa7d60628fdb4ab5d67de534cf3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5b9d2bcffe4678911a4c941c00b7c161252cf09a", - "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a", + "url": "https://api.github.com/repos/symfony/process/zipball/c19da50bc3e8fa7d60628fdb4ab5d67de534cf3e", + "reference": "c19da50bc3e8fa7d60628fdb4ab5d67de534cf3e", "shasum": "" }, "require": { @@ -11975,7 +11938,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-01-01T11:03:25+00:00" + "time": "2019-10-24T15:33:53+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -12042,16 +12005,16 @@ }, { "name": "symfony/routing", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "6366fbf86a05abccf77d6e605abbb0ee342f2cfa" + "reference": "afc10b9c6b5196e0fecbc3bd373c7b4482e5b6b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/6366fbf86a05abccf77d6e605abbb0ee342f2cfa", - "reference": "6366fbf86a05abccf77d6e605abbb0ee342f2cfa", + "url": "https://api.github.com/repos/symfony/routing/zipball/afc10b9c6b5196e0fecbc3bd373c7b4482e5b6b5", + "reference": "afc10b9c6b5196e0fecbc3bd373c7b4482e5b6b5", "shasum": "" }, "require": { @@ -12114,20 +12077,20 @@ "uri", "url" ], - "time": "2020-01-04T12:05:51+00:00" + "time": "2019-11-08T17:25:00+00:00" }, { "name": "symfony/serializer", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "e85feee0d587c65713ec6d3e2a1d8782e6d219dc" + "reference": "9d14f7ff2c585a8a9f6f980253066285ddc2f675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/e85feee0d587c65713ec6d3e2a1d8782e6d219dc", - "reference": "e85feee0d587c65713ec6d3e2a1d8782e6d219dc", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9d14f7ff2c585a8a9f6f980253066285ddc2f675", + "reference": "9d14f7ff2c585a8a9f6f980253066285ddc2f675", "shasum": "" }, "require": { @@ -12193,20 +12156,20 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2020-01-01T11:03:25+00:00" + "time": "2019-11-12T17:51:12+00:00" }, { "name": "symfony/translation", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "577ec9ba1d6443947c48058acc3de298ad25e2bf" + "reference": "2031c895bc97ac1787d418d90bd1ed7d299f2772" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/577ec9ba1d6443947c48058acc3de298ad25e2bf", - "reference": "577ec9ba1d6443947c48058acc3de298ad25e2bf", + "url": "https://api.github.com/repos/symfony/translation/zipball/2031c895bc97ac1787d418d90bd1ed7d299f2772", + "reference": "2031c895bc97ac1787d418d90bd1ed7d299f2772", "shasum": "" }, "require": { @@ -12263,20 +12226,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:05:51+00:00" + "time": "2019-10-30T12:43:22+00:00" }, { "name": "symfony/validator", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "46580e4429797438033fc1f226cb4cba67afe280" + "reference": "b11f45742c5c9a228cedc46b70c6317780a1ac80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/46580e4429797438033fc1f226cb4cba67afe280", - "reference": "46580e4429797438033fc1f226cb4cba67afe280", + "url": "https://api.github.com/repos/symfony/validator/zipball/b11f45742c5c9a228cedc46b70c6317780a1ac80", + "reference": "b11f45742c5c9a228cedc46b70c6317780a1ac80", "shasum": "" }, "require": { @@ -12349,7 +12312,7 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2020-01-14T18:27:07+00:00" + "time": "2019-11-05T22:03:38+00:00" }, { "name": "symfony/var-dumper", @@ -12422,16 +12385,16 @@ }, { "name": "symfony/yaml", - "version": "v3.4.37", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "aa46bc2233097d5212332c907f9911533acfbf80" + "reference": "dab657db15207879217fc81df4f875947bf68804" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/aa46bc2233097d5212332c907f9911533acfbf80", - "reference": "aa46bc2233097d5212332c907f9911533acfbf80", + "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804", + "reference": "dab657db15207879217fc81df4f875947bf68804", "shasum": "" }, "require": { @@ -12477,7 +12440,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2020-01-13T08:00:59+00:00" + "time": "2019-10-24T15:33:53+00:00" }, { "name": "twig/extensions", @@ -12536,16 +12499,16 @@ }, { "name": "twig/twig", - "version": "v1.42.5", + "version": "v1.42.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + "reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/201baee843e0ffe8b0b956f336dd42b2a92fae4e", + "reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e", "shasum": "" }, "require": { @@ -12554,7 +12517,8 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/debug": "^3.4|^4.2", + "symfony/phpunit-bridge": "^4.4@dev|^5.0" }, "type": "library", "extra": { @@ -12583,6 +12547,7 @@ }, { "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -12596,20 +12561,20 @@ "keywords": [ "templating" ], - "time": "2020-02-11T05:59:23+00:00" + "time": "2019-08-24T12:51:03+00:00" }, { "name": "typo3/phar-stream-wrapper", - "version": "v3.1.4", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/TYPO3/phar-stream-wrapper.git", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04" + "reference": "586ff60beea128e069a5dc271d3d8133a9bc460a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", + "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/586ff60beea128e069a5dc271d3d8133a9bc460a", + "reference": "586ff60beea128e069a5dc271d3d8133a9bc460a", "shasum": "" }, "require": { @@ -12646,7 +12611,7 @@ "security", "stream-wrapper" ], - "time": "2019-12-10T11:53:27+00:00" + "time": "2019-10-18T11:57:16+00:00" }, { "name": "webflo/drupal-finder", @@ -13094,16 +13059,8 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "drupal/bigmenu": 15, - "drupal/block_field": 15, - "drupal/ckeditor_indentblock": 10, - "drupal/entity_clone": 10, - "drupal/libraries": 15, "drupal/migrate_devel": 20, - "drupal/realname": 5, - "drupal/roleassign": 15, - "drupal/smtp": 20, - "drupal/view_unpublished": 15 + "drupal/smtp": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/console/language/console-en/.gitignore b/console/language/console-en/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e336886a96f9887667aec1ca1334b577f5992d8c --- /dev/null +++ b/console/language/console-en/.gitignore @@ -0,0 +1,35 @@ +# deprecation-detector +/.rules + +# Composer +/vendor +/bin/phpunit +/bin/jsonlint +/bin/phpcbf +/bin/phpcs +/bin/validate-json +/bin/pdepend +/bin/php-cs-fixer +/bin/phpmd +PATCHES.txt + +# Develop +autoload.local.php + +# Binaries +/box.phar +/console.phar +/drupal.phar +/drupal.phar.version + +# Test +/phpunit.xml + +# Drupal +/core +/nbproject/ + +# Splitsh +/config/ +/PATCHES.txt + diff --git a/console/language/console-en/README.md b/console/language/console-en/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4e0ddb433dca7b7ea574e4d1bba2b51a757e343b --- /dev/null +++ b/console/language/console-en/README.md @@ -0,0 +1,41 @@ +# drupal-console-en + +## Usage + +Drupal Console project it's installed per each Drupal 8 website with English language by default. + +To install Drupal Console package in other languages check the packages available at [https://packagist.org](https://packagist.org) + + +### Install Drupal Console + +To install the appropriate version of Drupal Console project for your drupal installation, run the following composer command + +``` +$ composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader +``` + +### Install Drupal Console launcher + +Drupal Console launcher was created to avoid conflicts between major and minor releases. Drupal Console binary commands are available to every Drupal 8 instance on the machine. + +To install Drupal Console launcher globally follow the instruction below. + +``` +$ curl https://drupalconsole.com/installer -L -o drupal.phar +# Or +$ php -r "readfile('https://drupalconsole.com/installer');" > drupal.phar + +$mv drupal.phar /usr/local/bin/drupal +$ chmod +x /usr/local/bin/drupal +``` + +### Contribute + +Follow these steps to contribute to the current translation: + +- [Project requirements](https://docs.drupalconsole.com/en/contributing/project-requirements.html) +- [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html) +- [Running the project](https://docs.drupalconsole.com/en/contributing/running-the-project.html) + +N.B: Push your changes to your forked repository in order to create PR per day to avoid any conflicts with other contributors. diff --git a/console/language/console-en/composer.json b/console/language/console-en/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..05abf44884fc146d9bbb1d4a0652412ae6b6141b --- /dev/null +++ b/console/language/console-en/composer.json @@ -0,0 +1,38 @@ +{ + "name": "drupal/console-en", + "description": "Drupal Console English Language", + "keywords": ["Drupal", "Console", "Development", "Symfony"], + "homepage": "http://drupalconsole.com/", + "type": "drupal-console-language", + "license": "GPL-2.0-or-later", + "authors": [ + { + "name": "David Flores", + "email": "dmousex@gmail.com", + "homepage": "http://dmouse.net" + }, + { + "name": "Jesus Manuel Olivas", + "email": "jesus.olivas@gmail.com", + "homepage": "http://jmolivas.com" + }, + { + "name": "Eduardo Garcia", + "email": "enzo@enzolutions.com", + "homepage": "http://enzolutions.com/" + }, + { + "name": "Omar Aguirre", + "email": "omersguchigu@gmail.com" + }, + { + "name": "Drupal Console Contributors", + "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors" + } + ], + "support": { + "issues": "https://github.com/hechoendrupal/DrupalConsole/issues", + "forum": "https://gitter.im/hechoendrupal/DrupalConsole", + "docs": "https://docs.drupalconsole.com" + } +} diff --git a/console/language/console-en/translations/about.yml b/console/language/console-en/translations/about.yml new file mode 100644 index 0000000000000000000000000000000000000000..a23c1a418b0393056b9eb8673b7207e87e7c6c06 --- /dev/null +++ b/console/language/console-en/translations/about.yml @@ -0,0 +1,13 @@ +description: 'Displays basic information about Drupal Console project' +messages: + welcome: 'The Drupal Console is a suite of tools that you run on the CLI to:' + welcome-feature-generate: 'Generate boilerplate code.' + welcome-feature-interact: 'Interact with a Drupal 8 installation.' + welcome-feature-learn: 'Learn Drupal 8.' + links: 'Project links' + landing: 'Landing page - "%s"' + change-log: 'Change log at - "%s"' + documentation: 'Documentation at - "%s"' + support: 'Support chat room - "%s"' + supporting-organizations: 'Supporting organizations' + version-supported: 'Drupal supported version <info>"%s"</info>' diff --git a/console/language/console-en/translations/application.yml b/console/language/console-en/translations/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..cf197981131ce3b32716eb6989baf3891615a134 --- /dev/null +++ b/console/language/console-en/translations/application.yml @@ -0,0 +1,93 @@ +options: + env: 'The Environment name' + debug: 'Switches on debug mode' + learning: 'Generate a verbose code output' + generate-chain: 'Shows command options and arguments as yaml output to be used in chain command' + generate-inline: 'Shows command options and arguments as inline command' + generate-doc: 'Shows command options and arguments as markdown' + root: 'Define the Drupal root to be used in command execution' + uri: 'URI of the Drupal site to use (for multi-site environments or when running on an alternate port)' + yes: 'Skip confirmation and proceed' + target: 'Site name you want to interact with (for local or remote sites)' + help: 'Display this help message' + quiet: 'Suppress all output from the command' + verbose: 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output, and 3 for debug' + version: 'Display this application version' + ansi: 'Force ANSI output' + no-ansi: 'Disable ANSI output' + no-interaction: 'Do not ask any interactive question' + check-fix: 'Attempt to fix any missing configuration.' +arguments: + command: 'The command to execute' +messages: + completed: 'The command was executed successfully!' + chain: + generated: 'Yaml representation of this command, usage copy in i.e. `~/.console/chain/sample.yml` to execute using `chain` command, make sure your yaml file start with a `commands` root key:' + inline: + generated: 'Inline representation of this command:' + generated: 'You can now start using the generated code!' + files: + generated: 'Generated or updated files' + copied: 'Copied files' + lines-code: 'Generated lines: "%s"' + path: 'Generation path' + learning: + route: "In order to to create pages it is necessary to define routes for them.\nA route maps a URL path to a controller. It defines what function\nor method will be called when a URL is accessed.\nIf the user accesses http://drupal8.dev/{{ route.path }}, the routing\nsystem will look for a route with that path. In this case it will find a\nmatch, and execute the _controller callback. In this case the callback is\ndefined as a classname\n(\"\\Drupal\\{{ module }}\\Controller\\{{ class_name }}\")\nand a method (\"{{ route.method }}\")." + autocomplete: | + Bash: Bash support depends on the http://bash-completion.alioth.debian.org/ + project which can be installed with your package manager of choice. Then add + this line to your shell configuration file. + <info>source "$HOME/.console/console.rc" 2>/dev/null</info> + + Bash or Zsh: Add this line to your shell configuration file: + <info>source "$HOME/.console/console.rc" 2>/dev/null</info> + + Fish: Create a symbolic link + <info>ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info> + version: '<info>"%s"</info> version <comment>"%s"</comment>' + disable: + command: + error: 'Command: "%s" is deprecated.' + extra: 'You must execute: "%s" instead' +errors: + invalid-command: 'Command "%s", is not a valid command name.' + renamed-command: 'Command "%s" was renamed, use "%s" instead.' + drush-command: 'Command "%s" is a Drush command (deprecated). Drupal Console equivalent "%s" was executed instead.' +site: + messages: + path: 'Site path' + errors: + settings: 'In order to list all of the available commands you should install drupal first.' + directory: 'In order to list all of the available commands, you should run this against a drupal root directory.' + not-installed: 'Drupal Console is not installed at: "%s"' + execute-composer: 'You must execute the following composer commands:' + missing-config-file: 'Missing configuration file, possible paths:' + missing-config-file-command: 'Execute "drupal init" command to generate one' +user: + messages: + path: 'User home path' + +remote: + errors: + passphrase-missing: 'Passphrase file is missing' + passphrase-empty: 'Passphrase file is empty' + private-missing: 'Private file is missing' + private-empty: 'Private file is empty' + private-invalid: 'Private file is invalid' + invalid-root: 'Invalid root directory' + console-not-found: 'Drupal Console not found on this site' + +gitbook: + messages: + title: 'Available Drupal Console Commands' + note: 'Note' + note-description: 'Drupal Console commands *must* be run from the root of a Drupal 8 installation' + command: 'Drupal Console Command' + command_description: 'The **"%s"** command "%s"' + usage: 'Usage' + options: 'Available options' + option: 'Option' + details: 'Details' + arguments: 'Available arguments' + argument: 'Argument' + examples: 'Examples' diff --git a/console/language/console-en/translations/cache.rebuild.yml b/console/language/console-en/translations/cache.rebuild.yml new file mode 100644 index 0000000000000000000000000000000000000000..3e1b5ff1d4eb5efa689d8c7a0fb376963873b2f6 --- /dev/null +++ b/console/language/console-en/translations/cache.rebuild.yml @@ -0,0 +1,15 @@ +description: 'Rebuild and clear all site caches.' +options: + cache: 'Only clear a specific cache.' +messages: + welcome: 'Welcome to the cache:rebuild command' + rebuild: 'Rebuilding cache(s), wait a moment please.' + completed: 'Done clearing cache(s).' + invalid-cache: 'Cache "%s" is invalid.' +questions: + cache: 'Select cache.' +examples: + - description: Rebuild all caches + execution: drupal cr all + - description: Rebuild discovery cache + execution: drupal cr discovery diff --git a/console/language/console-en/translations/cache.tag.invalidate.yml b/console/language/console-en/translations/cache.tag.invalidate.yml new file mode 100644 index 0000000000000000000000000000000000000000..dbe22a2468d588d0d37ea886f4b5366cc6073640 --- /dev/null +++ b/console/language/console-en/translations/cache.tag.invalidate.yml @@ -0,0 +1,11 @@ +description: 'Invalidate cache tags.' +options: + tag: 'One or more tags to invalidate.' +messages: + start: 'Invalidating tag(s) "%s".' + completed: 'Done invalidating tag(s).' +examples: + - description: Invalidate routes + execution: drupal cti routes + - description: Invalidate a specific node + execution: drupal cti node:1 node_list diff --git a/console/language/console-en/translations/chain.yml b/console/language/console-en/translations/chain.yml new file mode 100644 index 0000000000000000000000000000000000000000..f292475a4b534984e175a34b6ed0d42340c8882c --- /dev/null +++ b/console/language/console-en/translations/chain.yml @@ -0,0 +1,25 @@ +description: 'Chain command execution' +options: + file: 'User defined file containing commands to get executed.' +questions: + chain-file: 'Select chain file to execute' +messages: + missing-file: 'You must provide a valid file path and name.' + invalid-file: 'The file "%s" does not exist.' + module-install: 'module:install command is not runnable inside a chain queue and must be run independently.' + missing-environment-placeholders: 'Missing environment placeholder(s) "%s"' + set-environment-placeholders: 'Set environment placeholders as:' + missing-inline-placeholders: 'Missing inline placeholder(s) "%s"' + set-inline-placeholders: 'Pass inline placeholders as:' + select-value-for-placeholder: 'Select value for "%s" placeholder' + enter-value-for-placeholder: 'Enter value for "%s" placeholder' + legacy-inline: 'Update inline legacy placeholders from %{{name}} to {{name}}.' + legacy-environment: 'Update environment legacy placeholders from ${{(NAME}} or %env(NAME)% to {{env("NAME")}}.' + metadata-registration: | + You should register your chain file as command by providing metadata, more info at: + https://docs.drupalconsole.com/en/chains/registering.html +examples: + - description: 'Providing a file option using full path. (DEPRECATED' + execution: | + drupal chain \ + --file="/path/to/file/chain-file.yml" diff --git a/console/language/console-en/translations/check.yml b/console/language/console-en/translations/check.yml new file mode 100644 index 0000000000000000000000000000000000000000..b98c5bc52e5f5cfe940224636ea0c12aaf10f39a --- /dev/null +++ b/console/language/console-en/translations/check.yml @@ -0,0 +1,9 @@ +description: 'System requirement checker' +messages: + file: 'Checking requirements using file at:' + php-invalid: 'The current installed version "%s" is invalid, it requires "%s" or higher' + configuration-missing: 'The configuration "%s" is missing.' + configuration-overwritten: 'The PHP-Configuration (php.ini) "%s" was missing and overwritten with "%s".' + extension-missing: 'The extension "%s" is missing.' + extension-recommended: 'The extension "%s" is recommended to install.' + success: 'Checks passed.' diff --git a/console/language/console-en/translations/common.yml b/console/language/console-en/translations/common.yml new file mode 100644 index 0000000000000000000000000000000000000000..abc9c4c1c698fb6b6beed2232d1fbc7ffdcbe8b8 --- /dev/null +++ b/console/language/console-en/translations/common.yml @@ -0,0 +1,57 @@ +options: + class: 'Class name' + events: 'Load events from the container' + module: 'The Module name.' + extension: 'The extension name.' + extension-type: 'The extension type.' + services: 'Load services from the container.' + tags: 'Set service tags from the container.' + inputs: 'Create inputs in a form.' + permissions: 'Create permissions.' +questions: + class: 'Enter the Class name' + module: 'Enter the module name' + extension: 'Enter the extension name' + extension-type: 'Enter the extension type' + confirm: 'Do you want proceed with the operation?' + canceled: 'The operation was cancelled.' + events: + message: "\nType the event name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n" + name: 'Enter event name' + services: + confirm: 'Do you want to load services from the container?' + message: "\nType the service name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n" + name: 'Enter your service' + roles: + message: "\nType the role name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n" + name: 'Enter your role' + inputs: + confirm: 'Do you want to generate a form structure?' + label: 'Input label' + machine-name: 'Input machine name' + permission: 'Do you want to generate permissions?' + type: 'New field type (press <return> to stop adding fields)' + invalid: 'Field Type "%s" is invalid.' + description: Description + default-value: + default-value: 'Default value' + checkboxes: 'Default value(s) separated by commas' + weight: 'Weight for input item' + title: 'Title' + fieldset: 'Fieldset' + new-field: 'Enter a new field properties' +errors: + module-dependency: 'Missing module dependency "%s" is not installed. Try module:install to install it.' + class-name-empty: 'The Class name can not be empty' + invalid-file-path: 'You must provide a valid file path' + module-exist: 'Module "%s" already exist.' + machine-name-duplicated: 'Machine name "%s" is duplicated.' +status: + enabled: Enabled + disabled: Disabled +messages: + canceled: 'The generation was cancelled' + drupal-core: 'Drupal Core' + move-phar: 'Accessing console from anywhere on your system' + quick-start: 'Download, install and serve Drupal 8' + available-field-types: 'Available types: <comment>%s</comment>' diff --git a/console/language/console-en/translations/complete.yml b/console/language/console-en/translations/complete.yml new file mode 100644 index 0000000000000000000000000000000000000000..f36c530184237ee6c3294441ef35622c2b21d87e --- /dev/null +++ b/console/language/console-en/translations/complete.yml @@ -0,0 +1 @@ +description: 'Shell completion command list' diff --git a/console/language/console-en/translations/composerize.yml b/console/language/console-en/translations/composerize.yml new file mode 100644 index 0000000000000000000000000000000000000000..babb4c1085e366dde7089e4c0d2bfc3b949e7561 --- /dev/null +++ b/console/language/console-en/translations/composerize.yml @@ -0,0 +1,14 @@ +description: 'Converts Drupal codebase to composer.' +options: + show-packages: 'Show list of packages.' + include-version: 'Include version on suggested result command.' +messages: + name: 'Name' + version: 'Version' + dependencies: 'Dependencies' + profile: 'Profile(s) detected' + module: 'Module(s) detected' + theme: 'Theme(s) detected' + from: 'From your project root:' + execute: 'Execute this command:' + ignore: 'To ignore third party libraries, profiles, modules and themes add to your .gitignore file:' diff --git a/console/language/console-en/translations/config.delete.yml b/console/language/console-en/translations/config.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..08e4e37749f17b3f45e0bffaa2c486a886018865 --- /dev/null +++ b/console/language/console-en/translations/config.delete.yml @@ -0,0 +1,20 @@ +description: 'Delete configuration' +arguments: + type: 'Configuration type.' + name: 'Configuration name.' +messages: + all: 'All configuration sucessfully deleted.' + deleted: 'Configuration "%s" sucessfully deleted.' +errors: + config-storage: 'Configuration type would not be loaded.' + name: 'Configuration name must contain a value.' + type: 'Configuration type is missing.' + not-exists: 'The configuration "%s" does not exist.' +warnings: + undo: 'This action will delete all configuration permanently.' +questions: + sure: 'Are you sure to delete all configuration' +examples: + - description: 'Provide a config type and a config name' + execution: drupal config:delete active all + diff --git a/console/language/console-en/translations/config.diff.yml b/console/language/console-en/translations/config.diff.yml new file mode 100644 index 0000000000000000000000000000000000000000..7b3b81ff7c8e0cc00d078efd53978b2966d4d545 --- /dev/null +++ b/console/language/console-en/translations/config.diff.yml @@ -0,0 +1,18 @@ +description: 'Output configuration items that are different in active configuration compared with a directory.' +arguments: + directory: 'The directory to diff against. If omitted, choose from Drupal config directories.' +options: + reverse: 'See the changes in reverse (i.e diff a directory to the active configuration).' +questions: + directories: 'Config directory:' +table: + headers: + collection: 'Collection' + config-name: 'Configuration item' + operation: 'Operation' +messages: + no-changes: 'There are no changes.' +examples: + - description: 'Provide a config directory' + execution: drupal config:diff ../config/path + diff --git a/console/language/console-en/translations/config.edit.yml b/console/language/console-en/translations/config.edit.yml new file mode 100644 index 0000000000000000000000000000000000000000..282e4f27881fb1edc038654a8fba2c2c92370d1d --- /dev/null +++ b/console/language/console-en/translations/config.edit.yml @@ -0,0 +1,15 @@ +description: 'Change a configuration object with a text editor.' +arguments: + config-name: 'Configuration object name, for example "user.settings".' + editor: 'Editor, for example "vim" or "gedit".' +questions: + config-name: 'Choose a configuration Object' +messages: + no-directory: 'An error occurred while creating your directory at: "%s"' + choose-configuration: 'Choose a configuration' +examples: + - description: 'Edit system cron configurations with "vim" (default editor).' + execution: 'drupal config:edit system.cron' + - description: 'Edit system cron configurations with "gedit".' + execution: 'drupal config:edit system.cron gedit' + diff --git a/console/language/console-en/translations/config.export.content.type.yml b/console/language/console-en/translations/config.export.content.type.yml new file mode 100644 index 0000000000000000000000000000000000000000..488f2f961d5a94e9264db8735923ae1b26308039 --- /dev/null +++ b/console/language/console-en/translations/config.export.content.type.yml @@ -0,0 +1,23 @@ +description: 'Export a specific content type and their fields.' +arguments: + content-type: 'Content Type to be exported' +questions: + content-type: 'Content Type to be exported' + optional-config: 'Export content type in module as an optional configuration' +messages: + content-type-exported: 'Exporting content type' +options: + optional-config: 'Export content type as an optional YAML configuration in your module' + remove-uuid: 'If set, the configuration will be exported without uuid key.' + remove-config-hash: 'If set, the configuration will be exported without the default site hash key.' +examples: + - description: 'Provide a content type and module name' + execution: | + drupal config:export:content:type page \ + --module="demo" + - description: 'If you want export content type provide the optional config' + execution: | + drupal config:export:content:type page \ + --module="demo" \ + --optional-config + diff --git a/console/language/console-en/translations/config.export.single.yml b/console/language/console-en/translations/config.export.single.yml new file mode 100644 index 0000000000000000000000000000000000000000..102cffe072fbd82b764b1873b02b2fbd02b2a1e5 --- /dev/null +++ b/console/language/console-en/translations/config.export.single.yml @@ -0,0 +1,32 @@ +description: 'Export a single configuration or a list of configurations as yml file(s).' +arguments: + name: 'Configuration name.' +options: + include-dependencies: 'Export dependencies of the configuration as well.' + simple-configuration: 'Simple configuration' + optional: 'Export config as an optional YAML configuration in your module' + remove-uuid: 'If set, the configuration will be exported without uuid key.' + remove-config-hash: 'If set, the configuration will be exported without the default site hash key.' +questions: + config-type: 'Configuration type' + name: 'Configuration name' + optional: 'Export config in module as an optional configuration' + remove-uuid: 'Do you want to remove the uuid from this export?' + remove-config-hash: 'Do you want to remove the default site hash from this export?' +messages: + config-not-found: 'Configuration name not found.' + export: 'Configuration was exported at file "%s".' + invalid-config-type: 'Invalid config type, please select one of the list' + invalid-config-name: 'Invalid config name, please select one of the list' + config-exported: 'Configuration(s) exported successfully' +examples: + - description: 'Provide config settings name to be exported' + execution: | + drupal config:export:single \ + --name=config.settings.name + - description: 'if uuid and/or config hashes will be removed.' + execution: | + drupal config:export:single \ + --name=config.settings.name \ + --remove-uuid \ + --remove-config-hash diff --git a/console/language/console-en/translations/config.export.view.yml b/console/language/console-en/translations/config.export.view.yml new file mode 100644 index 0000000000000000000000000000000000000000..ede70183372ae904d6742bfc516f18967130d829 --- /dev/null +++ b/console/language/console-en/translations/config.export.view.yml @@ -0,0 +1,23 @@ +description: 'Export a view in YAML format inside a provided module to reuse in other website.' +messages: + view_exported: 'View exported sucessfully' + depencies-included: 'The following module dependencies were included at "%s"' +questions: + view: 'View to be exported' + optional-config: 'Export view in module as an optional configuration' + include-module-dependencies: 'Include view module dependencies in module info YAML file' +arguments: + view-id: 'View ID' +options: + optional-config: 'Export view as an optional YAML configuration in your module' + include-module-dependencies: 'Include module dependencies in module info YAML file' +examples: + - description: 'Provide a view id' + execution: drupal config:export:view viewid + - description: 'You can provide the interactive values like parameter.' + execution: | + drupal config:export:view viewid \ + --module="modulename" \ + --optional-config \ + --include-module-dependencies + diff --git a/console/language/console-en/translations/config.export.yml b/console/language/console-en/translations/config.export.yml new file mode 100644 index 0000000000000000000000000000000000000000..66f83289da533949fdde93b7984020c6e4b0aa42 --- /dev/null +++ b/console/language/console-en/translations/config.export.yml @@ -0,0 +1,22 @@ +description: 'Export current application configuration.' +options: + directory: 'Define the export directory to save the configuration output.' + tar: 'If set, the configuration will be exported to an archive file.' + remove-uuid: 'If set, the configuration will be exported without uuid key.' + remove-config-hash: 'If set, the configuration will be exported without the default site hash key.' +messages: + directory: 'The configuration was exported at "%s"' + error: 'An error occurred while creating your directory at "%s"' +examples: + - description: 'Optional you can add the path to export' + execution: | + drupal config:export \ + --directory="path/to/export" + - description: 'If export will be in a compressed file and/or if uuid and config hashes will be removed.' + execution: | + drupal config:export \ + --directory="path/to/export" \ + --tar \ + --remove-uuid \ + --remove-config-hash + diff --git a/console/language/console-en/translations/config.import.single.yml b/console/language/console-en/translations/config.import.single.yml new file mode 100644 index 0000000000000000000000000000000000000000..02e9569fe211d85ce9e64b04b893f0aa592ba635 --- /dev/null +++ b/console/language/console-en/translations/config.import.single.yml @@ -0,0 +1,21 @@ +description: 'Import a single configuration or a list of configurations.' +options: + file: 'The file(s) name or file(s) absolute path to import' + directory: 'The path from where to import file(s).' +questions: + file: 'Enter file name or file absolute path to import' + directory: 'Enter path from where to import files.' +messages: + missing-file: 'File option is missing.' + empty-value: 'Value can not be empty' + success: 'Configuration(s) "%s", has been imported successfully.' +examples: + - description: 'Providing a file option using full path.' + execution: | + drupal config:import:single \ + --file="/path/to/file/block.block.default_block.yml" + - description: 'Providing file and directory options' + execution: | + drupal config:import:single \ + --file="block.block.default_block.yml" \ + --directory="/path/to/directory" diff --git a/console/language/console-en/translations/config.import.yml b/console/language/console-en/translations/config.import.yml new file mode 100644 index 0000000000000000000000000000000000000000..30e1a8848b0ee34c966be0aa8e422e94564acd58 --- /dev/null +++ b/console/language/console-en/translations/config.import.yml @@ -0,0 +1,21 @@ +description: 'Import configuration to current application.' +options: + file: 'Path to an archive file of configuration to import.' + directory: 'Path to a directory of configuration to import.' + remove-files: 'Remove files after synchronization.' +messages: + config_files_imported: 'List of config files.' + imported: 'Configuration imported successfully.' + importing: 'Importing configuration.' + already-imported: 'Another request may be synchronizing configuration already.' + nothing-to-do: 'There are no changes to import.' +examples: + - description: 'Provide a configuration file' + execution: | + drupal config:import \ + --file=/path/to/config/file + - description: 'Provide a configuration directory' + execution: | + drupal config:import \ + --directory=/path/to/config/dir + diff --git a/console/language/console-en/translations/config.override.yml b/console/language/console-en/translations/config.override.yml new file mode 100644 index 0000000000000000000000000000000000000000..94d0e37d5f45aa3057eec4ee1dc5509561f016f1 --- /dev/null +++ b/console/language/console-en/translations/config.override.yml @@ -0,0 +1,19 @@ +description: 'Override config value in active configuration.' +questions: + name: 'Enter configuration name' + key: 'Enter the configuration key' + value: 'Enter the configuration value' +arguments: + name: 'Configuration name' + key: 'Key' + value: 'Value' +messages: + configuration: 'Configuration name' + configuration-key: 'Configuration key' + original: 'Original Value' + updated: 'Override Value' + invalid-name: 'Config object "%s" does not exist.' +examples: + - description: 'Set the Contact module flood limit to 10.' + execution: 'drupal config:override contact.settings flood.limit 10' + diff --git a/console/language/console-en/translations/config.validate.yml b/console/language/console-en/translations/config.validate.yml new file mode 100644 index 0000000000000000000000000000000000000000..b34ac21bea9647db65b074aef6d614dd0dac2316 --- /dev/null +++ b/console/language/console-en/translations/config.validate.yml @@ -0,0 +1,10 @@ +description: 'Validate a drupal config against its schema' +options: {} +arguments: {} +messages: + success: 'Config was successfully validated' + no-conf: 'Config with this name does not exist' +examples: + - description: 'Provide the configuration name.' + execution: 'drupal config:validate configuration.name' + diff --git a/console/language/console-en/translations/create.comments.yml b/console/language/console-en/translations/create.comments.yml new file mode 100644 index 0000000000000000000000000000000000000000..f3a7a6539c9c2058e1f5d76b935138aa1acbb4be --- /dev/null +++ b/console/language/console-en/translations/create.comments.yml @@ -0,0 +1,41 @@ +description: 'Create dummy comments for your Drupal 8 application.' +help: 'The <info>create:comments</info> command helps you create dummy comments.' +welcome: 'Welcome to the Drupal comments generator' +arguments: + node-id: 'Node ID where the comments will be created' +options: + limit: 'How many comments would you like to create' + title-words: 'Maximum number of words in comment titles' + time-range: 'How far back in time should the comments be dated' +questions: + node-id: 'Node ID where the comments will be created' + content-type: 'Select content type(s) to be used on comment creation' + limit: 'Enter how many comments would you like to generate' + title-words: 'Enter the maximum number of words in titles' + time-range: 'How far back in time should the comments be dated?' + time-ranges: + - 'Now' + - '1 hour ago' + - '1 day ago' + - '1 week ago' + - '1 month ago' + - '1 year ago' +messages: + node-id: 'Node Id' + comment-id: 'Comment Id' + content-type: 'Content type' + title: 'Title' + created: 'Created Time' + invalid-content-types: 'Content types "%s" are invalid' + created-comments: 'Created "%s" comments successfully' + error: 'Error creating comments: "%s"' +examples: + - description: 'Provide the node id where the comments will be generated.' + execution: drupal create:comments node-id + - description: 'Provide number of comments to generate, max title words and time range.' + execution: | + drupal create:comments node-id \ + --limit="2" \ + --title-words="5" \ + --time-range="1" + diff --git a/console/language/console-en/translations/create.nodes.yml b/console/language/console-en/translations/create.nodes.yml new file mode 100644 index 0000000000000000000000000000000000000000..34cdc2666d5258d1c32cd26a4a3253810fd9c2f9 --- /dev/null +++ b/console/language/console-en/translations/create.nodes.yml @@ -0,0 +1,40 @@ +description: 'Create dummy nodes for your Drupal 8 application.' +help: 'The <info>create:nodes</info> command helps you create dummy nodes.' +welcome: 'Welcome to the Drupal nodes generator' +arguments: + content-types: 'Content type(s) to be used in node creation' +options: + limit: 'How many nodes would you like to create' + title-words: 'Maximum number of words in node titles' + time-range: 'How far back in time should the nodes be dated' +questions: + content-type: 'Select content type(s) to be used on node creation' + limit: 'Enter how many nodes would you like to generate' + title-words: 'Enter the maximum number of words in titles' + time-range: 'How far back in time should the nodes be dated?' + time-ranges: + - 'Now' + - '1 hour ago' + - '1 day ago' + - '1 week ago' + - '1 month ago' + - '1 year ago' +messages: + node-id: 'Node Id' + content-type: 'Content type' + title: 'Title' + created: 'Created Time' + invalid-content-types: 'Content types "%s" are invalid' + created-nodes: 'Created "%s" nodes successfully' + error: 'Error creating nodes: "%s"' +examples: + - description: 'Provide the content type name.' + execution: drupal create:nodes content-name + - description: 'Provide the limit of publications, limit of title words, time range and language.' + execution: | + drupal create:nodes content-name \ + --limit="5" \ + --title-words="5" \ + --time-range="1" \ + --language="und" + diff --git a/console/language/console-en/translations/create.roles.yml b/console/language/console-en/translations/create.roles.yml new file mode 100644 index 0000000000000000000000000000000000000000..7584c5d9e492aa6d8d8f1f0ea7d9bd14578b235b --- /dev/null +++ b/console/language/console-en/translations/create.roles.yml @@ -0,0 +1,19 @@ +description: 'Create dummy roles for your Drupal 8 application.' +help: 'The <info>create:roles</info> command helps you create dummy roles.' +welcome: 'Welcome to the Drupal roles generator' +options: + limit: 'How many roles would you like to create' +questions: + limit: 'Enter how many roles would you like to create' +messages: + role-id: 'Role Id' + role-name: 'Rolename' + created-roles: 'Created "%s" roles successfully' + error: 'Error creating roles: "%s"' +examples: + - description: 'Provide roles.' + execution: drupal create:roles + - description: 'Provide the number of roles to create' + execution: | + drupal create:roles + diff --git a/console/language/console-en/translations/create.terms.yml b/console/language/console-en/translations/create.terms.yml new file mode 100644 index 0000000000000000000000000000000000000000..be26f06cc34b94533e790e311524c44537301bd3 --- /dev/null +++ b/console/language/console-en/translations/create.terms.yml @@ -0,0 +1,28 @@ +description: 'Create dummy terms for your Drupal 8 application.' +help: 'The <info>create:terms</info> command helps you create dummy terms.' +welcome: 'Welcome to the Drupal terms creator' +arguments: + vocabularies: 'Vocabulary(s) to be used in terms creation' +options: + limit: 'How many terms would you like to create' + name-words: 'Maximum number of words in term names' +questions: + vocabularies: 'Select vocabulary(s) to be used on terms creation' + limit: 'Enter how many terms would you like to create' + name-words: 'Enter the maximum number of words in term names' +messages: + term-id: 'Term Id' + vocabulary: 'Vocabulary' + name: 'Name' + invalid-vocabularies: 'Vocabulary(s) "%s" are invalid' + created-terms: 'Created "%s" terms successfully' + error: 'Error creating terms: "%s"' +examples: + - description: 'Provide the vocabulary term name.' + execution: drupal create:terms vocabulary + - description: 'Provide the limit of terms to add and limit of title words.' + execution: | + drupal create:terms tags \ + --limit="10" \ + --name-words="5" + diff --git a/console/language/console-en/translations/create.users.yml b/console/language/console-en/translations/create.users.yml new file mode 100644 index 0000000000000000000000000000000000000000..3225da4baa62272d67c7d65e0c1d27322ed7020a --- /dev/null +++ b/console/language/console-en/translations/create.users.yml @@ -0,0 +1,38 @@ +description: 'Create dummy users for your Drupal 8 application.' +help: 'The <info>create:users</info> command helps you create dummy users.' +welcome: 'Welcome to the Drupal users generator' +arguments: + roles: 'Role(s) to be used in user creation' +options: + limit: 'How many users would you like to create' + password: 'Password to be set to users created' + time-range: 'How far back in time should the users be dated' +questions: + roles: 'Select role(s) to be used on user creation' + limit: 'Enter how many users would you like to generate' + password: 'Enter the password to be set to users created' + time-range: 'How far back in time should the users be dated?' + time-ranges: + - 'Now' + - '1 hour ago' + - '1 day ago' + - '1 week ago' + - '1 month ago' + - '1 year ago' +messages: + user-id: 'User Id' + roles: 'Roles' + username: 'Username' + created: 'Created Time' + created-users: 'Created "%s" users successfully' + error: 'Error creating users: "%s"' +examples: + - description: 'Provide the user role.' + execution: drupal create:users role + - description: 'Provide the number of users to create, password and time range to create.' + execution: | + drupal create:users role \ + --limit="5" \ + --password="usersnewpassword" \ + --time-range="1" + diff --git a/console/language/console-en/translations/create.vocabularies.yml b/console/language/console-en/translations/create.vocabularies.yml new file mode 100644 index 0000000000000000000000000000000000000000..ca70cf4dc6643d5c41555b79144f79ab7eedd03d --- /dev/null +++ b/console/language/console-en/translations/create.vocabularies.yml @@ -0,0 +1,21 @@ +description: 'Create dummy vocabularies for your Drupal 8 application.' +help: 'The <info>create:vocabularies</info> command helps you create dummy vocabularies.' +welcome: 'Welcome to the Drupal vocabularies creator' +options: + limit: 'How many vocabularies would you like to create' + name-words: 'Maximum number of words in vocabulary names' +questions: + limit: 'Enter how many vocabularies would you like to create' + name-words: 'Enter the maximum number of words in vocabulary names' +messages: + vocabulary-id: 'Vocabulary Id' + name: 'Name' + created-terms: 'Created "%s" vocabularies successfully' + error: 'Error creating vocabularies: "%s"' +examples: + - description: 'Provide the number of vocabularies to create and maximum number of words in vocabulary names' + execution: | + drupal create:vocabularies \ + --limit="5" \ + --name-words="5" + diff --git a/console/language/console-en/translations/cron.execute.yml b/console/language/console-en/translations/cron.execute.yml new file mode 100644 index 0000000000000000000000000000000000000000..a4f2b78be27e78fa89c6ae7c2e4c508704ee123e --- /dev/null +++ b/console/language/console-en/translations/cron.execute.yml @@ -0,0 +1,14 @@ +description: 'Execute cron implementations by module or execute all crons' +messages: + module-invalid: 'Module "%s" doesn''t have an implementation of cron' + executing-cron: 'Executing cron function of module "%s"' + success: 'All cron implementations requested were executed successfully' + lock: 'Attempting to re-run cron while it is already running' +examples: + - description: 'Execute the cron globally' + execution: | + drupal cron:execute + - description: 'Execute the cron on the specified module' + execution: | + drupal cron:execute \ + <module> diff --git a/console/language/console-en/translations/cron.release.yml b/console/language/console-en/translations/cron.release.yml new file mode 100644 index 0000000000000000000000000000000000000000..c7a8313f006badcd4d5b95525699fe60d0527a72 --- /dev/null +++ b/console/language/console-en/translations/cron.release.yml @@ -0,0 +1,8 @@ +description: 'Release cron system lock to run cron again' +messages: + released: 'Cron lock was released successfully' +examples: + - description: 'Execute the cron globally' + execution: | + drupal cron:execute + diff --git a/console/language/console-en/translations/database.add.yml b/console/language/console-en/translations/database.add.yml new file mode 100644 index 0000000000000000000000000000000000000000..2fb04a14b84e7263ef42441d0ae2a7062de83fd0 --- /dev/null +++ b/console/language/console-en/translations/database.add.yml @@ -0,0 +1,25 @@ +description: 'Add a database to settings.php' +options: + database: 'The database name' + username: 'The database username' + password: 'The database password' + prefix: 'The database prefix' + host: 'The database host address' + port: 'The database host port' + driver: 'The database driver' +questions: + database: 'Enter the database name' + username: 'Enter the username to access the database' + password: 'Enter password for the database user' + prefix: 'Enter the database prefix' + host: 'Enter the database host address' + port: 'Enter the database host port' + driver: 'Enter the database driver' +error: 'Could not write the site settings file. Either run this command as sudo or temporarily change permissions to allow write access to settings.php.' +examples: + - description: 'Add a database to the settings.php' + execution: | + drupal database:add \ + --database=DATABASE \ + --username=USERNAME \ + --password=PASSWORD diff --git a/console/language/console-en/translations/database.client.yml b/console/language/console-en/translations/database.client.yml new file mode 100644 index 0000000000000000000000000000000000000000..b2c9a4bd7c36519a966d135618ba86627ca4a936 --- /dev/null +++ b/console/language/console-en/translations/database.client.yml @@ -0,0 +1,9 @@ +description: 'Launch a DB client if it''s available' +arguments: + database: "Database key from settings.php" +messages: + connection: 'Connection: "%s"' +examples: + - description: 'Launch the default client or could launch another regarding the specification on the argument' + execution: | + drupal database:client <database> diff --git a/console/language/console-en/translations/database.connect.yml b/console/language/console-en/translations/database.connect.yml new file mode 100644 index 0000000000000000000000000000000000000000..a771d7d219f91d2b7536a4e4f4951e433913867a --- /dev/null +++ b/console/language/console-en/translations/database.connect.yml @@ -0,0 +1,13 @@ +description: "Shows DB connection" +arguments: + database: "Database key from settings.php" +messages: + database-not-found: 'Database "%s" connection info wasn''t found' + database-not-supported: 'Database type "%s" is not supported yet' + database-client-not-found: 'Database client "%s" wasn''t found' + connection: 'Connection: "%s"' +examples: + - description: 'Connects to an specified database, or the default if not arguments passed' + execution: | + drupal database:connect \ + <database> diff --git a/console/language/console-en/translations/database.drop.yml b/console/language/console-en/translations/database.drop.yml new file mode 100644 index 0000000000000000000000000000000000000000..6f71d05bd5eaaf704acb3c96c6fd570dee78b153 --- /dev/null +++ b/console/language/console-en/translations/database.drop.yml @@ -0,0 +1,14 @@ +description: "Drop all tables in a given database." +help: 'The <info>database:drop</info> command helps you drop database tables.' +arguments: + database: 'Database key from settings.php' +question: + drop-tables: 'Confirm you really want to drop all tables in the database "%s"?' +messages: + table: 'Table' + table-drop: 'Drop "%s" tables successfully' +examples: + - description: 'Drop the tables on the database specified on the argument' + execution: | + drupal database:drop \ + <database> diff --git a/console/language/console-en/translations/database.dump.yml b/console/language/console-en/translations/database.dump.yml new file mode 100644 index 0000000000000000000000000000000000000000..4abeb0a642f815bc366f170d08242b685d7d5ba8 --- /dev/null +++ b/console/language/console-en/translations/database.dump.yml @@ -0,0 +1,17 @@ +description: 'Dump structure and contents of a database' +arguments: + database: 'Database key from settings.php' +options: + file: 'The filename for your database backup' + gz: 'Pass this option if you want the sql result file gzipped' +messages: + success: 'Database exported to:' +examples: + - description: 'Dump default database or the one specified on the argument' + execution: | + drupal database:dump \ + <database> + - description: 'Dump in gz compressed format' + execution: | + drupal database:dump \ + --gz \ No newline at end of file diff --git a/console/language/console-en/translations/database.log.clear.yml b/console/language/console-en/translations/database.log.clear.yml new file mode 100644 index 0000000000000000000000000000000000000000..a5812dccb391dc83b9c4a9bcc51e22b89beaabba --- /dev/null +++ b/console/language/console-en/translations/database.log.clear.yml @@ -0,0 +1,22 @@ +description: 'Remove events from DBLog table, filters are available' +arguments: + event-id: 'DBLog event ID' +options: + type: 'Filter events by a specific type' + severity: 'Filter events by a specific level of severity' + user-id: 'Filter events by a specific user id' +messages: + event-deleted: 'Event "%s" was deleted' + clear-error: 'Clear process fail, please check used filters' + clear-sucess: 'Clear of events was successfully' +examples: + - description: 'Clear the database log from DBLog table' + execution: | + drupal database:log:clear \ + <database> + - description: 'Clear the database log from DBLog table using filters' + execution: | + drupal database:log:clear \ + <database> \ + --type=TYPE \ + --severity=SEVERITY \ No newline at end of file diff --git a/console/language/console-en/translations/database.log.common.yml b/console/language/console-en/translations/database.log.common.yml new file mode 100644 index 0000000000000000000000000000000000000000..a0afaf323e0ab4c0f07950f3917dc69a2371580e --- /dev/null +++ b/console/language/console-en/translations/database.log.common.yml @@ -0,0 +1,12 @@ +options: + type: 'Filter events by a specific type' + severity: 'Filter events by a specific level of severity' + user-id: 'Filter events by a specific user id' +messages: + event-id: 'Event ID' + type: Type + date: Date + message: Message + user: User + severity: Severity + invalid-severity: 'Severity type is invalid, filter was ignored' \ No newline at end of file diff --git a/console/language/console-en/translations/database.log.poll.yml b/console/language/console-en/translations/database.log.poll.yml new file mode 100644 index 0000000000000000000000000000000000000000..d7d80c6146562da2774b0b5bdd27f789281c5bc8 --- /dev/null +++ b/console/language/console-en/translations/database.log.poll.yml @@ -0,0 +1,14 @@ +description: 'Poll the watchdog and print new log entries every x seconds' +arguments: + duration: 'Duration in seconds which to sleep between database reads' +messages: + warning: | + Do not use in production environments + As this script blocks you are advised to only run it on vm's with multiple cores for performance reasons + Stop this polling mechanism before you clean/truncate the watchdog table! + Quit with ^C +examples: + - description: 'Print the log entries on screen every x seconds' + execution: | + drupal database:log:poll \ + 100 diff --git a/console/language/console-en/translations/database.query.yml b/console/language/console-en/translations/database.query.yml new file mode 100644 index 0000000000000000000000000000000000000000..4e010a3939b69abc035affdaa356cafb84b54f8b --- /dev/null +++ b/console/language/console-en/translations/database.query.yml @@ -0,0 +1,19 @@ +description: 'Executes a SQL statement directly as argument' +arguments: + query: 'The SQL statement to execute' + database: 'Database key from settings.php' +options: + quick: 'Do not cache each query result, print each row as it is received' + debug: 'Prints debugging information and memory and CPU usage statistics when the program exits' + html: 'Produce HTML output' + xml: 'Produce XML output' + raw: 'Special characters are not escaped in the output.' + vertical: 'Print query output rows vertically' + batch: 'Print results using tab as the column separator, with each row on a new line. With this option, mysql does not use the history file' +messages: + connection: 'Connection: "%s"' +help: 'First argument should be the SQL statement. Second argument could be the name of the affected database.' +examples: + - description: 'Send a database query' + execution: | + drupal database:query 'select * from node limit 0,1' diff --git a/console/language/console-en/translations/database.restore.yml b/console/language/console-en/translations/database.restore.yml new file mode 100644 index 0000000000000000000000000000000000000000..b11d5f2b84ae065549ecf899785bc4b2f4ef28dd --- /dev/null +++ b/console/language/console-en/translations/database.restore.yml @@ -0,0 +1,14 @@ +description: 'Restore structure and contents of a database.' +arguments: + database: 'Database key from settings.php' +options: + file: 'The filename for your database backup file. If using a .sql.gz file, the gunzip command needs to be installed.' +messages: + success: 'Database imported from:' + no-file: 'Missing file option' +help: 'Restore structure and contents of a database.' +examples: + - description: 'Restore the database file dump to the database default or another one specified' + execution: | + drupal database:restore \ + --file='/srv/dump/db.sql' diff --git a/console/language/console-en/translations/debug.breakpoints.yml b/console/language/console-en/translations/debug.breakpoints.yml new file mode 100644 index 0000000000000000000000000000000000000000..e88c54fed2bb475fc1f8c774d94bae2d26a1689e --- /dev/null +++ b/console/language/console-en/translations/debug.breakpoints.yml @@ -0,0 +1,12 @@ +description: 'Displays breakpoints available in application' +options: + group-name: 'Enter Breakpoint Group Name' +messages: + name: 'Extensions with breakpoints' +examples: + - description: 'Provide a group name.' + execution: drupal debug:breakpoints bartik +examples: + - description: 'Displays the breakpoints available on the site' + execution: | + drupal debug:breakpoints diff --git a/console/language/console-en/translations/debug.cache.context.yml b/console/language/console-en/translations/debug.cache.context.yml new file mode 100644 index 0000000000000000000000000000000000000000..be9ec82e8ff5a68c03ed66f27a10e33606d7045e --- /dev/null +++ b/console/language/console-en/translations/debug.cache.context.yml @@ -0,0 +1,9 @@ +description: 'Displays current cache context for the application.' +messages: + code: 'Context ID' + label: 'Label' + class: 'Class path' +examples: + - description: 'Displays cache context' + execution: | + drupal debug:cache:context diff --git a/console/language/console-en/translations/debug.chain.yml b/console/language/console-en/translations/debug.chain.yml new file mode 100644 index 0000000000000000000000000000000000000000..a74e31df155150dc2b589ac563a6f689dbfd144e --- /dev/null +++ b/console/language/console-en/translations/debug.chain.yml @@ -0,0 +1,6 @@ +description: 'List available chain files.' +messages: + directory: 'Directory' + file: 'File name.' + command: 'Command name.' + no-files: 'No chain files found.' diff --git a/console/language/console-en/translations/debug.config.settings.yml b/console/language/console-en/translations/debug.config.settings.yml new file mode 100644 index 0000000000000000000000000000000000000000..34087fbe4f8c7cc65e7161aa710e281d4b736de4 --- /dev/null +++ b/console/language/console-en/translations/debug.config.settings.yml @@ -0,0 +1,9 @@ +description: 'Displays current key:value on settings file.' +help: 'The <info>debug:config:settings</info> command helps you displaying current key:value on settings file.' +welcome: 'Welcome to the Drupal Config Settings Debug command' +messages: + current: 'Current Key:value on settings file' +examples: + - description: 'Displays key:value as per the settings file' + execution: | + drupal debug:config:settings diff --git a/console/language/console-en/translations/debug.config.validate.yml b/console/language/console-en/translations/debug.config.validate.yml new file mode 100644 index 0000000000000000000000000000000000000000..e6d78eb066431545743fd44000c78a5a185a3133 --- /dev/null +++ b/console/language/console-en/translations/debug.config.validate.yml @@ -0,0 +1,14 @@ +description: 'Validate a schema implementation before a module is installed.' +help: 'Helper function to validate a schema implementation before a module is installed. Specify the config and the schema file paths as arguments and validation will be run against them, making schema easier to debug without time consuming installs' +options: {} +arguments: {} +messages: + noConfFile: 'Config file at the specified path does not exist' + noConfSchema: 'Config schema at the specified path does not exist' + noSchemaName: 'Could not find schema definition in schema file. Using definition name:' +examples: + - description: 'Validates a schema' + execution: | + drupal debug:config:validate \ + /path/to/file \ + /path/to/schema-filepath diff --git a/console/language/console-en/translations/debug.config.yml b/console/language/console-en/translations/debug.config.yml new file mode 100644 index 0000000000000000000000000000000000000000..d471355f4be71150a490d673cc0f7f67bfda1e9b --- /dev/null +++ b/console/language/console-en/translations/debug.config.yml @@ -0,0 +1,17 @@ +description: 'List configuration objects names and single configuration object.' +arguments: + name: 'Configuration object name, for example "system.site".' +options: + show-overridden: 'Show overridden configurations.' +errors: + not-exists: 'The configuration "%s" does not exist.' + +examples: + - description: 'List all configuration object names.' + execution: 'drupal debug:config' + - description: 'Display system site configurations values.' + execution: 'drupal debug:config system.site' + - description: 'List all system configuration names.' + execution: 'drupal debug:config | grep system' + - description: 'List all configuration including overridden values.' + execution: 'drupal debug:config --show-overridden' diff --git a/console/language/console-en/translations/debug.container.yml b/console/language/console-en/translations/debug.container.yml new file mode 100644 index 0000000000000000000000000000000000000000..9a2e740019e6d504b82bcc534bc46c024dee0f25 --- /dev/null +++ b/console/language/console-en/translations/debug.container.yml @@ -0,0 +1,25 @@ +description: 'Displays current services for an application.' +arguments: + service: 'Service name.' + method: 'Method name.' + arguments: 'Array of Arguments in CSV or JSON format.' +options: + tag: 'Service tag ' +messages: + service-id: 'Service ID' + class-name: 'Class Name' + service: 'Service' + class: 'Class' + interface: 'Interface(s)' + parent: 'Parent class' + variables: 'Variables' + methods: 'Methods' + arguments: 'Arguments' + method: 'Method' + return: 'Return' +errors: + method-not-exists: 'This method doesn''t exists in this service.' +examples: + - description: 'Displays the views.views_data_helper services' + execution: | + drupal debug:container views.views_data_helper diff --git a/console/language/console-en/translations/debug.cron.yml b/console/language/console-en/translations/debug.cron.yml new file mode 100644 index 0000000000000000000000000000000000000000..cf931e60fb4af513f756087cfcac8eb16424a22a --- /dev/null +++ b/console/language/console-en/translations/debug.cron.yml @@ -0,0 +1,8 @@ +description: 'List of modules implementing a cron' +messages: + module-list: 'Modules implementing a cron method' + module: Module +examples: + - description: 'This will show a list with modules implementing the cron hook' + execution: | + drupal debug:cron diff --git a/console/language/console-en/translations/debug.database.log.yml b/console/language/console-en/translations/debug.database.log.yml new file mode 100644 index 0000000000000000000000000000000000000000..fb23aaf64a3be0398a8ba91eb1602d0b75823745 --- /dev/null +++ b/console/language/console-en/translations/debug.database.log.yml @@ -0,0 +1,17 @@ +description: 'Displays current log events for the application' +arguments: + event-id: 'DBLog event ID' +options: + asc: 'List events in ascending order' + limit: 'Limit results to a specific number' + offset: 'Starting point of a limit' + yml: 'Print in a yml style' +messages: + not-found: 'DBLog event "%s" wasn''t found' +examples: + - description: 'List all the entries on the log' + execution: | + drupal debug:database:log + - description: 'List specific log entry by Event ID' + execution: | + drupal debug:database:log 21228 diff --git a/console/language/console-en/translations/debug.database.table.yml b/console/language/console-en/translations/debug.database.table.yml new file mode 100644 index 0000000000000000000000000000000000000000..8258c29b757fb0ae78e111d2d0d3cce0e61c5cf3 --- /dev/null +++ b/console/language/console-en/translations/debug.database.table.yml @@ -0,0 +1,18 @@ +description: 'Show all tables in a given database.' +help: 'The <info>debug:database:table</info> command helps you debug database tables.' +arguments: + table: 'Table to debug' +options: + database: 'Database key from settings.php' +messages: + table-show: 'Showing tables for "%s" database' + table: 'Table' + column: 'Column' + type: 'Type' +examples: + - description: 'Show all tables in a database' + execution: | + drupal debug:database:table + - description: 'Show fields in the node table or another specified in the argument' + execution: | + drupal debug:database:table node diff --git a/console/language/console-en/translations/debug.entity.yml b/console/language/console-en/translations/debug.entity.yml new file mode 100644 index 0000000000000000000000000000000000000000..f217073ba9dc3040ca616d68c535542e22ca68cd --- /dev/null +++ b/console/language/console-en/translations/debug.entity.yml @@ -0,0 +1,12 @@ +description: 'Debug entities available in the system' +help: 'The <info>debug:entity</info> command helps get a list of entities.' +arguments: +questions: +messages: +table-headers: + entity-name: 'Entity name' + entity-type: 'Entity type' +examples: + - description: 'Displays the available entities' + execution: | + drupal debug:entity diff --git a/console/language/console-en/translations/debug.event.yml b/console/language/console-en/translations/debug.event.yml new file mode 100644 index 0000000000000000000000000000000000000000..e9197b33f058fcc3d35eb4e8585f5cadf5e763be --- /dev/null +++ b/console/language/console-en/translations/debug.event.yml @@ -0,0 +1,16 @@ +description: 'Displays current events ' +help: 'The <info>debug:event</info> command helps you debug events.' +arguments: + event: 'Event to debug' +messages: + event: Event Name + class: 'Class' + method: 'Method' + no-events: 'This event does not exist, try to execute command: debug:event' +examples: + - description: 'List all the events that could be debugged' + execution: | + drupal debug:evet + - description: 'Show the information for the kernel.request event' + execution: | + drupal debug:event kernel.request \ No newline at end of file diff --git a/console/language/console-en/translations/debug.features.yml b/console/language/console-en/translations/debug.features.yml new file mode 100644 index 0000000000000000000000000000000000000000..5ef07c5d8a8b4bd0a3fedecbcafb8cb015ad463b --- /dev/null +++ b/console/language/console-en/translations/debug.features.yml @@ -0,0 +1,11 @@ +description: 'List registered features.' +help: 'List registered features.' +arguments: + bundle: 'Bundle name' +messages: + bundle: 'Bundle' + name: 'Name' + machine-name: 'Machine Name' + status: 'Status' + state: 'State' + diff --git a/console/language/console-en/translations/debug.image.styles.yml b/console/language/console-en/translations/debug.image.styles.yml new file mode 100644 index 0000000000000000000000000000000000000000..0aff9195506bb7ffdc8ffa63474f88b7bbd59086 --- /dev/null +++ b/console/language/console-en/translations/debug.image.styles.yml @@ -0,0 +1,9 @@ +description: 'List image styles on the site' +messages: + styles-list: 'Image Styles defined in the site' + styles-label: 'Label' + styles-name: 'Machine Name' +examples: + - description: 'List all images styles on the site' + execution: | + drupal debug:image:styles diff --git a/console/language/console-en/translations/debug.libraries.yml b/console/language/console-en/translations/debug.libraries.yml new file mode 100644 index 0000000000000000000000000000000000000000..c431b65c98c39e63d56299bcdfa6e26bb01c06a2 --- /dev/null +++ b/console/language/console-en/translations/debug.libraries.yml @@ -0,0 +1,17 @@ +description: 'Displays libraries available in application' +options: + name: 'Extension or Library Name' +messages: + extension: 'Extension' + library: 'Library' + info: 'Library Information' +examples: + - description: 'List all extensions with libraries' + execution: | + drupal debug:libraries + - description: 'List block extension libraries' + execution: | + drupal debug:libraries block + - description: 'List block/drupal.block library' + execution: | + drupal debug:libraries block/drupal.block diff --git a/console/language/console-en/translations/debug.migrate.yml b/console/language/console-en/translations/debug.migrate.yml new file mode 100644 index 0000000000000000000000000000000000000000..779730f35db3e25cbcc7aa52b67843c0006bd74c --- /dev/null +++ b/console/language/console-en/translations/debug.migrate.yml @@ -0,0 +1,12 @@ +description: 'Display current migration available for the application' +arguments: + tag: 'Migrate tag' +messages: + id: 'Migration Id' + description: Description + no-migrations: 'There aren''t migrations available try to execute command: migrate:setup:migrations' + tags: Tags +examples: + - description: 'Displays current migration' + execution: | + drupal debug:migrate diff --git a/console/language/console-en/translations/debug.module.yml b/console/language/console-en/translations/debug.module.yml new file mode 100644 index 0000000000000000000000000000000000000000..034d88adfa2d48b3c4cf223a2d72fc8641aa89ce --- /dev/null +++ b/console/language/console-en/translations/debug.module.yml @@ -0,0 +1,24 @@ +description: 'Displays current modules available for application' +module: 'Module name' +options: + status: 'Module status [installed|uninstalled]' + type: 'Module type [core|no-core]' +messages: + id: ID + name: Name + status: Status + origin: Origin + package: Package + installed: Installed + uninstalled: Uninstalled + version: Version + schema-version: 'Schema version' + total-downloads: 'Total installs' + total-monthly: 'Monthly installs' + total-daily: 'Daily installs' + no-results: 'Module "%s" was not found in the repository' +examples: + - description: 'Display all installed modules' + execution: 'drupal mod --status=installed' + - description: 'Display all installed and no core modules' + execution: 'drupal mod --status=installed --type=no-core' diff --git a/console/language/console-en/translations/debug.multisite.yml b/console/language/console-en/translations/debug.multisite.yml new file mode 100644 index 0000000000000000000000000000000000000000..4e1fbb40e9a9cc342ffc7ac818a9f7373a27b7ee --- /dev/null +++ b/console/language/console-en/translations/debug.multisite.yml @@ -0,0 +1,11 @@ +description: 'List all multi-sites available in system' +help: 'The <info>debug:multisite</info> list all known multi-sites.' +messages: + no-multisites: 'No multi-sites configured' + site: 'Site' + directory: 'Directory' + site-format: 'Sites are written using the format: <port>.<domain>.<path>' +examples: + - description: 'Displays multi-site information' + execution: | + drupal debug:multisite diff --git a/console/language/console-en/translations/debug.permission.yml b/console/language/console-en/translations/debug.permission.yml new file mode 100644 index 0000000000000000000000000000000000000000..aade16bdc32115741c8649e0cc68cfdc35969866 --- /dev/null +++ b/console/language/console-en/translations/debug.permission.yml @@ -0,0 +1,22 @@ +description: 'Displays all user permissions.' +help: | + Display all user permissions and also list all user permissions from a specific user role. + + List all user permissions: + <info>drupal debug:permission</info> + + List all user permissions from a user role + <info>drupal debug:permission authenticated</info> + +arguments: + role: 'User role' +messages: + role-error: 'Role "%s" does not exist. Please use an existing user role.' +table-headers: + permission-name: 'Permission name' + permission-label: 'Permission Label' + permission-role: 'Role' +examples: + - description: 'Displays all the permissions availables on the site' + execution: | + drupal debug:permission diff --git a/console/language/console-en/translations/debug.plugin.yml b/console/language/console-en/translations/debug.plugin.yml new file mode 100644 index 0000000000000000000000000000000000000000..8553725ed5abb6f4e10db39bb0f3806c4105942a --- /dev/null +++ b/console/language/console-en/translations/debug.plugin.yml @@ -0,0 +1,39 @@ +description: 'Displays all plugin types.' +help: | + Display all plugin types, plugin instances of a specific type, or the definition for a specific plugin. + + List all plugin types: + <info>drupal debug:plugin</info> + + List all instances of the image effect plugin type: + <info>drupal debug:plugin image.effect</info> + + Show the definition for the image convert plugin: + <info>drupal debug:plugin image.effect image_convert</info> + + <comment>NOTE: Only plugin types exposed through services are supported.</comment> When developing a custom plugin type, expose it as a service by adding it to modulename.services.yml with the name "plugin.manager.PLUGIN_TYPE". +arguments: + type: 'Plugin type' + id: 'Plugin ID' +errors: + plugin-type-not-found: 'Plugin type "%s" not found. No service available for that type.' +messages: + plugin-info: 'Plugin additional information' +table-headers: + plugin-type-name: 'Plugin type' + plugin-type-class: 'Plugin manager class' + plugin-id: 'Plugin ID' + plugin-class: 'Plugin class' + definition-key: 'Key' + definition-value: 'Value' + setting: 'Setting' +examples: + - description: 'Displays a list with all the plugins on the current site' + execution: | + drupal debug:plugin + - description: 'Displays block plugin information' + execution: | + drupal debug:plugin block + - description: 'Displays block broken information' + execution: | + drupal debug:plugin block broken diff --git a/console/language/console-en/translations/debug.queue.yml b/console/language/console-en/translations/debug.queue.yml new file mode 100644 index 0000000000000000000000000000000000000000..667e352281fa4552ea94784b0f5974e2ae3737e6 --- /dev/null +++ b/console/language/console-en/translations/debug.queue.yml @@ -0,0 +1,9 @@ +description: 'Displays the queues of your application' +messages: + queue: 'Queue' + items: 'Items' + class: 'Class' +examples: + - description: 'Displays the queues of the application' + execution: | + drupal debug:queue diff --git a/console/language/console-en/translations/debug.rest.yml b/console/language/console-en/translations/debug.rest.yml new file mode 100644 index 0000000000000000000000000000000000000000..6c6f101cdcd0e07a5f3138eca8eb77882c07c75f --- /dev/null +++ b/console/language/console-en/translations/debug.rest.yml @@ -0,0 +1,21 @@ +description: 'Display current rest resource for the application' +arguments: + resource-id: 'Rest ID' +options: + status: 'Rest resource status enabled | disabled' +messages: + id: 'Rest ID' + label: Label + canonical-url: 'Canonical URL' + status: Status + provider: Provider + enabled: Enabled + disabled: Disabled + rest-state: 'REST States' + supported-formats: 'Supported Formats' + supported-auth: 'Supported Authentication Providers' + not-found: 'Rest resource "%s" not found' +examples: + - description: 'Displays rest hooks' + execution: | + drupal debug:rest diff --git a/console/language/console-en/translations/debug.roles.yml b/console/language/console-en/translations/debug.roles.yml new file mode 100644 index 0000000000000000000000000000000000000000..b1bb15ae29810e7685710a02fc4e1493ba399970 --- /dev/null +++ b/console/language/console-en/translations/debug.roles.yml @@ -0,0 +1,10 @@ +description: 'Displays current roles for the application' +help: 'The <info>debug:roles</info> command helps you get current roles.' +welcome: 'Welcome to the Drupal roles debug' +messages: + role-id: 'Role ID' + role-name: 'Role Name' +examples: + - description: 'Roles list on the site' + execution: | + drupal debug:roles diff --git a/console/language/console-en/translations/debug.router.yml b/console/language/console-en/translations/debug.router.yml new file mode 100644 index 0000000000000000000000000000000000000000..1341a87eeeaae3655a39592db0f47e1d8e9652ce --- /dev/null +++ b/console/language/console-en/translations/debug.router.yml @@ -0,0 +1,23 @@ +description: 'Displays current routes for the application or information for a particular route' +arguments: + route-name: 'Route names' +messages: + name: 'Route name' + class: 'Class path' + route: Route + path: Path + defaults: Defaults + requirements: Requirements + options: Options +examples: + - description: 'Displays current routes for the application' + execution: 'drupal rod' + - description: 'Displays details for the route user.page (/user)' + execution: 'drupal rod user.page' +examples: + - description: 'Shows the routes list on the site' + execution: | + drupal debug:router + - description: 'Display information on the user.login' + execution: | + drupal debug:router user.login \ No newline at end of file diff --git a/console/language/console-en/translations/debug.settings.yml b/console/language/console-en/translations/debug.settings.yml new file mode 100644 index 0000000000000000000000000000000000000000..725bf0f116f948df0b08f742f1f312fccee12200 --- /dev/null +++ b/console/language/console-en/translations/debug.settings.yml @@ -0,0 +1,9 @@ +description: 'List user Drupal Console settings.' +messages: + config-key: 'Config key' + config-value: 'Config value' + config-file: 'Config file' +examples: + - description: 'List user Drupal Console settings.' + execution: | + drupal debug:settings diff --git a/console/language/console-en/translations/debug.site.yml b/console/language/console-en/translations/debug.site.yml new file mode 100644 index 0000000000000000000000000000000000000000..e7f37b8853cacaa2f2af8b87a3716a5bc92efd81 --- /dev/null +++ b/console/language/console-en/translations/debug.site.yml @@ -0,0 +1,20 @@ +description: 'List all known local and remote sites.' +help: 'The <info>debug:site</info> list all known local and remote sites.' +messages: + site: 'Site' + host: 'Host' + root: 'Root' + invalid-sites: 'No sites defined.' + invalid-sites-using: | + Using a site alias requires local configuration, more info at: + https://docs.drupalconsole.com/en/alias/using-site-alias.html + invalid-site: 'Invalid site name' + private-key: 'Error with private key' + connect-error: 'Error connecting to remote machine' +options: + target: 'Target' + property: 'Property' +examples: + - description: 'List all known local and remote sites.' + execution: | + drupal debug:site diff --git a/console/language/console-en/translations/debug.state.yml b/console/language/console-en/translations/debug.state.yml new file mode 100644 index 0000000000000000000000000000000000000000..9d995a2f4b6f8df24a2fe6b0a93fb7bc4cedcb29 --- /dev/null +++ b/console/language/console-en/translations/debug.state.yml @@ -0,0 +1,13 @@ +description: 'Show the current State keys.' +help: 'Show the current State keys.' +arguments: + key: 'The State key to debug.' +messages: + key: 'The State key' +examples: + - description: 'List of the states on the site' + execution: | + drupal debug:state + - description: 'Displays a detail of the state install_task tok from the list of states' + execution: | + drupal debug:state install_task diff --git a/console/language/console-en/translations/debug.test.yml b/console/language/console-en/translations/debug.test.yml new file mode 100644 index 0000000000000000000000000000000000000000..3299674aad41d7f9538d631b56f036df03eddec8 --- /dev/null +++ b/console/language/console-en/translations/debug.test.yml @@ -0,0 +1,20 @@ +description: 'List Test Units available for the application.' +help: 'List Test Units available for the application.' +arguments: + test-class: 'Test Class' +options: + group: Group +messages: + class: 'Test Class' + description: Description + group: Group + type: 'Test Type' + missing-dependency: 'Missing dependency' + methods: 'Test methods' + not-found: 'Debug wasn''t found, try enclosure test id between double quotes.' + success-groups: 'All testing groups were listed sucessfully, use the group argument to filter Test unit by group i.e $ drupal debug:test Url' + success-group: 'All test units for group "%s" were listed sucessfully' +examples: + - description: '' + execution: | + drupal debug:test diff --git a/console/language/console-en/translations/debug.theme.keys.yml b/console/language/console-en/translations/debug.theme.keys.yml new file mode 100644 index 0000000000000000000000000000000000000000..976ce004c89c3ef84cb162336edcdb20549853c1 --- /dev/null +++ b/console/language/console-en/translations/debug.theme.keys.yml @@ -0,0 +1,22 @@ +description: 'Displays all theme keys provided by hook_theme functions' +help: | + Display all theme keys, or the definition for a specific theme key. + + List all theme keys: + <info>drupal debug:theme:keys</info> + + Show the definition for the item_list theme key: + <info>drupal debug:theme:keys item_list</info> +arguments: + key: 'Key' +table-headers: + key: 'Key' + provider-type: 'Provider type' + provider: 'Provider' + value: 'Value' +provider-types: + module: 'Module' + base-theme-engine: 'Base theme engine' + base-theme: 'Base theme' + theme-engine: 'Theme engine' + theme: 'Theme' diff --git a/console/language/console-en/translations/debug.theme.yml b/console/language/console-en/translations/debug.theme.yml new file mode 100644 index 0000000000000000000000000000000000000000..fac0258006dbdb6a05dba6f551e69d51826c2659 --- /dev/null +++ b/console/language/console-en/translations/debug.theme.yml @@ -0,0 +1,22 @@ +description: 'Displays current themes for the application' +arguments: + theme: 'Specific theme to debug' +messages: + theme-id: 'Id' + theme-name: 'Name' + status: 'Status' + version: 'Version' + installed: 'Installed' + uninstalled: 'Uninstalled' + default-theme: 'Default theme' + properties: 'Properties' + regions: 'Regions' + invalid-theme: 'Theme "%s" is invalid' + theme-properties: 'Properties' +examples: + - description: 'List of themes on the site' + execution: | + drupal debug:theme + - description: 'Bartik theme information' + execution: | + drupal debug:theme bartik \ No newline at end of file diff --git a/console/language/console-en/translations/debug.update.yml b/console/language/console-en/translations/debug.update.yml new file mode 100644 index 0000000000000000000000000000000000000000..9ed7fc781e3c8923d79ee31befddbce065070e25 --- /dev/null +++ b/console/language/console-en/translations/debug.update.yml @@ -0,0 +1,17 @@ +description: 'Displays current updates available for the application' +messages: + no-updates: 'No pending updates' + severity: 'Severity' + title: 'Title' + value: 'Value' + description: 'Description' + requirements-error: 'The following requirement weren''t completed' + module-list: 'Modules with pending updates' + module-list-post-update: 'Modules with pending post updates' + module: 'Module' + update-n: 'Update N' + post-update: 'Post update function' +examples: + - description: 'List of pending updates' + execution: | + drupal debug:update diff --git a/console/language/console-en/translations/debug.user.yml b/console/language/console-en/translations/debug.user.yml new file mode 100644 index 0000000000000000000000000000000000000000..29cb406f160e41fe731e68989001cbef5344b5fa --- /dev/null +++ b/console/language/console-en/translations/debug.user.yml @@ -0,0 +1,21 @@ +description: 'Displays current users for the application' +help: 'The <info>debug:user</info> command helps you get current users.' +welcome: 'Welcome to the Drupal user debug' +options: + roles: 'Roles to filter debug' + limit: 'How many users would you like to be listed in debug' + uid: 'Filters the result list by uids [between quotes separated by spaces]' + username: 'Filters the result list by user-names [between quotes separated by spaces]' + mail: 'Filters the result list by user''s e-mail [between quotes separated by spaces]' +questions: + roles: 'Select role(s) to be used to filter user debug list' + limit: 'Enter how many users would you like to show' +messages: + user-id: 'User ID' + username: 'Username' + roles: 'Roles' + status: 'Status' +examples: + - description: 'Users list on the site' + execution: | + drupal debug:user diff --git a/console/language/console-en/translations/debug.views.plugins.yml b/console/language/console-en/translations/debug.views.plugins.yml new file mode 100644 index 0000000000000000000000000000000000000000..b3b9b42a3b400557f109ee6782b75d1bb6c5d055 --- /dev/null +++ b/console/language/console-en/translations/debug.views.plugins.yml @@ -0,0 +1,12 @@ +description: 'Displays current views plugins for the application' +arguments: + type: 'Filter views plugins by type' +messages: + type: 'Type' + name: 'Name' + provider: 'Provider' + views: 'Views' +examples: + - description: 'List of views plugins' + execution: | + drupal debug:views:plugins diff --git a/console/language/console-en/translations/debug.views.yml b/console/language/console-en/translations/debug.views.yml new file mode 100644 index 0000000000000000000000000000000000000000..91b877ede287504275f47052bb3ec78a21c3ebcd --- /dev/null +++ b/console/language/console-en/translations/debug.views.yml @@ -0,0 +1,22 @@ +description: 'Displays current views resources for the application' +arguments: + view-id: 'View ID' + view-tag: 'View tag' + view-status: 'View status (Enabled|Disabled)' +messages: + view-id: 'View ID' + view-name: 'View name' + description: Description + tag: Tag + status: Status + path: Path + not-found: 'View "%s" wasn''t found.' + display-list: 'Display list' + display-id: ID + display-name: Name + display-description: Description + display-paths: Paths +examples: + - description: 'List of views on the site' + execution: | + drupal debug:views diff --git a/console/language/console-en/translations/devel.dumper.yml b/console/language/console-en/translations/devel.dumper.yml new file mode 100644 index 0000000000000000000000000000000000000000..e27a51881ff1c6f510c1c966bff36f5d09bbb438 --- /dev/null +++ b/console/language/console-en/translations/devel.dumper.yml @@ -0,0 +1,7 @@ +messages: + change-devel-dumper-plugin: 'Change the devel dumper plugin' + name-devel-dumper-plugin: 'Name of the devel dumper plugin' + devel-must-be-installed: 'Devel must be installed' + select-debug-dumper: 'Select a Debug Dumper' + dumper-not-exist: 'Dumper does not exist' + devel-dumper-set: 'Devel Dumper set to: "%s"' diff --git a/console/language/console-en/translations/docker.init.yml b/console/language/console-en/translations/docker.init.yml new file mode 100644 index 0000000000000000000000000000000000000000..95f79c02d24d1229b3d0253bf5ec1a476b97eb93 --- /dev/null +++ b/console/language/console-en/translations/docker.init.yml @@ -0,0 +1 @@ +description: 'Create a docker-compose.yml file' diff --git a/console/language/console-en/translations/dotenv.init.yml b/console/language/console-en/translations/dotenv.init.yml new file mode 100644 index 0000000000000000000000000000000000000000..deec7eeea046145157eb54a3dba3d78b3862de51 --- /dev/null +++ b/console/language/console-en/translations/dotenv.init.yml @@ -0,0 +1,38 @@ +description: 'Add support and required config to work with an .env file' +messages: + template-env: | + This file is a "template" of which env vars need to be defined + for your application, use only on development stages. + Create real environment variables when deploying to production. + load-from-env: | + If not using real environment variables. + Make sure you add the dependency using composer + + Drupal 8.5 and up versions `composer require symfony/dotenv` + if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) { + $dotenv = new \Symfony\Component\Dotenv\Dotenv(dirname(DRUPAL_ROOT)); + $dotenv->load(); + } + + Drupal 8.4 and minor versions `composer require vlucas/phpdotenv` + if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) { + $dotenv = new \Dotenv\Dotenv(dirname(DRUPAL_ROOT)); + $dotenv->load(); + } + load-settings: | + # Load key/value settings + $settings_drupal = array_filter( + $_SERVER, + function($key) { + return strpos($key, 'SETTINGS_') === 0; + }, + ARRAY_FILTER_USE_KEY + ); + + # Set key/value settings + foreach ($settings_drupal as $name => $value) { + if (substr($name, 0, 9) === 'SETTINGS_') { + $key = strtolower(substr($name, 9)); + $settings['settings'][$key] = $value; + } + } diff --git a/console/language/console-en/translations/drush.yml b/console/language/console-en/translations/drush.yml new file mode 100644 index 0000000000000000000000000000000000000000..7a398a911055f9c3baf7f25623ac889c5c3bfbc4 --- /dev/null +++ b/console/language/console-en/translations/drush.yml @@ -0,0 +1,3 @@ +description: 'Drupal Console equivalents' +messages: + not-found: 'Drush command not found' diff --git a/console/language/console-en/translations/elephpant.yml b/console/language/console-en/translations/elephpant.yml new file mode 100644 index 0000000000000000000000000000000000000000..d9e4499b6c772d43634316ac7c1e3e3d8a53a426 --- /dev/null +++ b/console/language/console-en/translations/elephpant.yml @@ -0,0 +1 @@ +description: 'Elephpants are cute ...' diff --git a/console/language/console-en/translations/entity.delete.yml b/console/language/console-en/translations/entity.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..e465677e2debb055930d35ea385d034de121f2cc --- /dev/null +++ b/console/language/console-en/translations/entity.delete.yml @@ -0,0 +1,19 @@ +description: 'Delete an specific entity' +help: 'The <info>entity:delete</info> command helps you delete entities.' +arguments: + entity-definition-id: 'Entity definition id' + entity-id: 'Entity ID to be deleted' +options: + all: 'Delete all entities of the given type.' +questions: + entity-type: 'Enter the Entity type' + entity-definition-id: 'Enter the Entity definitin id' + entity-id: 'Enter the Entity ID to be deleted' +messages: + confirm-delete-all: 'Do you want to delete all entities of type "%s" ("%d")?' + deleted: 'Entity "%s" with id "%s" was deleted successfully' + deleted-all: 'All entities of type "%s" ("%d") were deleted.' +examples: + - description: 'Delete entity type content using node id' + execution: | + drupal entity:delete node 1 diff --git a/console/language/console-en/translations/exec.yml b/console/language/console-en/translations/exec.yml new file mode 100644 index 0000000000000000000000000000000000000000..9f4d52c33876b037fec851541f9042ea45b8a8e0 --- /dev/null +++ b/console/language/console-en/translations/exec.yml @@ -0,0 +1,13 @@ +description: 'Execute an external command.' +arguments: + bin: 'Executable command.' +options: + working-directory: 'The current working directory.' +messages: + success: 'Executed the command.' + invalid-bin: 'Error executing the command.' + missing-bin: 'Provide an executable command.' + binary-not-found: 'Unable to find the binary "%s" to execute.' + working-directory: 'Working directory' + executing-command: 'Executing command' + diff --git a/console/language/console-en/translations/features.import.yml b/console/language/console-en/translations/features.import.yml new file mode 100644 index 0000000000000000000000000000000000000000..1de3642308ea936a14f1443d1ade9edc443a68e3 --- /dev/null +++ b/console/language/console-en/translations/features.import.yml @@ -0,0 +1,15 @@ +description: 'Import module config.' +help: '' +options: + bundle: 'Bundle name' +arguments: + packages: 'Package name' +questions: + packages: 'Enter package name to import' +messages: + no-packages: 'No packages available.' + not-available: 'Package "%s", not available.' + importing: 'Importing package "%s".' + uninstall: 'Package "%s" already installed.' + reverting: 'Reverting package "%s".' + nothing: 'Nothing to import.' diff --git a/console/language/console-en/translations/field.info.yml b/console/language/console-en/translations/field.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..adcacbc17853fa77547e3d984c071ca4b3017a7f --- /dev/null +++ b/console/language/console-en/translations/field.info.yml @@ -0,0 +1,18 @@ +description: 'View information about fields.' +help: 'View information about fields.' +options: + detailed: 'Extended output with machine names and descriptions' + entity: 'Restrict to a specific fieldabe entity type, for example: node, comment, taxonomy_term, shortcut, block_content, contact_message' + bundle: 'Restrict to a specific bundle type, for example: article' +messages: + fields-none: 'No fields found' + entity-type: 'Fieldable entity type' + bundle-type: 'Bundle type' + not-found: 'not found' + in-entity-type: 'in entity type' + in-bundle-type: 'in bundle type' +table: + header-name: 'Field label' + header-type: 'Field type' + header-desc: 'Field description' + header-usage: 'Also used in' diff --git a/console/language/console-en/translations/generate.ajax.command.yml b/console/language/console-en/translations/generate.ajax.command.yml new file mode 100644 index 0000000000000000000000000000000000000000..39836810d0282a7d27da35401d384065baf1ea13 --- /dev/null +++ b/console/language/console-en/translations/generate.ajax.command.yml @@ -0,0 +1,13 @@ +description: 'Generate & Register a custom ajax command' +help: 'The <info>generate:ajax:command</info> command helps you generate a new custom ajax command.' +welcome: 'Welcome to the Drupal Ajax generator' +options: + module: 'The Module name.' + class: 'Ajax Class name' + method: 'Custom ajax method' + js-name: 'Custom javascript name' +questions: + module: 'Enter the module name' + class: 'Enter the Ajax class name' + method: 'Enter the render method name' + js-name: 'Enter a custom javascript name' \ No newline at end of file diff --git a/console/language/console-en/translations/generate.authentication.provider.yml b/console/language/console-en/translations/generate.authentication.provider.yml new file mode 100644 index 0000000000000000000000000000000000000000..a867018baa6438726f8ef439c3972276d7608708 --- /dev/null +++ b/console/language/console-en/translations/generate.authentication.provider.yml @@ -0,0 +1,18 @@ +description: 'Generate an Authentication Provider' +help: 'The <info>generate:authentication:provider</info> command helps you generate a new Authentication Provider.' +welcome: 'Welcome to the Drupal Authentication Provider generator' +options: + module: 'The Module name.' + class: 'Authentication Provider class' + provider-id: 'Provider ID' +questions: + module: 'Enter the module name' + class: 'Enter the Authentication Provider class' + provider-id: 'Enter the Provider ID' +examples: + - description: 'Generate an authentication provider specifying the module, the class and the provider id' + execution: | + drupal generate:authentication:provider \ + --module="modulename" \ + --class="DefaultAuthenticationProvider" \ + --provider-id="default_authentication_provider" diff --git a/console/language/console-en/translations/generate.breakpoint.yml b/console/language/console-en/translations/generate.breakpoint.yml new file mode 100644 index 0000000000000000000000000000000000000000..9b79cbdd15d012761ecd3f6fbf75f484c9aeacb5 --- /dev/null +++ b/console/language/console-en/translations/generate.breakpoint.yml @@ -0,0 +1,20 @@ +description: 'Generate breakpoint' +help: 'The <info>generate:breakpoint</info> command helps you generates a new breakpoint' +welcome: 'Welcome to the Drupal breakpoint generator' +options: + theme: 'Theme name' + breakpoints: Breakpoints +questions: + theme: 'Enter the theme name (i.e. classy, stable)' + breakpoint-name: 'Enter breakpoint name' + breakpoint-label: 'Enter breakpoint label' + breakpoint-media-query: 'Enter breakpoint media query' + breakpoint-weight: 'Enter breakpoint weight' + breakpoint-multipliers: 'Enter breakpoint multipliers' + breakpoint-add: 'Do you want to add another breakpoint?' +examples: + - description: 'Generate a breakpoint specifying the theme, a breakpoint name, its label, the media query, its weight and multipliers' + execution: | + drupal generate:breakpoint \ + --theme="classy" \ + --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"' \ No newline at end of file diff --git a/console/language/console-en/translations/generate.cache.context.yml b/console/language/console-en/translations/generate.cache.context.yml new file mode 100644 index 0000000000000000000000000000000000000000..6058d4af6d13e5dabff2b88b83e09a5f40586621 --- /dev/null +++ b/console/language/console-en/translations/generate.cache.context.yml @@ -0,0 +1,18 @@ +description: 'Generate a cache context' +help: 'The <info>generate:cache:context</info> command helps you generates a new cache context' +welcome: 'Welcome to the Drupal Cache Context generator' +options: + module: 'The Module name.' + name: 'The cache context name' + class: 'Cache context class name' +questions: + module: 'Enter the module name' + name: 'Enter the cache context name' + class: 'Cache context class name' +examples: + - description: 'Generate cache for a context specifying the module, the context name and its class' + execution: | + drupal generate:cache:context \ + --module="modulename" \ + --cache-context="ContextName" \ + --class="DefaultCacheContext" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.command.yml b/console/language/console-en/translations/generate.command.yml new file mode 100644 index 0000000000000000000000000000000000000000..745203475b2924102a2bf908ed1e3f3f2f5d5caf --- /dev/null +++ b/console/language/console-en/translations/generate.command.yml @@ -0,0 +1,31 @@ +description: 'Generate commands for the console.' +help: 'The <info>generate:command</info> command helps you generate a new command.' +welcome: 'Welcome to the Drupal Command generator' +options: + extension: 'The name of the Extension (that will contain the command).' + class: 'The Class that describes the command. (Must end with the word ''Command'').' + name: 'The Command name.' + interact: 'Add interact method.' + initialize: 'Add initialize method.' + container-aware: 'Is the command aware of the drupal site installation when executed?' + services: 'Load services from the container.' + generator: 'Add a Generator class for this command.' +questions: + extension: 'Enter the extension name' + class: 'Enter the Command Class. (Must end with the word ''Command'').' + name: 'Enter the Command name.' + interact: 'Do you want to add the interact method?' + initialize: 'Do you want to add the initialize method?' + container-aware: 'Is the command aware of the drupal site installation when executed?' + services: 'Enter your service' + generator: 'Do you want to add a Generator class?.' +messages: + title-not-empty: 'Title cannot be empty' +examples: + - description: 'Generate a command specifying the extension name and type, its class and the name.' + execution: | + drupal generate:command \ + --extension="ExtensionName" \ + --extension-type="module" \ + --class="DefaultCommand" \ + --name="CommandName" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.controller.yml b/console/language/console-en/translations/generate.controller.yml new file mode 100644 index 0000000000000000000000000000000000000000..5b05332f92ca8187850783fac12a1f56042c008e --- /dev/null +++ b/console/language/console-en/translations/generate.controller.yml @@ -0,0 +1,30 @@ +description: 'Generate & Register a controller' +help: 'The <info>generate:controller</info> command helps you generate a new controller.' +welcome: 'Welcome to the Drupal Controller generator' +options: + module: 'The Module name.' + class: 'Controller Class name' + routes: 'The routes, must be an array containing [title, method, path]' + services: 'Load services from the container.' + test: 'Generate a test class' +questions: + module: 'Enter the module name' + class: 'Enter the Controller class name' + title: 'Enter the Controller method title (to stop adding more methods, leave this empty)' + method: 'Enter the action method name' + path: 'Enter the route path' + services: 'Enter your service' + test: 'Do you want to generate a unit test class?' +messages: + title-empty: 'Title must contain a value (you must enter at least one method)' + title-already-added: 'Title was already added' + method-name-already-added: 'Method name was already added' + path-already-added: 'Path was already added' +examples: + - description: 'Generate controller specifying the module name, the class name and its routes' + execution: | + drupal generate:controller \ + --module="modulename" \ + --class="DefaultController" \ + --routes='"title":"ControllerMethod", "name":"modulename.default_controller_hello", "method":"hello", "path":"/modulename/hello/{name}"' \ + --test \ No newline at end of file diff --git a/console/language/console-en/translations/generate.entity.bundle.yml b/console/language/console-en/translations/generate.entity.bundle.yml new file mode 100644 index 0000000000000000000000000000000000000000..f3106b3fc31f988a746a4046295d120f43d16b0a --- /dev/null +++ b/console/language/console-en/translations/generate.entity.bundle.yml @@ -0,0 +1,20 @@ +description: 'Generate a new content type (node / entity bundle)' +help: 'The <info>generate:contenttype</info> command helps you generate a new content type.' +welcome: 'Welcome to the Drupal Content Type generator' +options: + module: 'The Module name.' + bundle-name: 'The content type''s machine name' + bundle-title: 'The content type''s human-readable name' +questions: + module: 'Enter the module name' + bundle-name: 'Enter the machine name of your new content type' + bundle-title: 'Enter the human-readable name of your new content type' +message: + error-state1: placeholder +examples: + - description: 'Generate bundle entity specifying the module, the bundle name and its title' + execution: | + drupal generate:entity:bundle \ + --module="modulename" \ + --bundle-name="default" \ + --bundle-title="default" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.entity.config.yml b/console/language/console-en/translations/generate.entity.config.yml new file mode 100644 index 0000000000000000000000000000000000000000..67b06b4cf9c81483ae7387a57889c8bff05aa17b --- /dev/null +++ b/console/language/console-en/translations/generate.entity.config.yml @@ -0,0 +1,26 @@ +description: 'Generate a new config entity' +help: 'The <info>generate:config:entity</info> command helps you generate a new config entity.' +welcome: 'Welcome to the Drupal Config Entity generator' +options: + module: 'The Module name.' + entity-class: 'The config entity class' + entity-name: 'The config entity name' + label: 'The label' + bundle-of: 'Acts as bundle for content entities' + base-path: 'The base-path for the config entity routes' +questions: + module: 'Enter the module name' + entity-class: 'Enter the class of your new config entity' + entity-name: 'Enter the name of your new config entity' + label: 'Enter the label of your new config entity' + bundle-of: 'Name of the content entity you want this (config) entity to act as a bundle for' + base-path: 'Enter the base-path for the config entity routes' +examples: + - description: 'Generate config entity specifying the module, the entity class, the entity name, its path and label' + execution: | + drupal generate:entity:config \ + --module="modulename" \ + --entity-class="DefaultEntity" \ + --entity-name="default_entity" \ + --base-path="/admin/structure" \ + --label="Default entity" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.entity.content.yml b/console/language/console-en/translations/generate.entity.content.yml new file mode 100644 index 0000000000000000000000000000000000000000..8be970c5256af4bf7e5704315ad3b6d4c0f434cb --- /dev/null +++ b/console/language/console-en/translations/generate.entity.content.yml @@ -0,0 +1,39 @@ +description: 'Generate a new content entity' +help: 'The <info>generate:content:entity</info> command helps you generate a new content entity.' +welcome: 'Welcome to the Drupal Content Entity generator' +options: + module: 'The Module name.' + entity-class: 'The content entity class' + entity-name: 'The content entity name' + label: 'The label' + has-bundles: 'Entity has bundles' + base-path: 'The base-path for the content entity routes' + is-translatable: 'Content entity translatable' +questions: + module: 'Enter the module name' + entity-class: 'Enter the class of your new content entity' + entity-name: 'Enter the machine name of your new content entity' + label: 'Enter the label of your new content entity' + has-bundles: 'Do you want this (content) entity to have bundles?' + base-path: 'Enter the base-path for the content entity routes' + is-translatable: 'Is your entity translatable?' + revisionable: 'Is your entity revisionable?' +examples: + - description: 'Generate a content entity specifying the module, the entity class, the entity name, its path and label' + execution: | + drupal generate:entity:content \ + --module="modulename" \ + --entity-class="DefaultEntity" \ + --entity-name="default_entity" \ + --base-path="/admin/structure" \ + --label="Default entity" + - description: 'Generate a translatable and revisionable content entity specifying the module, the entity class, the entity name, its path and label' + execution: | + drupal generate:entity:content \ + --module="modulename" \ + --entity-class="DefaultEntity" \ + --entity-name="default_entity" \ + --base-path="/admin/structure" \ + --label="Default entity" \ + --is-translatable \ + --revisionable \ No newline at end of file diff --git a/console/language/console-en/translations/generate.event.subscriber.yml b/console/language/console-en/translations/generate.event.subscriber.yml new file mode 100644 index 0000000000000000000000000000000000000000..25561494054401086f6efcad80511d5768f83234 --- /dev/null +++ b/console/language/console-en/translations/generate.event.subscriber.yml @@ -0,0 +1,25 @@ +description: 'Generate an event subscriber' +help: 'The <info>generate:event:subscriber</info> command helps you generate a new event subscriber.' +welcome: 'Welcome to the Drupal Event Subscriber generator' +options: + module: 'The Module name.' + name: 'Service name' + class: 'Class name' + services: 'Load services from the container.' + event-name: 'Enter event name' + callback-name: 'Callback function name to handle event' +questions: + module: 'Enter the module name' + name: 'Enter the service name' + class: 'Enter the class name' + services: 'Enter your service' + event-name: 'Enter event name' + callback-name: 'Enter the callback function name to handle event' +examples: + - description: 'Generate an event subscriber specifying the module name, its name, the class and the events to subscribe' + execution: | + drupal generate:event:subscriber \ + --module="modulename" \ + --name="modulename.default" \ + --class="DefaultSubscriber" \ + --events='kernel_request' diff --git a/console/language/console-en/translations/generate.form.alter.yml b/console/language/console-en/translations/generate.form.alter.yml new file mode 100644 index 0000000000000000000000000000000000000000..afd16b83d67137d3739a1395b0c5f04e4efbb1d2 --- /dev/null +++ b/console/language/console-en/translations/generate.form.alter.yml @@ -0,0 +1,31 @@ +description: 'Generate an implementation of hook_form_alter() or hook_form_FORM_ID_alter' +help: 'The <info>"%s"</info> command helps you generate a new "%s"' +welcome: 'Welcome to the Drupal Form Alter generator' +options: + module: 'The Module name.' + form-id: 'Form ID to alter' + inputs: 'Create inputs in a form.' +questions: + module: 'Enter the module name' + form-id: 'Enter the Form ID to alter' + type: 'Enter New field type' + label: 'Input label' + description: 'Description' + default-value: 'Default value' + weight: 'Weight for input item' +messages: + inputs: "You can add form fields to modify form.\nThis is optional, press <info>enter</info> to <info>continue</info>" + loading-forms: 'Loading forms definition from Webprofiler module' + hide-form-elements: 'Optionally you can select form items for hide' + help-already-implemented: 'The hook form alter was already implemented in module "%s"' +examples: + - description: 'Generate a hook form alter for an empty form specifying the module name' + execution: | + drupal generate:form:alter \ + --module="modulename" + - description: 'Generate a hook form alter with 2 fields specifying the module name and the inputs' + execution: | + drupal generate:form:alter \ + --module="modulename" \ + --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ + --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ No newline at end of file diff --git a/console/language/console-en/translations/generate.form.config.yml b/console/language/console-en/translations/generate.form.config.yml new file mode 100644 index 0000000000000000000000000000000000000000..7590be71868bed690e10ba401863231d0b9cfefb --- /dev/null +++ b/console/language/console-en/translations/generate.form.config.yml @@ -0,0 +1,57 @@ +description: 'Generate a new form config' +help: 'The <info>generate:form:config</info> command helps you generate a new form config' +welcome: 'Welcome to the Drupal Form Config generator' +options: + module: 'The Module name.' + class: 'The form class name' + form-id: 'The Form id' + services: 'Load services from the container.' + config-file: 'Add a config file' + inputs: 'Create inputs in a form.' + path: 'Enter the form path' + menu-link-gen: 'Generate a menu link' + menu-link-title: 'A title for the menu link' + menu-parent: 'Menu parent' + menu-link-desc: 'A description for the menu link' +questions: + module: 'Enter the module name' + class: 'Enter the Form Class name' + form-id: 'Enter the Form id' + services: 'Enter your service' + config-file: 'Do you want to generate a config file?' + routing: 'Would you like to register a route for this form?' + path: 'Enter the route path' + max-amount-characters: 'Maximum amount of characters' + textfield-width-in-chars: 'Width of the textfield (in characters)' + multiselect-size-in-lines: 'Size of multiselect box (in lines)' + input-options: 'Input options separated by comma' + menu-link-gen: 'Generate a menu link' + menu-link-title: 'Enter a title for the menu link' + menu-parent: 'Enter Menu parent' + menu-link-desc: 'Enter a description for the menu link' + type: 'Enter New field type' + label: 'Input label' + description: 'Description' + default-value: 'Default value' + weight: 'Weight for input item' +suggestions: + description-for-menu: 'A description for the menu entry' +examples: + - description: 'Generate an empty form with config file specifying the module name, the class, a form id and the path' + execution: | + drupal generate:form:config \ + --module="modulename" \ + --class="DefaultForm" \ + --form-id="default_form" \ + --config-file \ + --path="/modulename/form/default" + - description: 'Generate a form with 2 fields and a config file specifying the module name, the class, a form id, the inputs and the path' + execution: | + drupal generate:form:config \ + --module="modulename" \ + --class="DefaultForm" \ + --form-id="default_form" \ + --config-file \ + --inputs='"name":"inputname", "type":"text_format", "label":"InputName", "options":"", "description":"Just a text input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ + --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ + --path="/modulename/form/default" diff --git a/console/language/console-en/translations/generate.form.yml b/console/language/console-en/translations/generate.form.yml new file mode 100644 index 0000000000000000000000000000000000000000..75ec09e6387681f5598446c8c26654c0e89409c1 --- /dev/null +++ b/console/language/console-en/translations/generate.form.yml @@ -0,0 +1,57 @@ +description: 'Generate a new "%s"' +help: 'The <info>"%s"</info> command helps you generate a new "%s"' +welcome: 'Welcome to the Drupal Form generator' +options: + module: 'The Module name.' + class: 'The form class name' + form-id: 'The Form id' + services: 'Load services from the container.' + config-file: 'Add a config file' + inputs: 'Create inputs in a form.' + path: 'Enter the form path' + menu-link-gen: 'Generate a menu link' + menu-link-title: 'A title for the menu link' + menu-parent: 'Menu parent' + menu-link-desc: 'A description for the menu link' +questions: + module: 'Enter the module name' + class: 'Enter the Form Class name' + form-id: 'Enter the Form id' + services: 'Enter your service' + config-file: 'Do you want to generate a config file?' + routing: 'Would you like to register a route for this form?' + path: 'Enter the route path' + max-amount-characters: 'Maximum amount of characters' + textfield-width-in-chars: 'Width of the textfield (in characters)' + multiselect-size-in-lines: 'Size of multiselect box (in lines)' + input-options: 'Input options separated by comma' + menu-link-gen: 'Generate a menu link' + menu-link-title: 'Enter a title for the menu link' + menu-parent: 'Enter Menu parent' + menu-link-desc: 'Enter a description for the menu link' + type: 'Enter New field type' + label: 'Input label' + description: 'Description' + default-value: 'Default value' + weight: 'Weight for input item' +suggestions: + description-for-menu: 'A description for the menu entry' +examples: + - description: 'Generate an empty form with config file specifying the module name, the class, a form id and the path' + execution: | + drupal generate:form \ + --module="modulename" \ + --class="DefaultForm" \ + --form-id="default_form" \ + --config-file \ + --path="/modulename/form/default" + - description: 'Generate a form with 2 fields and a config file specifying the module name, the class, a form id, the inputs and the path' + execution: | + drupal generate:form \ + --module="modulename" \ + --class="DefaultForm" \ + --form-id="default_form" \ + --config-file \ + --inputs='"name":"inputname", "type":"text_format", "label":"InputName", "options":"", "description":"Just a text input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ + --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ + --path="/modulename/form/default" diff --git a/console/language/console-en/translations/generate.help.yml b/console/language/console-en/translations/generate.help.yml new file mode 100644 index 0000000000000000000000000000000000000000..7f04a2d6e26087d620acfcb50e45ee1a8a862dd3 --- /dev/null +++ b/console/language/console-en/translations/generate.help.yml @@ -0,0 +1,17 @@ +description: 'Generate an implementation of hook_help()' +help: 'The <info>"%s"</info> command helps you generate a hook help "%s"' +welcome: 'Welcome to the Drupal Help generator' +options: + module: 'The Module name.' + description: 'Module description' +questions: + module: 'Enter the module name' + description: 'Enter module description' +messages: + help-already-implemented: 'The hook help was already implemented in module "%s"' +examples: + - description: 'Generate a hook help specifying the module name and the description' + execution: | + drupal generate:help \ + --module="modulename" \ + --description="My Awesome Module" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.jstest.yml b/console/language/console-en/translations/generate.jstest.yml new file mode 100644 index 0000000000000000000000000000000000000000..3d6f828a8ddc4a3ad610df2d01a4642da1f9c175 --- /dev/null +++ b/console/language/console-en/translations/generate.jstest.yml @@ -0,0 +1,22 @@ +description: 'Generate a JavaScript test.' +help: 'The <info>generate:jstest</info> command helps you to generate a new JavaScript test.' +welcome: 'Welcome to the Drupal module generator' +options: + class: 'JavaScript test Class name' +questions: + module: common.questions.module + class: 'Enter the JavaScript test class name' +examples: + - description: 'Generate a module specifying the module name, machine name, the path, its description, drupal core and the package name. In this example the composer file, the unit test and twig template are generated too' + execution: | + drupal generate:module \ + --module="modulename" \ + --machine-name="modulename" \ + --module-path="/modules/custom" \ + --description="My Awesome Module" \ + --core="8.x" \ + --package="Custom" \ + --module-file \ + --composer \ + --test \ + --twigtemplate diff --git a/console/language/console-en/translations/generate.module.file.yml b/console/language/console-en/translations/generate.module.file.yml new file mode 100644 index 0000000000000000000000000000000000000000..abaedd57b103a9e7975702acc5856c0bdc6e71d3 --- /dev/null +++ b/console/language/console-en/translations/generate.module.file.yml @@ -0,0 +1,12 @@ +description: 'Generate a .module file' +help: 'The <info>generate:module:file</info> command helps you to generate a new .module file' +welcome: 'Welcome to the Drupal Module File generator' +options: + module: 'The Module name' +questions: + module: 'Enter the new module name' +examples: + - description: 'Generate the .module file specifying the module name' + execution: | + drupal generate:module:file \ + --module="modulename" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.module.yml b/console/language/console-en/translations/generate.module.yml new file mode 100644 index 0000000000000000000000000000000000000000..12925f2fe64c58f51f4d2e4e1ad3540e82fee8f8 --- /dev/null +++ b/console/language/console-en/translations/generate.module.yml @@ -0,0 +1,51 @@ +description: 'Generate a module.' +help: 'The <info>generate:module</info> command helps you generates a new module.' +welcome: 'Welcome to the Drupal module generator' +options: + module: 'The Module name' + machine-name: 'The machine name (lowercase and underscore only)' + module-path: 'The path of the module' + description: 'Module description' + core: 'Core version' + features-bundle: 'Define module as feature using the given Features bundle name' + package: 'Module package' + module-file: 'Add a .module file' + composer: 'Add a composer.json file' + dependencies: 'Module dependencies separated by commas (i.e. context, panels)' + test: 'Generate a test class' + twigtemplate: 'Generate theme template' +questions: + module: 'Enter the new module name' + machine-name: 'Enter the module machine name' + module-path: 'Enter the module Path' + description: 'Enter module description' + core: 'Enter Drupal Core version' + package: 'Enter package name' + features-support: 'Define module as feature' + features-bundle: 'Enter Features bundle name' + module-file: 'Do you want to generate a .module file?' + composer: 'Do you want to add a composer.json file to your module?' + dependencies: 'Would you like to add module dependencies?' + test: 'Do you want to generate a unit test class?' + twigtemplate: 'Do you want to generate a themeable template?' +suggestions: + my-awesome-module: 'My Awesome Module' +warnings: + module-unavailable: 'Warning The following modules are not available "%s"' +errors: + invalid-core: 'The core version "%s" is invalid.' + directory-exists: 'The target directory "%s" is not empty.' +examples: + - description: 'Generate a module specifying the module name, machine name, the path, its description, drupal core and the package name. In this example the composer file, the unit test and twig template are generated too' + execution: | + drupal generate:module \ + --module="modulename" \ + --machine-name="modulename" \ + --module-path="/modules/custom" \ + --description="My Awesome Module" \ + --core="8.x" \ + --package="Custom" \ + --module-file \ + --composer \ + --test \ + --twigtemplate diff --git a/console/language/console-en/translations/generate.permissions.yml b/console/language/console-en/translations/generate.permissions.yml new file mode 100644 index 0000000000000000000000000000000000000000..83a30fbb6a1e471ae7d25ffaacf93b4f053f6a89 --- /dev/null +++ b/console/language/console-en/translations/generate.permissions.yml @@ -0,0 +1,15 @@ +description: 'Generate module permissions' +help: 'The <info>generate:permissions</info> command helps you generate new permissions' +welcome: 'Welcome to the Drupal Permission generator' +options: + module: 'The Module name.' +questions: + module: 'Enter the module name' + permission: 'Enter a permission' + title: 'Enter a title for the permission' + description: 'Enter a description for the permission' + restrict-access: 'Restrict Access' + add: 'Do you want to add another permission?' +suggestions: + access-content: 'Access content' + allow-access-content: 'Allow access to my content' diff --git a/console/language/console-en/translations/generate.plugin.block.yml b/console/language/console-en/translations/generate.plugin.block.yml new file mode 100644 index 0000000000000000000000000000000000000000..6510194d09ab14b859ee14734139238710d7b2a2 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.block.yml @@ -0,0 +1,36 @@ +description: 'Generate a plugin block' +help: 'The <info>generate:plugin:block</info> command helps you generate a new Plugin block.' +welcome: 'Welcome to the Drupal Plugin Block generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' + inputs: 'Create inputs in a form.' + services: 'Load services from the container.' + theme-region: 'Theme region to render Plugin Block' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + services: 'Enter your service' + theme-region: 'Enter the theme region to render the Plugin Block.' + type: 'Enter New field type' + label: 'Input label' + description: 'Description' + default-value: 'Default value' + weight: 'Weight for input item' +messages: + inputs: "\nYou can add input fields to create special configurations in the block.\nThis is optional, press <info>enter</info> to <info>continue</info>" + invalid-theme-region: 'Region "%s" is invalid' +examples: + - description: 'Generate a plugin block in the header region with an input field specifying the module name, the class, the label, its id, the region and the input' + execution: | + drupal generate:plugin:block \ + --module="modulename" \ + --class="DefaultBlock" \ + --label="Default block" \ + --plugin-id="default_block" \ + --theme-region="header" \ + --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""' \ No newline at end of file diff --git a/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml b/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml new file mode 100644 index 0000000000000000000000000000000000000000..36d5c7f61e385ee526d4801c944c0f82c242df0c --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml @@ -0,0 +1,27 @@ +description: 'Generate CKEditor button plugin.' +help: 'The <info>generate:plugin:ckeditorbutton</info> command helps you generate a new CKEditor button plugin.' +welcome: 'Welcome to the Drupal CKEditor Button Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.' + button-name: 'Button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.' + button-icon-path: 'Button icon path. This is the path to the icon/image of the button.' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.' + button-name: 'Enter the button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.' + button-icon-path: 'Enter the button icon path' +examples: + - description: 'Generate plugin CKEditor button specifying the module name, the class, the label, its id, the button name and the icon path' + execution: | + drupal generate:plugin:ckeditorbutton \ + --module="modulename" \ + --class="DefaultCKEditorButton" \ + --label="Default ckeditor button" \ + --plugin-id="default ckeditor button" \ + --button-name="Default ckeditor button" \ + --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png" \ No newline at end of file diff --git a/console/language/console-en/translations/generate.plugin.condition.yml b/console/language/console-en/translations/generate.plugin.condition.yml new file mode 100644 index 0000000000000000000000000000000000000000..0f8d78bb733b1184041a5de22f7599f14e1c2e8e --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.condition.yml @@ -0,0 +1,52 @@ +description: 'Generate a plugin condition.' +help: 'The <info>generate:plugin:conditon</info> command helps you generate a plugin condition.' +welcome: 'Welcome to the Drupal Plugin Condition generator' +options: + module: 'The Module name.' + class: 'Plugin condition class name' + label: 'Plugin condition label' + plugin-id: 'Plugin condition id' + context-definition-id: 'Context definition ID' + context-definition-label: 'Context definition label' + context-definition-required: 'Context definition is required (TRUE/FALSE)' +questions: + module: 'Enter the module name' + class: 'Enter the plugin condition class name' + label: 'Enter the plugin condition label' + plugin-id: 'Enter the plugin condition id' + context-type: 'Context type' + context-entity-type: 'Context entity type' + context-definition-id: 'Context definition ID' + context-definition-label: 'Context definition label' + context-definition-required: 'Context definition is required' +examples: + - description: 'Generate a plugin condition for a node entity type specifying the module name, the class, the label, its id and the context definition' + execution: | + drupal generate:plugin:condition \ + --module="modulename" \ + --class="ExampleCondition" \ + --label="Example condition" \ + --plugin-id="example_condition" \ + --context-definition-id="entity:node" \ + --context-definition-label="node" \ + --context-definition-required + - description: 'Generate a plugin condition for language specifying the module name, the class, the label, its id and the context definition' + execution: | + drupal generate:plugin:condition \ + --module="modulename" \ + --class="ExampleCondition" \ + --label="Example condition" \ + --plugin-id="example_condition" \ + --context-definition-id="language" \ + --context-definition-label="Language" \ + --context-definition-required + - description: 'Generate a plugin condition for role configuration specifying the module name, the class, the label, its id and the context definition' + execution: | + drupal generate:plugin:condition \ + --module="modulename" \ + --class="ExampleCondition" \ + --label="Example condition" \ + --plugin-id="example_condition" \ + --context-definition-id="entity:user_role" \ + --context-definition-label="user_role" \ + --context-definition-required diff --git a/console/language/console-en/translations/generate.plugin.field.yml b/console/language/console-en/translations/generate.plugin.field.yml new file mode 100644 index 0000000000000000000000000000000000000000..343506876836ce7193905e4d9915825a5e36f0c3 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.field.yml @@ -0,0 +1,53 @@ +description: 'Generate field type, widget and formatter plugins.' +help: 'The <info>generate:plugin:field</info> command helps you generate a full set of field plugin: field type, field formatter and field widget.' +welcome: 'Welcome to the Drupal Field Plugin generator' +options: + module: 'The Module name.' + type-class: 'Field type plugin class name' + type-label: 'Field type plugin label' + type-plugin-id: 'Field type plugin id' + type-description: 'Field type plugin description' + formatter-class: 'Field formatter plugin class name' + formatter-label: 'Field formatter plugin label' + formatter-plugin-id: 'Field formatter plugin id' + widget-class: 'Field widget plugin class name' + widget-label: 'Field widget plugin label' + widget-plugin-id: 'Field widget plugin id' + field-type: 'Field type the formatter and widget plugin can be used with' + default-widget: 'Default field widget of the field type plugin' + default-formatter: 'Default field formatter of field type plugin' +questions: + module: 'Enter the module name' + type-class: 'Enter field type plugin class name' + type-label: 'Enter the field type plugin label' + type-plugin-id: 'Enter the field type plugin id' + type-description: 'Enter the field type plugin description' + formatter-class: 'Enter the field formatter plugin class name' + formatter-label: 'Enter the field formatter plugin label' + formatter-plugin-id: 'Enter the field formatter plugin id' + widget-class: 'Enter the field widget plugin class name' + widget-label: 'Enter the field widget plugin label' + widget-plugin-id: 'Enter the field widget plugin id' + field-type: 'Enter the field type the formatter and widget plugin can be used with' + default-widget: 'Enter the default field widget of the field type plugin' + default-formatter: 'Enter the default field formatter of field type plugin' +suggestions: + my-field-type: 'My Field Type' +examples: + - description: 'Generate field type, widget and formatter plugins specifying the module name, the type (class, label, plugin id and description), the formatter (class, label, plugin id) and the widget (class, label and plugin id)' + execution: | + drupal generate:plugin:field \ + --module="modulename" \ + --type-class="ExampleFieldType" \ + --type-label="Example field type" \ + --type-plugin-id="example_field_type" \ + --type-description="My Field Type" \ + --formatter-class="ExampleFormatterType" \ + --formatter-label="Example formatter type" \ + --formatter-plugin-id="example_formatter_type" \ + --widget-class="ExampleWidgetType" \ + --widget-label="Example widget type" \ + --widget-plugin-id="example_widget_type" \ + --field-type="example_field_type" \ + --default-widget="example_widget_type" \ + --default-formatter="example_formatter_type" diff --git a/console/language/console-en/translations/generate.plugin.fieldformatter.yml b/console/language/console-en/translations/generate.plugin.fieldformatter.yml new file mode 100644 index 0000000000000000000000000000000000000000..b8189e8e79067958ff8c5f20b5135abe60bd9723 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.fieldformatter.yml @@ -0,0 +1,24 @@ +description: 'Generate field formatter plugin.' +help: 'The <info>generate:plugin:fieldformatter</info> command helps you generate a new field formatter plugin.' +welcome: 'Welcome to the Drupal Field Formatter Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' + field-type: 'Field type the plugin can be used with' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + field-type: 'Enter the field type the plugin can be used with' +examples: + - description: 'Generate a text field formatter plugin specifying the module name, the class, the label its plugin id and the field type' + execution: | + drupal generate:plugin:fieldformatter \ + --module="modulename" \ + --class="ExampleFieldFormatter" \ + --label="Example field formatter" \ + --plugin-id="example_field_formatter" \ + --field-type="text" diff --git a/console/language/console-en/translations/generate.plugin.fieldtype.yml b/console/language/console-en/translations/generate.plugin.fieldtype.yml new file mode 100644 index 0000000000000000000000000000000000000000..e2c5b3ead8338869d51fa5ebd18e46c19631c20a --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.fieldtype.yml @@ -0,0 +1,40 @@ +description: 'Generate field type plugin.' +help: 'The <info>generate:plugin:fieldtype</info> command helps you generate a new field type plugin.' +welcome: 'Welcome to the Drupal Field Type Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' + description: 'Plugin Description' + default-widget: 'Default field widget of this plugin' + default-formatter: 'Default field formatter of this plugin' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + description: 'Enter the plugin Description' + default-widget: 'Enter the default field widget of this plugin' + default-formatter: 'Enter the default field formatter of this plugin' +suggestions: + my-field-type: 'My Field Type' +examples: + - description: 'Generate a field type plugin specifying the module name, the class, its label, the plugin id and a description' + execution: | + drupal generate:plugin:fieldtype \ + --module="modulename" \ + --class="ExampleFieldType" \ + --label="Example field type" \ + --plugin-id="example_field_type" \ + --description="My Field Type" + - description: 'Generate a field type plugin with a default widget and formatter specifying the module name, the class, its label, the plugin id and a description' + execution: | + drupal generate:plugin:fieldtype \ + --module="modulename" \ + --class="ExampleFieldType" \ + --label="Example field type" \ + --plugin-id="example_field_type" \ + --description="My Field Type" \ + --default-widget="DefaultWidget" \ + --default-formatter="DefaultFormatter" diff --git a/console/language/console-en/translations/generate.plugin.fieldwidget.yml b/console/language/console-en/translations/generate.plugin.fieldwidget.yml new file mode 100644 index 0000000000000000000000000000000000000000..3b284693500ff537d88473b36f4767e80aca340d --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.fieldwidget.yml @@ -0,0 +1,24 @@ +description: 'Generate field widget plugin.' +help: 'The <info>generate:plugin:fieldwidget</info> command helps you generate a new field widget plugin.' +welcome: 'Welcome to the Drupal Field Widget Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' + field-type: 'Field type the plugin can be used with' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + field-type: 'Enter the field type the plugin can be used with' +examples: + - description: 'Generate a text type field widget plugin specifying the module name, the class, its label, the plugin id and the field type' + execution: | + drupal generate:plugin:fieldwidget \ + --module="modulename" \ + --class="ExampleFieldWidget" \ + --label="Example field widget" \ + --plugin-id="example_field_widget" \ + --field-type="text" diff --git a/console/language/console-en/translations/generate.plugin.imageeffect.yml b/console/language/console-en/translations/generate.plugin.imageeffect.yml new file mode 100644 index 0000000000000000000000000000000000000000..f03b61eefe326671e5b22b252d2d543070e6c270 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.imageeffect.yml @@ -0,0 +1,26 @@ +description: 'Generate image effect plugin.' +help: 'The <info>generate:plugin:imageeffect</info> command helps you generate a new image effect plugin.' +welcome: 'Welcome to the Drupal Image Effect Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' + description: 'Plugin Description' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + description: 'Enter the plugin Description' +suggestions: + my-image-effect: 'My Image Effect' +examples: + - description: 'Generate a image effect plugin specifying the module name, the class, its label, the plugin id and a description' + execution: | + drupal generate:plugin:imageeffect \ + --module="modulename" \ + --class="DefaultImageEffect" \ + --label="Default image effect" \ + --plugin-id="default_image_effect" \ + --description="My Image Effect" diff --git a/console/language/console-en/translations/generate.plugin.imageformatter.yml b/console/language/console-en/translations/generate.plugin.imageformatter.yml new file mode 100644 index 0000000000000000000000000000000000000000..9505b8f191267a63401a5a2c97fc376b714402d7 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.imageformatter.yml @@ -0,0 +1,21 @@ +description: 'Generate image formatter plugin.' +help: 'The <info>generate:plugin:imageformatter</info> command helps you generate a new image formatter plugin.' +welcome: 'Welcome to the Drupal Image Formatter Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' +examples: + - description: 'Generate a image formatter plugin specifying the module name, the class, its label and the plugin id' + execution: | + drupal generate:plugin:imageformatter \ + --module="modulename" \ + --class="ExampleImageFormatter" \ + --label="Example image formatter" \ + --plugin-id="example_image_formatter" diff --git a/console/language/console-en/translations/generate.plugin.mail.yml b/console/language/console-en/translations/generate.plugin.mail.yml new file mode 100644 index 0000000000000000000000000000000000000000..b44e937b2f322d26236b659da49a92d7d61c2ad4 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.mail.yml @@ -0,0 +1,25 @@ +description: 'Generate a plugin mail' +help: 'The <info>generate:plugin:mail</info> command helps you generate a new Plugin mail.' +welcome: 'Welcome to the Drupal Plugin Mail generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + label: 'Plugin label' + plugin-id: 'Plugin id' + inputs: 'Create inputs in a form.' + services: 'Load services from the container.' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + inputs: common.questions.inputs + services: 'Enter your service' +examples: + - description: 'Generate an email plugin specifying the module name, the class, its label and the plugin id' + execution: | + drupal generate:plugin:mail \ + --module="modulename" \ + --class="HtmlFormatterMail" \ + --label="Html formatter mail" \ + --plugin-id="html_formatter_mail" diff --git a/console/language/console-en/translations/generate.plugin.migrate.process.yml b/console/language/console-en/translations/generate.plugin.migrate.process.yml new file mode 100644 index 0000000000000000000000000000000000000000..1990ba01eddb99f5c92afe706ff66d6332ec4e3e --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.migrate.process.yml @@ -0,0 +1,18 @@ +description: 'Generate a migrate process plugin' +help: 'Creates new process plugin for the migration.' +welcome: 'Welcome to the Drupal Migrate Process Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + plugin-id: 'Plugin id' +questions: + module: 'Enter the module name' + class: 'Enter the migration process plugin class name' + plugin-id: 'Enter the migration process plugin id' +examples: + - description: 'Generate a migration plugin process specifying the module name, the class and its id' + execution: | + drupal generate:plugin:migrate:process \ + --module="modulename" \ + --class="MigrationProcess" \ + --plugin-id="migrationprocess" diff --git a/console/language/console-en/translations/generate.plugin.migrate.source.yml b/console/language/console-en/translations/generate.plugin.migrate.source.yml new file mode 100644 index 0000000000000000000000000000000000000000..081b5204fcf11929b3ac70913d68612adbaac006 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.migrate.source.yml @@ -0,0 +1,41 @@ +description: 'Generate a migrate source plugin' +help: 'The <info>generate:migrate:plugin:source</info> command helps you generate a new migrate source plugin.' +welcome: 'Welcome to the Drupal Migrate Source Plugin generator' +options: + module: 'The Module name.' + class: 'Plugin class name' + plugin-id: 'Plugin id' + table: 'Table to query' + alias: 'Short alias to refer to the table as' + group-by: 'Field to group results by' + fields: 'Fields to export' +questions: + module: 'Enter the module name' + class: 'Enter the plugin class name' + plugin-id: 'Enter the plugin id' + table: 'Enter the table name' + alias: 'Enter the alias for the table' + group-by: 'Enter a field to group by if desired' + id: 'Enter the field id or press <info>enter</enter> if done' + description: 'Enter the field description' +examples: + - description: 'Generate a migration source plugin specifying the module name, the class, its plugin id, the table and its alias' + execution: | + drupal generate:plugin:migrate:source \ + --module="modulename" \ + --class="PluginClassName" \ + --plugin-id="plugin_class_name" \ + --table="DefaultTableName" \ + --alias="D" + - description: 'Generate a migration source plugin for specific fields of the users table specifying the module name, the class, its plugin id, the table, its alias and the fields' + execution: | + drupal generate:plugin:migrate:source \ + --module="modulename" \ + --class="DefaultPluginClass" \ + --plugin-id="default_plugin_class" \ + --table="users" \ + --alias="u" \ + --fields='"id":"id", "description":"the user id"' \ + --fields='"id":"username", "description":"the username"' \ + --fields='"id":"password", "description":"the user password"' \ + --fields='"id":"email", "description":"the user email"' diff --git a/console/language/console-en/translations/generate.plugin.rest.resource.yml b/console/language/console-en/translations/generate.plugin.rest.resource.yml new file mode 100644 index 0000000000000000000000000000000000000000..aa56387869a1257c11e4b11940c379a7f3aff348 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.rest.resource.yml @@ -0,0 +1,29 @@ +description: 'Generate plugin rest resource' +help: 'The <info>generate:plugin:rest:resource</info> command helps you generate a new rest resource.' +welcome: 'Welcome to the Drupal Plugin Rest Resource generator' +options: + module: 'The Module name.' + class: 'Plugin Rest Resource class' + plugin-id: 'Plugin Rest Resource id' + plugin-label: 'Plugin Rest Resource Label' + plugin-url: 'Plugin Rest Resource URL' + plugin-states: 'Plugin Rest Resource States' +questions: + module: 'Enter the module name' + class: 'Enter the plugin rest resource class name' + plugin-id: 'Enter the plugin rest resource id' + plugin-label: 'Enter the plugin rest resource label' + plugin-url: 'Enter the plugin rest resource url' + plugin-states: 'Please select what REST States implement in your resource (GET is selected by default)' +messages: + selected-states: 'States selected' +examples: + - description: 'Generate a rest resource plugin using GET specifying the module name, the class, the plugin id, its label, the target url and the request type' + execution: | + drupal generate:plugin:rest:resource \ + --module="modulename" \ + --class="DefaultRestResource" \ + --plugin-id="default_rest_resource" \ + --plugin-label="Default rest resource" \ + --plugin-url="http://rest.resources.example.com" \ + --plugin-states='GET' diff --git a/console/language/console-en/translations/generate.plugin.rules.action.yml b/console/language/console-en/translations/generate.plugin.rules.action.yml new file mode 100644 index 0000000000000000000000000000000000000000..aa5d942af0b3a875195f9a6b02129c4fa270570d --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.rules.action.yml @@ -0,0 +1,41 @@ +description: 'Generate a plugin rule action' +help: 'The <info>generate:plugin:rulesaction</info> command helps you generate a new plugin rule action.' +welcome: 'Welcome to the Drupal Plugin Rules Action generator' +options: + module: common.options.module + class: 'Plugin class' + label: 'Plugin label' + plugin-id: 'Plugin id' + category: 'Plugin category' + context: 'Plugin context' +questions: + module: common.questions.module + class: 'Enter plugin class' + label: 'Enter the plugin label' + plugin-id: 'Enter the plugin id' + category: 'Enter plugin category' + context: 'Would you like to add a context?' + another-context: 'Would you like to add another context?' + context-name: 'Enter context name' + context-type: 'Enter context type (entity, entity:user_role, entity:user, language, any, string and etc.)' + context-label: 'Enter context label' + context-description: 'Enter context description' +examples: + - description: 'Generate a user rule action plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context' + execution: | + drupal generate:plugin:rules:action \ + --module="modulename" \ + --class="DefaultAction" \ + --label="Default Action" \ + --plugin-id="default_action" \ + --category="Action category" \ + --context='"name":"user", "type":"entity:user", "label":"Context label", "description":"Context description"' + - description: 'Generate a entity rule action plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context' + execution: | + drupal generate:plugin:rules:action \ + --module="modulename" \ + --class="DefaultAction" \ + --label="Default Action" \ + --plugin-id="default_action" \ + --category="Action category" \ + --context='"entity":"node", "type":"entity", "label":"Context label", "description":"Context description"' diff --git a/console/language/console-en/translations/generate.plugin.skeleton.yml b/console/language/console-en/translations/generate.plugin.skeleton.yml new file mode 100644 index 0000000000000000000000000000000000000000..1bf61e7359dd7bfc9d9df51c51d938241403d70c --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.skeleton.yml @@ -0,0 +1,24 @@ +description: 'Generate an implementation of a skeleton plugin' +help: 'The <info>"%s"</info> command helps you generate a skeleton plugin "%s".' +welcome: 'Welcome to the Drupal Skeleton Plugin generator' + +options: + module: 'The Module name.' + plugin: 'The Plugin Id.' + class: 'Plugin class name' + services: 'Load services from the container.' +questions: + module: 'Enter the module name' + plugin: 'Enter the Plugin Id' + class: 'Enter the plugin class name' + services: 'Enter your service' +messages: + plugin-dont-exist: 'The plugin "%s" does not exist.' + plugin-generator-implemented: 'Plugin "%s" already has an advanced command generator, please use "%s"' +examples: + - description: 'Generate a plugin skeleton specifying module name, the plugin id and the class' + execution: | + drupal generate:plugin:skeleton \ + --module="modulename" \ + --plugin-id="link_relation_type" \ + --class="DefaultLinkRelationType" diff --git a/console/language/console-en/translations/generate.plugin.type.annotation.yml b/console/language/console-en/translations/generate.plugin.type.annotation.yml new file mode 100644 index 0000000000000000000000000000000000000000..b75e064252f8264c711061e52d11b699dca9097d --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.type.annotation.yml @@ -0,0 +1,21 @@ +description: 'Generate a plugin type with annotation discovery' +help: 'The <info>generate:plugin:type:annotation</info> command helps you generate a new Plugin type that uses annotation discovery.' +welcome: 'Welcome to the Drupal Plugin Type Annotation generator' +options: + module: common.options.module + class: 'Plugin type class name' + machine-name: 'Plugin type machine name' + label: 'Plugin type label' +questions: + module: common.questions.module + class: 'Enter the plugin type class name' + machine-name: 'Enter the plugin type machine name' + label: 'Enter the plugin type label' +examples: + - description: 'Generate a plugin with annotation discovery specifying module name, class name, machine name and label' + execution: | + drupal generate:plugin:type:annotation \ + --module="modulename" \ + --class="ExamplePlugin" \ + --machine-name="example_plugin" \ + --label="Example plugin" diff --git a/console/language/console-en/translations/generate.plugin.type.yaml.yml b/console/language/console-en/translations/generate.plugin.type.yaml.yml new file mode 100644 index 0000000000000000000000000000000000000000..63f0963b91174fa0f848a30961b64e018ed73a66 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.type.yaml.yml @@ -0,0 +1,21 @@ +description: 'Generate a plugin type with Yaml discovery' +help: 'The <info>generate:plugin:type:yaml</info> command helps you generate a new Plugin type that uses Yaml discovery.' +welcome: 'Welcome to the Drupal Plugin Type Yaml generator' +options: + module: 'The Module name.' + class: 'Plugin type class name' + plugin-name: 'Plugin type machine name' + plugin-file-name: 'Plugin file name' +questions: + module: 'Enter the module name' + class: 'Enter the plugin type class name' + plugin-name: 'Enter the plugin type machine name' + plugin-file-name: 'Enter the plugin file name (e.g. MODULE.plugin.filename.yml)' +examples: + - description: 'Generate a plugin with Yaml discovery specifying module name, class name, plugin name and plugin file name' + execution: | + drupal generate:plugin:type:yaml \ + --module="modulename" \ + --class="ExamplePlugin" \ + --plugin-name="example_plugin" \ + --plugin-file-name="example.plugin" diff --git a/console/language/console-en/translations/generate.plugin.views.field.yml b/console/language/console-en/translations/generate.plugin.views.field.yml new file mode 100644 index 0000000000000000000000000000000000000000..5d8675471385e9a3ae5ed1c973baf3c2e50d0dc3 --- /dev/null +++ b/console/language/console-en/translations/generate.plugin.views.field.yml @@ -0,0 +1,22 @@ +description: 'Generate a custom plugin view field.' +help: 'The <info>generate:plugin:views:field</info> command helps you generate a new custom views field plugin.' +welcome: 'Welcome to the Drupal Plugin View Field generator' +options: + module: 'The Module name.' + class: 'Views plugin field class name' + title: 'Views plugin field title' + description: 'Views plugin field description' +questions: + module: 'Enter the module name' + class: 'Enter the views plugin field class name' + title: 'Enter the views plugin field title' + description: 'Enter the views plugin field description' + description_default: 'My awesome custom views field plugin.' +examples: + - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description' + execution: | + drupal generate:plugin:views:field \ + --module="modulename" \ + --class="CustomViewsField" \ + --title="Custom views field" \ + --description="My awesome custom views field plugin." diff --git a/console/language/console-en/translations/generate.post.update.yml b/console/language/console-en/translations/generate.post.update.yml new file mode 100644 index 0000000000000000000000000000000000000000..6957876cd81293324e8721e7d796223a1ba6fdbc --- /dev/null +++ b/console/language/console-en/translations/generate.post.update.yml @@ -0,0 +1,18 @@ +description: 'Generate an implementation of hook_post_update_NAME()' +help: 'The <info>"%s"</info> command helps you generate a hook post update NAME "%s"' +welcome: 'Welcome to the Drupal Post Updat generator' +options: + module: 'The Module name.' + post-update-name: 'Post Update Name' +questions: + module: 'Enter the module name' + post-update-name: 'Please provide the Post Update Name to be implemeted' +messages: + wrong-post-update-name: 'The post update name "%s" is invalid' + post-update-name-already-implemented: 'The post update name "%s" was already implemented' +examples: + - description: 'Generate an implementation of post update hook specifying the module name and the post update name' + execution: | + drupal generate:post:update \ + --module="modulename" \ + --post-update-name="PostUpdateName" diff --git a/console/language/console-en/translations/generate.profile.yml b/console/language/console-en/translations/generate.profile.yml new file mode 100644 index 0000000000000000000000000000000000000000..c0375696eae34c4a53c2834d0e6bb3b90f6d5897 --- /dev/null +++ b/console/language/console-en/translations/generate.profile.yml @@ -0,0 +1,37 @@ +description: 'Generate a profile.' +help: 'The <info>generate:profile</info> command helps you generate a new installation profile.' +welcome: 'Welcome to the Drupal installation profile generator' +options: + profile: 'The profile name' + machine-name: 'The machine name (lowercase and underscore only)' + profile-path: 'The path of the profile' + description: 'Profile description' + core: 'Core version' + dependencies: 'Module dependencies separated by commas (i.e. context, panels)' + themes: 'the theme name' + distribution: 'The distribution name' +questions: + profile: 'Enter the name of the new profile' + machine-name: 'Enter the machine name' + profile-path: 'Enter the profile Path' + description: 'Enter the description' + core: 'Enter Drupal Core version' + dependencies: 'Would you like to add module dependencies?' + themes: 'Enter theme name' + distribution: 'Is this install profile intended to be a distribution?' +suggestions: + my-useful-profile: 'My Useful Profile' + my-kick-ass-distribution: 'My Kick-ass Distribution' +warnings: + module-unavailable: 'Warning: The following modules are not available in your local environment "%s"' +errors: + directory-exists: 'The target directory "%s" is not empty.' +examples: + - description: 'Generate a profile specifying the profile name, the machine name, a description, the core and its module dependencies' + execution: | + drupal generate:profile \ + --profile="NewProfileName" \ + --machine-name="newprofilename" \ + --description="My Useful Profile" \ + --core="8.x" \ + --dependencies="modulename" diff --git a/console/language/console-en/translations/generate.routesubscriber.yml b/console/language/console-en/translations/generate.routesubscriber.yml new file mode 100644 index 0000000000000000000000000000000000000000..f509067a1cb808083e437398dd409b888dafd5df --- /dev/null +++ b/console/language/console-en/translations/generate.routesubscriber.yml @@ -0,0 +1,18 @@ +description: 'Generate a RouteSubscriber' +help: 'The <info>generate:service</info> command helps you generate a new RouteSubscriber.' +welcome: 'Welcome to the Drupal RouteSubscriber generator.' +options: + module: 'The Module name.' + name: 'Service name' + class: 'Class name' +questions: + module: 'Enter the module name' + name: 'Enter the service name' + class: 'Enter the Class name' +examples: + - description: 'Generate a route subscriber specifying the module name, the route name and its class' + execution: | + drupal generate:routesubscriber \ + --module="modulename" \ + --name="modulename.route_subscriber" \ + --class="RouteSubscriber" diff --git a/console/language/console-en/translations/generate.service.yml b/console/language/console-en/translations/generate.service.yml new file mode 100644 index 0000000000000000000000000000000000000000..567907b14b50c4121fc787b3a460fa2b27d04784 --- /dev/null +++ b/console/language/console-en/translations/generate.service.yml @@ -0,0 +1,38 @@ +description: 'Generate service' +help: 'The <info>generate:service</info> command helps you generate a new service.' +welcome: 'Welcome to the Drupal service generator' +options: + module: 'The Module name.' + service-name: 'Service name' + class: 'Class name' + interface: 'Interface' + interface-name: 'Interface name' + services: 'Load services from the container.' + path-service: 'Path' +questions: + module: 'Enter the module name' + service-name: 'Enter the service name' + class: 'Enter the Class name' + interface: 'Create an interface' + interface-name: 'Enter the interface name' + services: 'Enter your service' + path-service: 'Enter the path for the services' +messages: + service-already-taken: 'The service name has been already taken in module "%s"' +examples: + - description: 'Generate a services without interface specifying the module name, the service name, the class and its path' + execution: | + drupal generate:service \ + --module="modulename" \ + --name="modulename.default" \ + --class="DefaultService" \ + --path-service="/modules/custom/modulename/src/" + - description: 'Generate a services with interface specifying the module name, the service name, the class, the interface name and its path' + execution: | + drupal generate:service \ + --module="modulename" \ + --name="modulename.default" \ + --class="DefaultService" \ + --interface \ + --interface-name="InterfaceName" \ + --path-service="/modules/custom/modulename/src/" diff --git a/console/language/console-en/translations/generate.site.alias.yml b/console/language/console-en/translations/generate.site.alias.yml new file mode 100644 index 0000000000000000000000000000000000000000..ca3a7c179db84c6b2456d6d07472b2c729cfabb7 --- /dev/null +++ b/console/language/console-en/translations/generate.site.alias.yml @@ -0,0 +1,25 @@ +description: 'Generates a site alias.' +help: 'The <info>generate:site:alias</info> command helps you generate a new site alias.' +options: + name: 'Site name.' + environment: 'Environment name.' + type: 'The site type.' + composer-root: 'The Drupal root project directory.' + host: 'The ip/domain name of the remote system. Not required on local sites.' + port: 'The port to use when connecting via ssh.' + user: 'The username to use when connecting via ssh.' + extra-options: 'Used only when the target requires extra options, such as alternative authentication method and/or alternative identity file.' + site-uri: 'Drupal uri (for multi-sites).' + directory: 'Directory to store the generated site alias.' + site: 'Use local site as destination.' +questions: + name: 'Select or enter the site name' + environment: 'Enter the environment name (dev, test, prod, qa, dev.uri, test.uri, etc...)' + type: 'Select site type. Allowed options [local, ssh or container].' + composer-root: 'Enter the Drupal root project directory.' + host: 'Enter the ip/domain name of the remote system.' + port: 'Enter the port to use when connecting via ssh.' + user: 'Enter the username to use when connecting via ssh.' + extra-options: 'Select or enter a valid extra option.' + site-uri: 'Enter the Drupal uri (for multi-sites).' + directory: 'Select the directory to store the generated site alias.' diff --git a/console/language/console-en/translations/generate.theme.yml b/console/language/console-en/translations/generate.theme.yml new file mode 100644 index 0000000000000000000000000000000000000000..9b54abd9430995c87813164b3a975b8d9b1697ec --- /dev/null +++ b/console/language/console-en/translations/generate.theme.yml @@ -0,0 +1,73 @@ +description: 'Generate a theme.' +help: 'The <info>generate:theme</info> command helps you generates a new theme.' +welcome: 'Welcome to the Drupal theme generator' +options: + theme: 'The theme name' + machine-name: 'The machine name (lowercase and underscore only)' + theme-path: 'The path of the theme' + description: 'Theme description' + core: 'Core version' + package: 'Theme package' + composer: 'Add a composer.json file' + base-theme: 'Base theme (i.e. classy, stable)' + global-library: 'Global styling library name' + libraries: 'Libraries' + regions: Regions + breakpoints: Breakpoints +questions: + theme: 'Enter the new theme name' + machine-name: 'Enter the theme machine name' + theme-path: 'Enter the theme Path' + description: 'Enter theme description' + core: 'Enter Drupal Core version' + package: 'Enter package name' + dependencies: 'Would you like to add module dependencies?' + invalid-theme: 'Invalid "%s" theme was selected' + global-library: 'Enter the global styling library name' + library-add: 'Do you want to add another library?' + library-name: 'Enter library name' + library-version: 'Enter library version' + regions: 'Do you want to generate the theme regions?' + region-name: 'Enter region name' + region-machine-name: 'Enter region machine name' + region-add: 'Do you want to add another region?' + breakpoints: 'Do you want to generate the theme breakpoints?' + breakpoint-name: 'Enter breakpoint name' + breakpoint-label: 'Enter breakpoint label' + breakpoint-media-query: 'Enter breakpoint media query' + breakpoint-weight: 'Enter breakpoint weight' + breakpoint-multipliers: 'Enter breakpoint multipliers' + breakpoint-add: 'Do you want to add another breakpoint?' +suggestions: + my-awesome-theme: 'My Awesome theme' + other: 'Other' +warnings: + module-unavailable: 'Warning The following modules are not available in your local environment "%s"' +errors: + directory-exists: 'The target directory "%s" is not empty.' +examples: + - description: 'Generate a theme without region and without breakpoint specifying the theme name, its machine name, the theme path, a description, the drupal core, the package name and the global library' + execution: | + drupal generate:theme \ + --theme="AnotherTheme" \ + --machine-name="anothertheme" \ + --theme-path="themes/custom" \ + --description="My Awesome theme" \ + --core="8.x" \ + --package="PackageName" \ + --global-library="global-styling" \ + --base-theme="false" + - description: 'Generate a theme base on stable theme with two region defined and one breakpoint specifying the theme name, its machine name, the theme path, a description, the drupal core, the package name, a global library, its base, the regions and the breakpoint' + execution: | + drupal generate:theme \ + --theme="MyTheme" \ + --machine-name="mytheme" \ + --theme-path="themes/custom" \ + --description="My Awesome theme" \ + --core="8.x" \ + --package="MyThemePackage" \ + --global-library="global-styling" \ + --base-theme="stable" \ + --regions='"region_name":"Content", "region_machine_name":"content"' \ + --regions='"region_name":"Panel", "region_machine_name":"panel"' \ + --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"' diff --git a/console/language/console-en/translations/generate.twig.extension.yml b/console/language/console-en/translations/generate.twig.extension.yml new file mode 100644 index 0000000000000000000000000000000000000000..ae84a7e492873a45558be0151bc6f8335d725934 --- /dev/null +++ b/console/language/console-en/translations/generate.twig.extension.yml @@ -0,0 +1,20 @@ +description: 'Generate a Twig extension.' +help: 'The <info>generate:twig:extension</info> command helps you to generate a Twig extension.' +welcome: 'Welcome to the Drupal Twig Extension generator' +options: + module: 'The Module name.' + name: 'Twig Extension name' + class: 'Class name' + services: 'Load services from the container.' +questions: + module: 'Enter the module name' + name: 'Enter the twig Extension name' + class: 'Class name' + services: 'Enter your service' +examples: + - description: 'Generate a twig extension specifying the module name, the extension name and its class' + execution: | + drupal generate:twig:extension \ + --module="modulename" \ + --name="modulename.twig.extension" \ + --class="DefaultTwigExtension" diff --git a/console/language/console-en/translations/generate.update.yml b/console/language/console-en/translations/generate.update.yml new file mode 100644 index 0000000000000000000000000000000000000000..614b4216dac9a3fb624e0bd8c2d029243d634623 --- /dev/null +++ b/console/language/console-en/translations/generate.update.yml @@ -0,0 +1,17 @@ +description: 'Generate an implementation of hook_update_N()' +help: 'The <info>"%s"</info> command helps you generate a hook update N "%s"' +welcome: 'Welcome to the Drupal Update generator' +options: + module: 'The Module name.' + update-n: 'Update Number' +questions: + module: 'Enter the module name' + update-n: 'Please provide the Update N to be implemeted' +messages: + wrong-update-n: 'The update number "%s" is invalid' +examples: + - description: 'Generate an update N hook implementation specifying the module name and the N value' + execution: | + drupal generate:update \ + --module="modulename" \ + --update-n="8001" diff --git a/console/language/console-en/translations/help.yml b/console/language/console-en/translations/help.yml new file mode 100644 index 0000000000000000000000000000000000000000..d8deefc5b1f7e96a4c90aac500d84fab91b38d71 --- /dev/null +++ b/console/language/console-en/translations/help.yml @@ -0,0 +1,19 @@ +description: 'Displays help for a command' +help: | + The <info>%command.name%</info> command displays help for a given command: + + <info>php %command.full_name% list</info> + + You can also output the help in other formats by using the <comment>--format</comment> option: + + <info>php %command.full_name% --format=xml list</info> + + To display the list of available commands, please use the <info>list</info> command. +arguments: + command-name: 'The command name' +options: + xml: 'To output list as XML' + raw: 'To output raw command list' + format: 'The output format (txt, xml, json, or md)' +messages: + deprecated: 'The <comment>--xml</comment> option was deprecated in version 2.7 and will be removed in version 3.0. Use the <comment>--format</comment> option instead' diff --git a/console/language/console-en/translations/image.styles.flush.yml b/console/language/console-en/translations/image.styles.flush.yml new file mode 100644 index 0000000000000000000000000000000000000000..f613fad83aa350dc11e33af84dd27c1b8516845c --- /dev/null +++ b/console/language/console-en/translations/image.styles.flush.yml @@ -0,0 +1,15 @@ +description: 'Execute flush function by image style or execute all flush images styles' +messages: + executing-flush: 'Executing flush function on image style "%s"' + success: 'All flush functions requested were executed successfully' +options: + image-style: 'The Images Styles name.' +questions: + image-style: 'Select Images Styles to flush.' +examples: + - description: 'Flush large image style' + execution: | + drupal image:styles:flush large + - description: 'Flush thumbnail image style' + execution: | + drupal image:styles:flush thumbnail diff --git a/console/language/console-en/translations/init.yml b/console/language/console-en/translations/init.yml new file mode 100644 index 0000000000000000000000000000000000000000..d2bc26a8aa6a46d951df57f86c5fd488649918a6 --- /dev/null +++ b/console/language/console-en/translations/init.yml @@ -0,0 +1,17 @@ +description: 'Copy configuration files.' +options: + destination: 'Destination directory to copy files' + override: 'Override configurations files flag' + autocomplete: 'Autocomplete tool files flag.' + site: 'Use local site as destination.' +questions: + destination: 'Select destination to copy configuration' + autocomplete: 'Generate autocomplete files' + language: 'Select language' + temp: 'Enter temporary file path' + chain: 'Copy chain files examples' + sites: 'Copy site alias files examples' + temp: 'Enter temporary file path' + learning: 'Shows information for learning purposes?' + generate-inline: 'Show inline representation of the executed command?' + generate-chain: 'Show chain representation of the executed command?' diff --git a/console/language/console-en/translations/list.yml b/console/language/console-en/translations/list.yml new file mode 100644 index 0000000000000000000000000000000000000000..7683426e1f7a16cd7dd447f552a8f22e0d8799a8 --- /dev/null +++ b/console/language/console-en/translations/list.yml @@ -0,0 +1,25 @@ +description: 'Lists all available commands' +help: | + The <info>%command.name%</info> command lists all commands: + <info>php %command.full_name%</info> + You can also display the commands for a specific namespace: + <info>php %command.full_name% test</info> + You can also output the information in other formats by using the <comment>--format</comment> option: + <info>php %command.full_name% --format=xml</info> + It's also possible to get raw list of commands (useful for embedding command runner): + <info>php %command.full_name% --raw</info> +arguments: + namespace: 'The namespace name' +options: + xml: 'To output list as XML' + raw: 'To output raw command list' + format: 'The output format (txt, xml, json, or md)' + +messages: + usage: "<comment>Usage:</comment>\n" + usage-details: " command [options] [arguments]\n\n" + arguments: '<comment>Arguments:</comment>' + options: '<comment>Options:</comment>' + help: '<comment>Help:</comment>' + comment: '<comment>Available commands for the "%s" namespace:</comment>' + available-commands: '<comment>Available commands:</comment>' diff --git a/console/language/console-en/translations/locale.language.add.yml b/console/language/console-en/translations/locale.language.add.yml new file mode 100644 index 0000000000000000000000000000000000000000..29fa09e8f71c10165e9c70e4a07370396f555028 --- /dev/null +++ b/console/language/console-en/translations/locale.language.add.yml @@ -0,0 +1,8 @@ +description: 'Add languages to be supported by your site' +messages: + invalid-language: 'Language "%s" is an invalid language' + invalid-languages: 'Languages "%s" are invalid' + language-add-successfully: 'Language "%s" was added successfully.' + languages-add-successfully: 'Languages "%s" were added successfully.' + language-installed: 'Language "%s" is already installed.' + languages-installed: 'Languages "%s" are already installed.' diff --git a/console/language/console-en/translations/locale.language.delete.yml b/console/language/console-en/translations/locale.language.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..df219c2cad37ad5f6e400b96c5a3ae3e4379c9b2 --- /dev/null +++ b/console/language/console-en/translations/locale.language.delete.yml @@ -0,0 +1,4 @@ +description: 'Delete a language to be supported by your site' +messages: + invalid-language: 'Language "%s" it''s an invalid language' + language-deleted-successfully: 'Language "%s" was deleted successfully.' diff --git a/console/language/console-en/translations/locale.translation.status.yml b/console/language/console-en/translations/locale.translation.status.yml new file mode 100644 index 0000000000000000000000000000000000000000..e1e219cbecba6f5fca2a4cb33fe7d8f2e6293822 --- /dev/null +++ b/console/language/console-en/translations/locale.translation.status.yml @@ -0,0 +1,18 @@ +description: 'List available translation updates' +arguments: + language: 'Language for instance es or Spanish' +messages: + no-languages: 'No translatable languages available. Add a language first.' + up-to-date: 'All translations up to date.' + no-translations: 'No translation status available. Check manually' + project: 'Project' + version: 'Version' + local-age: 'Local age' + remote-age: 'Remote age' + info: Information + no-translation-files: 'No translation files are provided for development releases.' + file-not-found: 'File not found at "%s" nor at "%s"' + local-file-not-found: 'File not found at "%s"' + translation-not-determined: 'Translation file location could not be determined.' + translation-project-updated: 'Updated' + translation-project-available: 'New translation available' diff --git a/console/language/console-en/translations/migrate.debug.yml b/console/language/console-en/translations/migrate.debug.yml new file mode 100644 index 0000000000000000000000000000000000000000..be97f1186dfebb89e3c3f22cc8a11e4d061ded05 --- /dev/null +++ b/console/language/console-en/translations/migrate.debug.yml @@ -0,0 +1,8 @@ +description: 'Displays current migration available for the application' +arguments: + tag: 'Migrate tag' +messages: + id: 'Migration Id' + description: Description + no-migrations: 'There aren''t migrations available try to execute command: migrate:setup:migrations' + tags: Tags diff --git a/console/language/console-en/translations/migrate.execute.yml b/console/language/console-en/translations/migrate.execute.yml new file mode 100644 index 0000000000000000000000000000000000000000..393e0895cd222109343e97b5f86dd329bdb6c947 --- /dev/null +++ b/console/language/console-en/translations/migrate.execute.yml @@ -0,0 +1,40 @@ +description: 'Execute a migration available for application' +arguments: + id: 'Migration id(s)' +options: + site-url: 'Site Source URL' + db-file: 'Database File' + db-host: 'Database Host' + db-name: 'Database Name' + db-user: 'Database User' + db-pass: 'Database Pass' + db-prefix: 'Database Prefix' + db-port: 'Database Port' + exclude: 'Migration id(s) to exclude' + source-base-path: 'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)' +questions: + id: 'Migration Id' + exclude-id: 'Migration Id to exclude (press <return> to stop adding migrations to exclude)' + other-id: 'Other migration id (press <return> to stop adding migrations)' + site-url: 'Source Site URL' + db-file: 'Database File' + db-host: 'Database Host' + db-name: 'Database Name' + db-user: 'Database User' + db-pass: 'Database Pass' + db-prefix: 'Database Prefix' + db-port: 'Database Port' + invalid-migration-id: 'Migration Id "%s" is invalid' + source-base-path: 'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)' +messages: + processing: 'Processing Migration "%s"' + imported: 'Migration "%s" was imported correctly' + fail-load: 'Migration "%s" can''t be loaded' + importing-incomplete: 'Importing migration "%s"' + import-stopped: 'Import "%s" stopped by request' + import-fail: 'Import "%s" failed' + import-skipped: 'Import "%s" was skipped due to unfulfilled dependencies' + wrong-source: 'Upgrading from this version of Drupal is not supported.' + destination-error: 'Database destination error' + source-error: 'Database source error' + no-migrations: 'There are not migrations available to be executed' diff --git a/console/language/console-en/translations/migrate.rollback.yml b/console/language/console-en/translations/migrate.rollback.yml new file mode 100644 index 0000000000000000000000000000000000000000..36666266ff2bc7a57564e189788a4b0daa811fbd --- /dev/null +++ b/console/language/console-en/translations/migrate.rollback.yml @@ -0,0 +1,6 @@ +description: 'Rollback one or multiple migrations' +arguments: + id: 'Migration id(s)' +messages: + not-available: 'Migration Id "%s" is invalid.Skipping' + processing: 'Rollback "%s" completed' \ No newline at end of file diff --git a/console/language/console-en/translations/migrate.setup.yml b/console/language/console-en/translations/migrate.setup.yml new file mode 100644 index 0000000000000000000000000000000000000000..70d61207e5c8de90b8f0bc45f82be4ca4b080fbd --- /dev/null +++ b/console/language/console-en/translations/migrate.setup.yml @@ -0,0 +1,24 @@ +description: 'Load and create the relevant migrations for a provided legacy database' +options: + db-type: 'Drupal Database type' + db-host: 'Database Host' + db-name: 'Database Name' + db-user: 'Database User' + db-pass: 'Database Pass' + db-prefix: 'Database Prefix' + db-port: 'Database Port' + source-base-path: 'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)' +questions: + db-type: 'Drupal Database type' + db-host: 'Database Host' + db-name: 'Database Name' + db-user: 'Database User' + db-pass: 'Database Pass' + db-prefix: 'Database Prefix' + db-port: 'Database Port' + source-base-path: 'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)' +messages: + not-drupal: 'Source database does not contain a recognizable Drupal version.' + migrations-created: '"%s" migrations were created successfully for "%s".' + migrations-not-found: 'There aren''t migrations available' + migrations-already-exist: 'All migrations available are already created' diff --git a/console/language/console-en/translations/module.dependency.install.yml b/console/language/console-en/translations/module.dependency.install.yml new file mode 100644 index 0000000000000000000000000000000000000000..f8ccae9b87ba2bc3f0f7c4e39857cfe01e5e2ba4 --- /dev/null +++ b/console/language/console-en/translations/module.dependency.install.yml @@ -0,0 +1,11 @@ +description: 'Install dependencies module in the application' +arguments: + module: 'Module or modules to be enabled should be separated by a space' +messages: + no-depencies: 'Nothing to do. This module does not have any dependencies to install' + installing: 'Installing module(s) "%s"' + success: 'The following module(s) were installed successfully: "%s"' +examples: + - description: 'Install the dependencies of the specfied module' + execution: | + drupal module:dependency:install modulename diff --git a/console/language/console-en/translations/module.download.yml b/console/language/console-en/translations/module.download.yml new file mode 100644 index 0000000000000000000000000000000000000000..03e3c478ef2182723454184bf71aace154c854f8 --- /dev/null +++ b/console/language/console-en/translations/module.download.yml @@ -0,0 +1,25 @@ +description: 'Download module or modules in application' +arguments: + module: 'Module or modules to be enabled should be separated by a space' +options: + latest: 'Default to download most recent version' + path: 'The path of the contrib project' + composer: 'Option to point out that the module will be downloaded, managed & installed by Composer' + unstable: 'Module unstable' +questions: + path: 'Enter the contrib project Path' +messages: + no-releases: 'There aren''t any releases for module "%s"' + getting-releases: 'Getting releases for module "%s"' + downloading: 'Downloading module "%s" release "%s"' + downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"' + select-release: 'Please select your favorite release' + outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.' + error-creating-folder: 'Error creating folder "%s", please check your permissions' + no-composer-repo: 'Please, configure Composer in ~/.console/config.yml' + composer: 'Module "%s" was downloaded successfully using Composer' +examples: + - description: 'Download module specifying module name and its path' + execution: | + drupal module:download modulename \ + --path="modules/contrib" diff --git a/console/language/console-en/translations/module.install.yml b/console/language/console-en/translations/module.install.yml new file mode 100644 index 0000000000000000000000000000000000000000..8aa35ec1af8c6ff6315e9b533cd54ddd74dcc206 --- /dev/null +++ b/console/language/console-en/translations/module.install.yml @@ -0,0 +1,35 @@ +description: 'Install module or modules in the application' +arguments: + module: 'Module or modules to be enabled should be separated by a space' +options: + latest: 'Default to download most recent version' + composer: 'Download the module using Composer' +questions: + module: 'Module name (press <return> to stop adding modules)' + invalid-module: 'Invalid module "%s"' +messages: + no-modules: 'You must provide module or modules to enable.' + missing: 'Unable to install module(s) "%s" due to missing module(s) "%s"' + missing-dependencies: 'Unable to install modules "%s" due to missing dependencies "%s"' + nothing: 'Nothing to do. All modules are already installed' + dependencies: 'Are you sure you want to install dependencies: "%s"?' + success: 'The following module(s) were installed successfully: "%s"' + disabled-modules: 'Only disabled modules will be listed in autocomplete' + config-conflict-overwrite: 'These configuration objects will be overwritten in your active configuration' + config-conflict: 'These configuration objects already exist in active configuration, installation is not possible' + getting-missing-modules: 'One or more modules "%s" are not available, running download process to get those modules' + getting-releases: 'Getting releases for module "%s"' + select-release: 'Please select your favorite release' + downloading: 'Downloading module "%s" release "%s"' + downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"' + no-releases: 'There aren''t any releases for module "%s"' + installing: 'Installing module(s) "%s"' + composer: 'The module was installed successfully with Composer' + error-creating-folder: 'Error creating folder "%s", please check your permissions' + download-with-composer: 'Module "%s" was downloaded with Composer.' + not-installed-with-composer: 'Module "%s" seems not to be installed with Composer. Halting.' + invalid-name: 'Invalid module name: "%s"' +examples: + - description: 'Install module specifying the module name' + execution: | + drupal module:install modulename diff --git a/console/language/console-en/translations/module.path.yml b/console/language/console-en/translations/module.path.yml new file mode 100644 index 0000000000000000000000000000000000000000..70407ffa3e8ac4724529bbe8132f01978caecab2 --- /dev/null +++ b/console/language/console-en/translations/module.path.yml @@ -0,0 +1,10 @@ +description: 'Returns the relative path to the module (or absolute path)' +arguments: + module: 'The Module name (machine name)' +options: + absolute: 'Return module absolute path' +messages: +examples: + - description: 'Get the relative path of the module specifying the module name' + execution: | + drupal module:path modulename diff --git a/console/language/console-en/translations/module.uninstall.yml b/console/language/console-en/translations/module.uninstall.yml new file mode 100644 index 0000000000000000000000000000000000000000..3b6d6a822590dfd4f3825b98454defb4286b7b9e --- /dev/null +++ b/console/language/console-en/translations/module.uninstall.yml @@ -0,0 +1,19 @@ +description: 'Uninstall module or modules in the application' +questions: + module: 'Module name (press <return> to stop adding modules)' + invalid-module: 'Invalid module "%s"' +options: + module: 'Module or modules to be uninstalled should be separated by a space' + force: 'Do you want to ignore dependencies and forcefully uninstall the module?' + composer: 'Uninstalls the module using Composer' +messages: + no-modules: 'You must provide module or modules to uninstall.' + dependents: 'Unable to uninstall modules "%s" because are required by "%s"' + nothing: 'Nothing to do. All modules are already uninstalled' + success: 'The following module(s) were uninstalled successfully: "%s"' + missing: 'Unable to uninstall modules "%s" due to missing modules "%s"' + composer-success: 'You should execute now the following command: "composer remove vendor/package"' +examples: + - description: 'Uninstall the module specifying the module name' + execution: | + drupal module:uninstall modulename diff --git a/console/language/console-en/translations/module.update.yml b/console/language/console-en/translations/module.update.yml new file mode 100644 index 0000000000000000000000000000000000000000..0bd1729eaee99d7d049e8e4810a0196671437bce --- /dev/null +++ b/console/language/console-en/translations/module.update.yml @@ -0,0 +1,19 @@ +description: 'Update core, module or modules in the application' +arguments: + module: 'Module or modules to be updated should be separated by a space. Leave empty for updating the core and all your modules managed by Composer.' +options: + composer: 'Update the module using Composer' + simulate: 'Simulate the update process with Composer' +questions: + module: 'Module name (press <return> to stop adding modules)' + invalid-module: 'Invalid module "%s"' +messages: + success: 'The following module(s) were installed successfully: "%s"' + composer: 'The module "%s" was managed successfully with Composer' + only-composer: 'This command only updates modules via Composer. Use --composer option.' + missing-module: 'Enter a module(s) name(s) to update.' +examples: + - description: 'Update module specifying module name and composer parameter' + execution: | + drupal module:update modulename \ + --composer diff --git a/console/language/console-en/translations/multisite.new.yml b/console/language/console-en/translations/multisite.new.yml new file mode 100644 index 0000000000000000000000000000000000000000..0f361ba2a3d89dd2c09842fa10ce0cc687aff970 --- /dev/null +++ b/console/language/console-en/translations/multisite.new.yml @@ -0,0 +1,28 @@ +description: 'Sets up the files for a new multisite install.' +help: 'The <info>multisite:new</info> command assists in setting up new multisite installs by creating the needed subdirectory and files, and can optionally copy an existing ''default'' installation.' +arguments: + directory: 'Name of directory under ''sites'' which should be created.' + uri: 'Site URI to add to sites.php.' +options: + copy-default: 'Copies existing site from the default install.' +errors: + subdir-empty: 'You must specify a multisite subdirectory to create.' + subdir-exists: 'The "sites/%s" directory already exists.' + default-missing: 'The sites/default directory is missing.' + mkdir-fail: 'Unable to create "sites/%s". Please check the sites directory permissions and try again.' + sites-invalid: 'The sites.php file located is either not readable or not a file.' + sites-missing: 'No sites.php or example.sites.php to copy from.' + sites-other: 'A problem was encountered when attempting to write sites.php' + file-missing: 'The file "%s" was not found for copying.' + copy-fail: 'Unable to copy "%s" to "%s". Please check permissions and try again.' + write-fail: 'Unable to write to the file "%s". Please check the file permissions and try again.' + chmod-fail: 'Unable to change permissions on the file "%s". Please ensure that the permissions on that file are correct.' +warnings: + missing-files: 'No sites/default/files directory found. The files directory will need to be created by hand.' +messages: + copy-default: 'The default install was successfully copied to "sites/%s".' + fresh-site: 'The new multisite structure was successfully created at "sites/%s" and is ready for installation.' +examples: + - description: 'Set up files for a multisite install specifying destination path and uri' + execution: | + drupal multisite:new vendor/newsite http://mysite.example.com diff --git a/console/language/console-en/translations/multisite.update.yml b/console/language/console-en/translations/multisite.update.yml new file mode 100644 index 0000000000000000000000000000000000000000..0da5c900db7068081718a96162b5d2ce6503634e --- /dev/null +++ b/console/language/console-en/translations/multisite.update.yml @@ -0,0 +1,22 @@ +description: 'Update the files for a multisite installed.' +help: 'The <info>multisite:new</info> command assists in setting up new multisite installs by creating the needed subdirectory and files, and can optionally copy an existing ''default'' installation.' +options: + uri: 'Name of old directory under ''sites'' which should be updated.' + directory: 'Name of new directory for multisite installed. (You could create subdir separated by ''/'')' +questions: + uri: 'Choice the multisite to update' + directory: 'Enter the new name (You could use subdir separated by ''/'')' +errors: + invalid-uri: 'The --uri="%s" does not exist' + uri-dir-empty: 'You must specify a old multisite directory to update.' + new-dir-empty: 'You must specify a new name to update multisite.' + subdir-exists: 'The "sites/%s" directory already exists.' + mkdir-fail: 'Unable to create "sites/%s". Please check the sites directory permissions and try again.' + copy-fail: 'Unable to copy "%s" to "%s". Please check permissions and try again.' + write-fail: 'Unable to write to the file "%s". Please check the file permissions and try again.' +messages: + move-settings: 'The file settings.php was successfully movied to "sites/%s".' +examples: + - description: 'Update the files for a multisite installed specifying old path and new path' + execution: | + drupal multisite:update diff --git a/console/language/console-en/translations/node.access.rebuild.yml b/console/language/console-en/translations/node.access.rebuild.yml new file mode 100644 index 0000000000000000000000000000000000000000..c18b6da1230bcb606eaa6b08cb9ec56ba7a3d920 --- /dev/null +++ b/console/language/console-en/translations/node.access.rebuild.yml @@ -0,0 +1,12 @@ +description: 'Rebuild node access permissions.' +help: 'Rebuilding will remove all privileges to content and replace them with permissions based on the current modules and settings.' +options: + batch: 'Process in batch mode.' +messages: + rebuild: 'Rebuilding node access permissions, one moment please.' + completed: 'Done rebuilding permissions.' + failed: 'Rebuilding permissions was not successful.' +examples: + - description: Rebuild node access permissions + execution: + drupal node:access:rebuild --batch diff --git a/console/language/console-en/translations/queue.run.yml b/console/language/console-en/translations/queue.run.yml new file mode 100644 index 0000000000000000000000000000000000000000..0411433d816e165227b48f4690ba5f0bc5484831 --- /dev/null +++ b/console/language/console-en/translations/queue.run.yml @@ -0,0 +1,9 @@ +description: 'Process the selected queue.' +arguments: + name: 'Queue name.' +messages: + success: 'Processed "%s": "%s"/"%s" items in "%s" seconds.' + failed: '"%s" failed: "%s".' + missing-name: 'Provide a valid queue name.' + invalid-name: 'Invalid queue name "%s" provided.' + diff --git a/console/language/console-en/translations/rest.debug.yml b/console/language/console-en/translations/rest.debug.yml new file mode 100644 index 0000000000000000000000000000000000000000..6fc9fc811a135fc9b2325a4902b6afe7acb1b314 --- /dev/null +++ b/console/language/console-en/translations/rest.debug.yml @@ -0,0 +1,17 @@ +description: 'Displays current rest resource for the application' +arguments: + resource-id: 'Rest ID' +options: + status: 'Rest resource status enabled | disabled' +messages: + id: 'Rest ID' + label: Label + canonical-url: 'Canonical URL' + status: Status + provider: Provider + enabled: Enabled + disabled: Disabled + rest-state: 'REST States' + supported-formats: 'Supported Formats' + supported-auth: 'Supported Authentication Providers' + not-found: 'Rest resource "%s" not found' diff --git a/console/language/console-en/translations/rest.disable.yml b/console/language/console-en/translations/rest.disable.yml new file mode 100644 index 0000000000000000000000000000000000000000..a1f7360e94d8400ae68a25d013be311300b460a3 --- /dev/null +++ b/console/language/console-en/translations/rest.disable.yml @@ -0,0 +1,10 @@ +description: 'Disable a rest resource for the application' +arguments: + resource-id: 'Rest ID' + states: 'REST States to disable for Rest resource' +questions: + resource-id: 'Rest ID' +messages: + invalid-rest-id: 'Rest ID "%s" is invalid' + success: 'Rest ID "%s" disabled' + already-disabled: 'Rest ID "%s" was already disabled' diff --git a/console/language/console-en/translations/rest.enable.yml b/console/language/console-en/translations/rest.enable.yml new file mode 100644 index 0000000000000000000000000000000000000000..4b7a5bf2eeee7893183dd8963fed2b5e667b2114 --- /dev/null +++ b/console/language/console-en/translations/rest.enable.yml @@ -0,0 +1,16 @@ +description: 'Enable a rest resource for the application' +arguments: + resource-id: 'Rest ID' + states: 'REST States to enable for Rest resource' + authorizations: 'Authorizations providers enabled for Rest Resource' +questions: + resource-id: 'Rest ID' +messages: + invalid-rest-id: 'Rest ID "%s" is invalid' + formats: 'Available serialization formats' + methods: 'Available methods' + authentication-providers: 'Available Authentication Providers' + selected-method: 'Selected Method' + selected-formats: 'Selected formats' + selected-authentication-providers: 'Selected Authentication Providers' + success: 'Rest ID "%s" enabled' diff --git a/console/language/console-en/translations/role.delete.yml b/console/language/console-en/translations/role.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..1eeb54578a8a32f47ad6239414be375637329a65 --- /dev/null +++ b/console/language/console-en/translations/role.delete.yml @@ -0,0 +1,14 @@ +description: 'Delete roles for the application' +help: 'The <info>role:delete</info> command helps you delete roles.' +welcome: 'Welcome to the Drupal role delete' +arguments: + rolename: 'Roles name to be deleted' +messages: + role-id: 'Role Id' + role-name: 'Role Name' + role-created: 'Roles was deleted successfully' + invalid-machine-name: 'Role does not exist' +examples: + - description: 'Delete role specifying rolename' + execution: | + drupal role:delete moderator diff --git a/console/language/console-en/translations/role.new.yml b/console/language/console-en/translations/role.new.yml new file mode 100644 index 0000000000000000000000000000000000000000..54303a33c83ca9eea5fb914eba6b43fb09111084 --- /dev/null +++ b/console/language/console-en/translations/role.new.yml @@ -0,0 +1,18 @@ +description: 'Create roles for the application' +help: 'The <info>role:new</info> command helps you create roles.' +welcome: 'Welcome to the Drupal role create' +arguments: + rolename: 'Role name to be created' + machine-name: 'Role machine name' +questions: + rolename: 'Role name to be created' + machine-name: 'Role machine name' +messages: + role-id: 'Role Id' + role-name: 'Role Name' + role-created: 'Role "%s" was created successfully' + invalid-machine-name: 'The machine name is already exist' +examples: + - description: 'Create role specifying rolename and machine-name' + execution: | + drupal role:new moderator moderator diff --git a/console/language/console-en/translations/router.rebuild.yml b/console/language/console-en/translations/router.rebuild.yml new file mode 100644 index 0000000000000000000000000000000000000000..bc0fbc17e361b12e8afe2034c6ad74805287e2f8 --- /dev/null +++ b/console/language/console-en/translations/router.rebuild.yml @@ -0,0 +1,10 @@ +description: 'Rebuild routes for the application' +arguments: + route-name: 'Route names' +messages: + rebuilding: 'Rebuilding routes, wait a moment please' + completed: 'Done rebuilding route(s).' +examples: + - description: 'Rebuild routes' + execution: + drupal router:rebuild diff --git a/console/language/console-en/translations/self-update.yml b/console/language/console-en/translations/self-update.yml new file mode 100644 index 0000000000000000000000000000000000000000..72014fd3a1b00c7f602a4dc6af4ee1574b8f1d07 --- /dev/null +++ b/console/language/console-en/translations/self-update.yml @@ -0,0 +1,20 @@ +description: 'Update project to the latest version.' +help: 'Update project to the latest version.' +options: + major: 'Update to a new major version, if available.' + manifest: 'Override the manifest file path.' + current-version: 'Override the version to update from.' +questions: + update: 'Update from version "%s" to version "%s".' +messages: + not-phar: 'This instance of the CLI was not installed as a Phar archive.' + update: 'Updating to version "%s".' + success: 'Updated from version "%s" to version "%s".' + check: 'Checking for updates from version: "%s"' + current-version: 'The latest version "%s", was already installed on your system.' + instructions: | + Update using: composer global update + Or you can switch to a Phar install recommended + composer global remove drupal/console + curl https://drupalconsole.com/installer -L -o drupal.phar + diff --git a/console/language/console-en/translations/server.yml b/console/language/console-en/translations/server.yml new file mode 100644 index 0000000000000000000000000000000000000000..86d5ca0c96cd5a4fe83dd334f1741ca4b2f82bd0 --- /dev/null +++ b/console/language/console-en/translations/server.yml @@ -0,0 +1,15 @@ +description: 'Runs PHP built-in web server' +arguments: + address: 'The address:port values' +messages: + executing: 'Executing php from "%s".' + listening: 'Listening on "%s".' +errors: + binary: 'Unable to find PHP binary to run server.' +examples: + - description: 'Run using default address argument value 127.0.0.1:8088' + execution: 'drupal server' + - description: 'Passing address argument to use a different port number' + execution: 'drupal server 127.0.0.1:8089' + - description: 'Running default address argument values, using --root option to define the Drupal root' + execution: 'drupal --root=/var/www/drupal8.dev server' diff --git a/console/language/console-en/translations/settings.set.yml b/console/language/console-en/translations/settings.set.yml new file mode 100644 index 0000000000000000000000000000000000000000..b7150bc69a07f81436a803de8c09a880a86855bb --- /dev/null +++ b/console/language/console-en/translations/settings.set.yml @@ -0,0 +1,15 @@ +description: 'Change a specific setting value in DrupalConsole config file' +arguments: + name: 'Setting name in YAML flatten format to set a value in Drupal Console config file' + value: 'Setting value to set in Drupal Console config file' +messages: + error-parsing: 'An error occurs during parsing of YAML file "%s".' + error-generating: 'Error setting new language in config file.' + error-writing: 'Error writing config file.' + success: 'Setting "%s" was set to "%s"' + missing-file: 'The "%s" config file is missing, try executing `drupal init`' + missing-language: 'Provided language: "%s", not found' +examples: + - description: 'Set application language setting value to "es"' + execution: + drupal settings:set application.language es diff --git a/console/language/console-en/translations/shell.yml b/console/language/console-en/translations/shell.yml new file mode 100644 index 0000000000000000000000000000000000000000..89587a8cd26c0b30719661ac5d41561673c7be16 --- /dev/null +++ b/console/language/console-en/translations/shell.yml @@ -0,0 +1,2 @@ +description: 'Open a shell providing an interactive REPL (Read–Eval–Print-Loop).' +help: 'This command provides a wrapper for psysh. A runtime developer console, interactive debugger and REPL for PHP.' diff --git a/console/language/console-en/translations/site.import.local.yml b/console/language/console-en/translations/site.import.local.yml new file mode 100644 index 0000000000000000000000000000000000000000..39a43b979637da38ddbf1a2e90f064e6e6120003 --- /dev/null +++ b/console/language/console-en/translations/site.import.local.yml @@ -0,0 +1,20 @@ +description: 'Import/Configure an existing local Drupal project' +help: 'The <info>site:import:local</info> does create the yaml configuration file for a local existing site.' +arguments: + directory: 'Existing Drupal root directory' + name: 'Name that will be used to generate the site config' +options: + environment: 'Name of the environment that is going to be imported' +messages: + imported: 'The site has been imported successfully. You might want to run `drupal debug:site` to confirm that everything went well.' + error-missing: 'The directory "%s" does not exist.' + error-not-drupal: 'This is not a valid drupal root: "%s"' + error-writing: 'An error occurred while trying to write the config file: "%s"' +questions: + directory: 'Enter the directory name where to install Drupal' + name: 'Enter the name of the site' + environment: 'Enter the site environment name' +examples: + - description: 'Import local drupal project specifying the site name and the path' + execution: + drupal site:import:local SiteName /private/var/www/vhost/anexusit/drupal8.dev/web diff --git a/console/language/console-en/translations/site.install.yml b/console/language/console-en/translations/site.install.yml new file mode 100644 index 0000000000000000000000000000000000000000..a831470393659177065c1b6e545bb26a91068120 --- /dev/null +++ b/console/language/console-en/translations/site.install.yml @@ -0,0 +1,48 @@ +description: 'Install a Drupal project' +arguments: + profile: 'Drupal Profile to be installed' + langcode: 'Drupal language' + db-type: 'Drupal Database type to be used in install' + db-file: 'Drupal Database file to be used in install' + site-name: 'Drupal site name' + site-mail: 'Drupal site mail' + account-name: 'Drupal administrator account name' + account-mail: 'Drupal administrator account mail' + account-pass: 'Drupal administrator account password' + force: 'Force to reinstall the site' +questions: + profile: 'Select Drupal profile to be installed' + langcode: 'Select language for your Drupal installation' + db-type: 'Select Drupal Database type to be used in install' + site-name: 'Provide your Drupal site name' + site-mail: 'Provide your Drupal site mail' + account-name: 'Provide your Drupal administrator account name' + account-mail: 'Provide your Drupal administrator account mail' + account-pass: 'Provide your Drupal administrator account password' +suggestions: + site-name: 'My awesome site' +messages: + installing: 'Starting Drupal 8 install process' + installed: 'Your Drupal 8 installation was completed successfully' + using-current-database: 'Using "%s" database with name "%s" and user "%s"' + already-installed: 'Drupal is already installed, try dropping your database executing database:drop or install executing site:install --force --no-interaction' + sites-backup: 'The sites.php file has temporarily been renamed to backup.sites.php while Drupal installs.' + sites-restore: 'The backup of sites.php has been been restored to sites.php.' + invalid-multisite: 'Invalid multisite, please create multisite using command drupal multisite:new "%s" "%s"' +examples: + - description: 'Install a drupal project specifying installation type, language code, database configuration, site name, site email and admin credential settings' + execution: | + drupal site:install standard \ + --langcode="en" \ + --db-type="mysql" \ + --db-host="127.0.0.1" \ + --db-name="drupal8" \ + --db-user="u53rn4m3" \ + --db-pass="dbp455" \ + --db-port="3306" \ + --site-name="Drupal 8" \ + --site-mail="admin@example.com" \ + --account-name="admin" \ + --account-mail="admin@example.com" \ + --account-pass="p455w0rd" + diff --git a/console/language/console-en/translations/site.maintenance.yml b/console/language/console-en/translations/site.maintenance.yml new file mode 100644 index 0000000000000000000000000000000000000000..1c535e2819708fcff974d663f1f8ba24191d076f --- /dev/null +++ b/console/language/console-en/translations/site.maintenance.yml @@ -0,0 +1,15 @@ +description: 'Switch site into maintenance mode' +arguments: + mode: 'Site maintenance mode [on/off]' +messages: + maintenance-on: 'Operating in maintenance mode on' + maintenance-off: 'Operating in maintenance mode off' +errors: + invalid-mode: 'Invalid maintenance mode' +examples: + - description: 'Switch on maintenance' + execution: | + drupal site:maintenance on + - description: 'Switch off maintenance' + execution: | + drupal site:maintenance off diff --git a/console/language/console-en/translations/site.mode.yml b/console/language/console-en/translations/site.mode.yml new file mode 100644 index 0000000000000000000000000000000000000000..92deb6479d9070728af4dba5cdf06f0490d91e1b --- /dev/null +++ b/console/language/console-en/translations/site.mode.yml @@ -0,0 +1,25 @@ +description: 'Switch system performance configuration' +arguments: + environment: 'Environment name [dev, prod]' +options: + local: 'Use this option for testing PROD config, but using settings.local.php for connect to your local environment' +messages: + configuration: 'Configuration name' + configuration-key: 'Configuration key' + original: 'Original Value' + updated: 'Override Value' + invalid-env: 'Invalid environment' + new-services-settings: 'New services settings' + service: 'Service' + service-parameter: 'Parameter' + service-value: 'Value' + error-copying-file: 'Error copying file' + error-writing-file: 'Error copying file' + services-file-overwritten: 'Services files "%s" was overwritten' +examples: + - description: 'Switch system to prod' + execution: | + drupal site:mode prod + - description: 'Switch system to dev' + execution: | + drupal site:mode dev diff --git a/console/language/console-en/translations/site.new.yml b/console/language/console-en/translations/site.new.yml new file mode 100644 index 0000000000000000000000000000000000000000..14385f5c822bd01c76706a1574973f67f6147c83 --- /dev/null +++ b/console/language/console-en/translations/site.new.yml @@ -0,0 +1,24 @@ +description: 'Create a new Drupal project' +arguments: + directory: 'Directory where to install Drupal' + version: 'Drupal version to download' +options: + composer: 'Install Drupal with Composer' + latest: 'Use this option to select automatically the latest version' + unstable: 'Use this option to download unstable releases. If not used, you only can install stable releases. Do not use this with latest nor version.' +messages: + select-release: 'Select a core release' + getting-releases: 'Getting releases for Drupal' + downloading: 'Downloading "%s" "%s"' + extracting: 'Extracting files for Drupal "%s"' + no-releases: 'There aren''t any releases available for Drupal' + downloaded: 'Drupal "%s" was downloaded in directory "%s"' + error-copying: 'An error occurred while renaming directory as "%s"' + composer: 'Drupal "%s" was installed successfully using Composer at "%s"' + executing: 'Executing composer command:' + missing-directory: 'Missing directory argument' + missing-version: 'Missing version argument' +questions: + directory: 'Enter the directory name where to install Drupal' + composer-release: 'Please, choose a release for "%s"' + stable: 'Do you want to use stable releases?' diff --git a/console/language/console-en/translations/site.statistics.yml b/console/language/console-en/translations/site.statistics.yml new file mode 100644 index 0000000000000000000000000000000000000000..6375041015cccc7b8b1311b4727bb83d5e8630c6 --- /dev/null +++ b/console/language/console-en/translations/site.statistics.yml @@ -0,0 +1,16 @@ +description: 'Show the current statistics of website.' +help: 'Show the current statistics of website.' +messages: + stat-name: 'Name' + stat-quantity: 'Quantity' + node-type: 'Node:"%s"' + comments: 'Comments' + vocabulary: 'Vocabularies' + taxonomy-terms: 'Taxonomy terms' + files: 'Files' + users: 'Users' + modules-enabled: 'Modules enabled' + modules-disabled: 'Modules disabled' + themes-enabled: 'Themes enabled' + themes-disabled: 'Themes disabled' + views: 'Views (Not system views)' diff --git a/console/language/console-en/translations/site.status.yml b/console/language/console-en/translations/site.status.yml new file mode 100644 index 0000000000000000000000000000000000000000..8d8dffde9951b656461ee65a566a7a6bf41e1505 --- /dev/null +++ b/console/language/console-en/translations/site.status.yml @@ -0,0 +1,28 @@ +description: 'View current Drupal Installation status' +messages: + application: Application + system: 'System Info' + hash-salt: 'Hash salt' + console: 'Drupal Console' + database: 'Database connection' + driver: 'Driver' + host: 'Host' + port: 'Port' + username: 'Username' + password: 'Password' + theme: 'Themes' + connection: 'Connection' + theme-default: 'Default theme' + theme-admin: 'Admin theme' + directory: 'Directories' + directory-root: 'Site root directory' + directory-temporary: 'Site temporary directory' + directory-theme-default: 'Default theme directory' + directory-theme-admin: 'Admin theme directory' + current-version: 'Current Drupal ("%s")' + not-installed: 'Drupal is not installed' +examples: + - description: 'Get drupal installation status specifying the output format as table' + execution: | + drupal site:status \ + --format="table" diff --git a/console/language/console-en/translations/state.delete.yml b/console/language/console-en/translations/state.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..eab626fac957fad9b4081ca43a84ac67887e289e --- /dev/null +++ b/console/language/console-en/translations/state.delete.yml @@ -0,0 +1,11 @@ +description: 'Delete State' +arguments: + name: 'State name.' +messages: + enter-name: 'State name must contain a value.' + state-not-exists: 'The state "%s" does not exist.' + deleted: 'State "%s" sucessfully deleted.' +examples: + - description: 'Delete state specifying the state name' + execution: | + drupal state:delete comment.maintain_entity_statistics diff --git a/console/language/console-en/translations/state.override.yml b/console/language/console-en/translations/state.override.yml new file mode 100644 index 0000000000000000000000000000000000000000..8511d1a43c5176bb22e1ab03c830169c0403489f --- /dev/null +++ b/console/language/console-en/translations/state.override.yml @@ -0,0 +1,16 @@ +description: 'Override a State key.' +help: 'Override a State key.' +arguments: + key: 'The State key to override.' + value: 'The State value to set.' +messages: + key: 'State key' + original: 'Original value' + override: 'Override value' +errors: + no-key: 'You must provide a State key to override.' + no-value: 'You must provide a State value to set.' +examples: + - description: 'Override state value specifying the state name and the new value' + execution: | + drupal state:override comment.node_comment_statistics_scale "!!float 1" diff --git a/console/language/console-en/translations/taxonomy.term.delete.yml b/console/language/console-en/translations/taxonomy.term.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..5ebd28c54017f78ac1075460b2809876aa4e4726 --- /dev/null +++ b/console/language/console-en/translations/taxonomy.term.delete.yml @@ -0,0 +1,11 @@ +description: 'Delete taxonomy terms from a vocabulary' +vid: 'Enter vocabulary id' +help: 'This command takes the VID as argument or all which will delete every term from every vocabulary' +messages: + nothing: 'All taxonomy terms from "%s" vocabulary already deleted.' + processing: 'Deleting "%s" taxonomy term.' + invalid-vocabulary: 'Invalid "%s" vocabulary.' +examples: + - description: 'Delete all terms of the "tags" vocabulary' + execution: | + drupal taxonomy:term:delete tags diff --git a/console/language/console-en/translations/test.run.yml b/console/language/console-en/translations/test.run.yml new file mode 100644 index 0000000000000000000000000000000000000000..70efff5520f4385f6435391c2d9a75ab6bbb562f --- /dev/null +++ b/console/language/console-en/translations/test.run.yml @@ -0,0 +1,23 @@ +description: 'Run Test unit from tests available for application' +arguments: + test-class: 'Test Class' + test-methods: 'Test method(s) to be run' + url: 'Test url' +messages: + missing-dependency: 'Test can''t be executed due a missing dependency' + phpunit-pending: 'Logic to execute PHPUnit test is not implemented yet.' + starting-test: 'Starting test' + test-duration: 'Test duration' + test-pass: 'Test passes' + test-fail: 'Test fails' + test-exception: 'Test exceptions' + test-debug: 'Test debugs' + url-required: 'URL option is required to run test' + test-summary: 'Test Summary' + group: Group + status: Status + file: File + method: Method + line: Line + message: Message + invalid-class: 'Testing class "%s" does not exist.' diff --git a/console/language/console-en/translations/theme.download.yml b/console/language/console-en/translations/theme.download.yml new file mode 100644 index 0000000000000000000000000000000000000000..6fff4d5d08e98102f3e5be37ae34826448e59ed7 --- /dev/null +++ b/console/language/console-en/translations/theme.download.yml @@ -0,0 +1,18 @@ +description: 'Download theme in application' +arguments: + version: 'Theme version i.e 1.x-dev' + theme: 'the Theme name' +options: + composer: 'Use --composer option for manage the theme download with Composer' +messages: + no-releases: 'There aren''t any releases for theme "%s"' + getting-releases: 'Getting releases for theme "%s"' + downloading: 'Downloading theme "%s" release "%s"' + downloaded: 'Theme "%s" version "%s" was downloaded successfully at "%s"' + select-release: 'Please select your favorite release' + outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.' + error-creating-folder: 'Error creating folder "%s", please check your permissions' +examples: + - description: 'Download theme specifying name and version' + execution: | + drupal theme:download Alina 7.x-1.2 diff --git a/console/language/console-en/translations/theme.install.yml b/console/language/console-en/translations/theme.install.yml new file mode 100644 index 0000000000000000000000000000000000000000..44605a78d300c45a71707b4c3939725e01787bcf --- /dev/null +++ b/console/language/console-en/translations/theme.install.yml @@ -0,0 +1,25 @@ +description: 'Install theme or themes in the application' +questions: + theme: 'theme name (press <return> to stop adding themes)' + invalid-theme: 'Invalid theme "%s"' +options: + theme: 'theme or themes to be installed should be separated by a space' + overwrite-config: 'Overwrite active configuration if necessary' + set-default: 'Set theme as default theme' +messages: + no-themes: 'You must provide theme or themes to install.' + themes-missing: 'Unable to install themes "%s" due they aren''t available' + theme-missing: 'Unable to install theme "%s" due is not available' + missing-dependencies: 'Unable to install themes "%s" due to missing dependencies "%s"' + themes-nothing: 'Nothing to do. All themes "%s" are already installed' + theme-nothing: 'Nothing to do. Theme "%s" is already installed' + dependencies: 'There are some unmet dependencies: "%s"?' + theme-success: 'The "%s" theme has been installed successfully' + themes-success: 'The themes "%s" were installed successfully' + theme-default-success: 'The "%s" theme has been installed successfully as default theme' + disabled-themes: 'Only uninstalled themes will be listed in autocomplete' + invalid-theme-default: 'Option default is only valid for one theme' +examples: + - description: 'Install theme specifying the name' + execution: | + drupal theme:install mytheme diff --git a/console/language/console-en/translations/theme.path.yml b/console/language/console-en/translations/theme.path.yml new file mode 100644 index 0000000000000000000000000000000000000000..07a0593a2a8cba36e183f0169feb8f3613312fb8 --- /dev/null +++ b/console/language/console-en/translations/theme.path.yml @@ -0,0 +1,11 @@ +description: 'Returns the relative path to the theme (or absolute path)' +arguments: + theme: 'Theme name' +options: + absolute: 'Return theme absolute path' +messages: + invalid-theme-name: 'Invalid theme name: "%s"' +examples: + - description: 'Get the path of mytheme' + execution: | + drupal theme:path mytheme diff --git a/console/language/console-en/translations/theme.uninstall.yml b/console/language/console-en/translations/theme.uninstall.yml new file mode 100644 index 0000000000000000000000000000000000000000..36cb10a11dee6195b1eaac5c6e95481750af9c25 --- /dev/null +++ b/console/language/console-en/translations/theme.uninstall.yml @@ -0,0 +1,24 @@ +description: 'Uninstall theme or themes in the application' +questions: + theme: 'theme name (press <return> to stop adding themes)' + invalid-theme: 'Invalid theme "%s"' +options: + theme: 'theme or themes to be uninstalled should be separated by a space' +messages: + no-themes: 'You must provide theme or themes to uninstall.' + themes-missing: 'Unable to uninstall themes "%s", because they aren''t available' + theme-missing: 'Unable to uninstall theme "%s", because it is not available' + missing-dependencies: 'Unable to uninstall themes "%s" due to missing dependencies "%s"' + themes-nothing: 'Nothing to do. All themes are already uninstalled: "%s"' + theme-nothing: 'Nothing to do. Theme "%s" is already uninstalled' + dependencies: 'There are some unmet dependencies: "%s"?' + theme-success: 'The "%s" theme has been uninstalled successfully' + themes-success: 'The themes "%s" were uninstalled successfully' + installed-themes: 'Only installed themes will be listed in autocomplete' + invalid-theme-default: 'Option default is only valid for one theme' + error-default-theme: 'Theme "%s" is the default theme and cannot be uninstalled.' + error-admin-theme: 'Theme "%s" is the admin theme and cannot be uninstalled.' +examples: + - description: 'Uninstall theme specifying the name' + execution: | + drupal theme:uninstall mytheme diff --git a/console/language/console-en/translations/update.entities.yml b/console/language/console-en/translations/update.entities.yml new file mode 100644 index 0000000000000000000000000000000000000000..9be4b3631fe50526cf2deb6ce02cffb094d01c02 --- /dev/null +++ b/console/language/console-en/translations/update.entities.yml @@ -0,0 +1,9 @@ +description: 'Applying Entity Updates' +messages: + start: 'Starting the entity updates' + end: 'Finished the entity updates' + error: 'Error on Entity Updates' +examples: + - description: 'Update entities' + execution: | + drupal update:entities diff --git a/console/language/console-en/translations/update.execute.yml b/console/language/console-en/translations/update.execute.yml new file mode 100644 index 0000000000000000000000000000000000000000..590a12153ca536238042ac34ec9bb76f180a558b --- /dev/null +++ b/console/language/console-en/translations/update.execute.yml @@ -0,0 +1,17 @@ +description: 'Execute a specific Update N function in a module, or execute all' +arguments: + module: 'Module name' + update-n: 'Specific Update N function to be executed' +messages: + no-module-updates: 'There aren''t updates available for module "%s"' + executing-update: 'Executing update function "%s" of module "%s"' + module-update-function-not-found: 'Module "%s" doesn''t have a function update for "%s"' + executing-required-previous-updates: 'Executing required previous updates' + no-pending-updates: 'There aren''t updates available' +examples: + - description: 'Execute all updates' + execution: | + drupal update:execute + - description: 'Execute updates for system module' + execution: | + drupal update:execute system diff --git a/console/language/console-en/translations/user.create.yml b/console/language/console-en/translations/user.create.yml new file mode 100644 index 0000000000000000000000000000000000000000..0adc15a1c286e0bb29ea42093622fb281d0a2f8a --- /dev/null +++ b/console/language/console-en/translations/user.create.yml @@ -0,0 +1,37 @@ +description: 'Create users for the application' +help: 'The <info>user:create</info> command helps you create users.' +welcome: 'Welcome to the Drupal user create' +options: + username: 'User name to be created' + password: 'User password' + roles: 'User roles' + email: 'User email' + status: 'User status' +questions: + username: 'User name to be created' + password: 'User password (empty to auto-generate)' + roles: 'User roles (empty to skip)' + email: 'User e-mail (empty to skip)' + status: 'User status (empty to skip)' +messages: + user-id: 'User ID' + username: 'Username' + password: 'Password' + email: 'E-mail' + roles: 'Roles' + created: 'Created' + status: 'Status' + user-created: 'User "%s" was created successfully' +examples: + - description: 'Create user specifying username, password, role, email and status' + execution: | + drupal user:create john p455w0rd \ + --roles='authenticated' \ + --email="john@anexusit.com" \ + --status="1" + - description: 'Create admin user specifying username, password, role, email and status' + execution: | + drupal user:create doe p455w0rd \ + --roles='administrator' \ + --email="doe@anexusit.com" \ + --status="1" diff --git a/console/language/console-en/translations/user.delete.yml b/console/language/console-en/translations/user.delete.yml new file mode 100644 index 0000000000000000000000000000000000000000..f186320f9053371385cfecd24389dfd5a05983d8 --- /dev/null +++ b/console/language/console-en/translations/user.delete.yml @@ -0,0 +1,29 @@ +description: 'Delete users from the application' +help: 'The <info>user:delete</info> command helps you delete users.' +welcome: 'Welcome to the Drupal user delete' +options: + user: 'User name/id to be deleted' + roles: 'Users with the listed roles to be deleted' +questions: + user: 'User name/id to be deleted (empty to skip)' + roles: 'Select role(s) associated with users to be deleted' +messages: + user-id: 'User ID' + username: 'Username' + user-deleted: 'User "%s" was deleted successfully' + users-deleted: '"%s" users were deleted successfully' +errors: + invalid-user: 'User name/id "%s" is invalid' +examples: + - description: 'Delete user with the id number 2' + execution: | + drupal user:delete \ + --user="2" + - description: 'Delete user with the username "jmolivas"' + execution: | + drupal user:delete \ + --user="jmolivas" + - description: 'Delete users with the role "authenticated"' + execution: | + drupal user:delete \ + --role="authenticated" diff --git a/console/language/console-en/translations/user.login.clear.attempts.yml b/console/language/console-en/translations/user.login.clear.attempts.yml new file mode 100644 index 0000000000000000000000000000000000000000..14402a60ab68b6518c9c760775fae3acb3fb5191 --- /dev/null +++ b/console/language/console-en/translations/user.login.clear.attempts.yml @@ -0,0 +1,11 @@ +description: 'Clear failed login attempts for an account.' +help: 'The <info>user:login:clear:attempts</info> command resets the failed login attempts for an account.' +arguments: + user: 'User name/id.' +questions: + user: 'Enter User name/id' +messages: + successful: 'Login attempts were successfully cleared for user: "%s".' +errors: + invalid-user: 'Cannot load user entity using: "%s".' + no-flood: 'No flood table on the system.' diff --git a/console/language/console-en/translations/user.login.url.yml b/console/language/console-en/translations/user.login.url.yml new file mode 100644 index 0000000000000000000000000000000000000000..174e98e2201f90647e97d31fc4add1ed91261cc9 --- /dev/null +++ b/console/language/console-en/translations/user.login.url.yml @@ -0,0 +1,14 @@ +description: 'Returns a one-time user login url.' +options: + user: 'User name/id.' +messages: + url: 'One-time login for "%s"' +questions: + user: 'Enter User name/id' +errors: + invalid-user: 'Cannot load user entity using: "%s".' +examples: + - description: 'Get one time login url for user id 10' + execution: drupal user:login:url 10 + - description: 'Get one time login url for username jmolivas' + execution: drupal user:login:url jmolivas \ No newline at end of file diff --git a/console/language/console-en/translations/user.password.hash.yml b/console/language/console-en/translations/user.password.hash.yml new file mode 100644 index 0000000000000000000000000000000000000000..a37d9a00aa5bfac209d0b7913a7f68e5f0c3ac39 --- /dev/null +++ b/console/language/console-en/translations/user.password.hash.yml @@ -0,0 +1,17 @@ +description: 'Generate a hash from a plaintext password.' +help: 'The <info>password:hash</info> command helps you to generate hashes password from plaintext passwords.' +welcome: 'Welcome to the Drupal password hash generator' +options: + password: 'Password(s) in text format' +questions: + invalid-pass: 'Password can''t be empty' + password: 'Enter password' + other-password: 'Other password (press <return> to stop adding passwords)' +messages: + password: Password + hash: Hash +errors: null +examples: + - description: 'Get hash of the word "p455w0rd"' + execution: | + drupal user:password:hash p455w0rd diff --git a/console/language/console-en/translations/user.password.reset.yml b/console/language/console-en/translations/user.password.reset.yml new file mode 100644 index 0000000000000000000000000000000000000000..60f63ea0da2d360b6c398d33216e473c4c78886f --- /dev/null +++ b/console/language/console-en/translations/user.password.reset.yml @@ -0,0 +1,24 @@ +description: 'Reset password for a specific user.' +help: 'The <info>password:reset</info> command helps you to reset password for a specific user.' +welcome: 'Welcome to the Drupal password reset' +options: + password: 'Password in text format' + user: 'User name/id' +questions: + invalid-user: 'Invalid user name/id "%s", user id must be an integer' + invalid-pass: 'Password can''t be empty' + user: 'Enter User name/id' + password: 'Enter password' + other-password: 'Other password (press <return> to stop adding passwords)' +messages: + reset-successful: 'Password was updated successfully for user id "%s"' +errors: + invalid-user: 'Invalid user name/id "%s"' + empty-password: 'Password can not be empty' +examples: + - description: 'Update password specifying the user id and the new password' + execution: | + drupal user:password:reset 2 p455w0rd + - description: 'Update password specifying the user jmolivas and the new password' + execution: | + drupal user:password:reset jmolivas p455w0rd diff --git a/console/language/console-en/translations/user.role.yml b/console/language/console-en/translations/user.role.yml new file mode 100644 index 0000000000000000000000000000000000000000..36fff83d4886d2c34203744b9cdbbff8c920e093 --- /dev/null +++ b/console/language/console-en/translations/user.role.yml @@ -0,0 +1,20 @@ +description: 'Adds/removes a role for a given user' +help: 'The <info>user:role</info> command helps you to add or remove a role to a user.' +welcome: 'Welcome to the Drupal user rule' +arguments: + roles: 'Roles to add or remove. Please provide the machine name (only one)' + operation: 'Add or remove' + user: 'The affected user (only one)' +messages: + bad-arguments: 'Some arguments are missing! Please, provide all the following arguments: [add/remove] [username] [role]' + no-user-found: 'Username "%s" was not found!' + no-role-found: 'Role "%s" was not found!' + add-success: 'Username %1$s was added role %2$s sucessfully' + remove-success: 'Username %1$s was removed role %2$s sucessfully' +examples: + - description: 'Add administrator role to the user admin specifying the username and the role' + execution: | + drupal user:role add admin administrator + - description: 'Remove administrator role from the user admin specifying the username and the role' + execution: | + drupal user:role remove admin administrator diff --git a/console/language/console-en/translations/views.disable.yml b/console/language/console-en/translations/views.disable.yml new file mode 100644 index 0000000000000000000000000000000000000000..e8dd354d2565e01e693255de8ef09b35ab7154f7 --- /dev/null +++ b/console/language/console-en/translations/views.disable.yml @@ -0,0 +1,10 @@ +description: 'Disable a View' +messages: + disabled-successfully: 'View "%s" was disabled successfully.' +examples: + - description: 'Disable content view' + execution: | + drupal views:disable content + - description: 'Disable frontpage view' + execution: | + drupal views:disable frontpage diff --git a/console/language/console-en/translations/views.enable.yml b/console/language/console-en/translations/views.enable.yml new file mode 100644 index 0000000000000000000000000000000000000000..4531768b7fb954020652cc700573f4d220368887 --- /dev/null +++ b/console/language/console-en/translations/views.enable.yml @@ -0,0 +1,10 @@ +description: 'Enable a View' +messages: + enabled-successfully: 'View "%s" was enabled successfully.' +examples: + - description: 'Enable content view' + execution: | + drupal views:enable content + - description: 'Enable frontpage view' + execution: | + drupal views:enable frontpage diff --git a/vendor/asm89/stack-cors/composer.json b/vendor/asm89/stack-cors/composer.json index b629bf199a2ebd0dd2d4c910aa797bd1e866221e..643053868e4722b860d4410276396b122f823d15 100644 --- a/vendor/asm89/stack-cors/composer.json +++ b/vendor/asm89/stack-cors/composer.json @@ -13,8 +13,8 @@ ], "require": { "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", - "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" + "symfony/http-foundation": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0" }, "require-dev": { "phpunit/phpunit": "^5.0 || ^4.8.10", diff --git a/vendor/asm89/stack-cors/src/Asm89/Stack/CorsService.php b/vendor/asm89/stack-cors/src/Asm89/Stack/CorsService.php index 3ce324a922cfa8c8ee15ba90bac247816fc72d3e..ccf5d58cae089486e32b54299c5306108dd9c194 100644 --- a/vendor/asm89/stack-cors/src/Asm89/Stack/CorsService.php +++ b/vendor/asm89/stack-cors/src/Asm89/Stack/CorsService.php @@ -130,8 +130,6 @@ private function buildPreflightCheckResponse(Request $request) : implode(', ', $this->options['allowedHeaders']); $response->headers->set('Access-Control-Allow-Headers', $allowHeaders); - $response->setStatusCode(204); - return $response; } diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 8034578e5a16731de95ebf59240c12d41bf6cd80..78ca9e36ed5b43631d6da96ebd6cc3c8e9c2bc5a 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -170,6 +170,7 @@ 'Composer\\Installers\\BonefishInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BonefishInstaller.php', 'Composer\\Installers\\CakePHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php', 'Composer\\Installers\\ChefInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ChefInstaller.php', + 'Composer\\Installers\\CiviCrmInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php', 'Composer\\Installers\\ClanCatsFrameworkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php', 'Composer\\Installers\\CockpitInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CockpitInstaller.php', 'Composer\\Installers\\CodeIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php', @@ -177,6 +178,7 @@ 'Composer\\Installers\\CraftInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CraftInstaller.php', 'Composer\\Installers\\CroogoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php', 'Composer\\Installers\\DecibelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php', + 'Composer\\Installers\\DframeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DframeInstaller.php', 'Composer\\Installers\\DokuWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php', 'Composer\\Installers\\DolibarrInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php', 'Composer\\Installers\\DrupalInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php', @@ -194,6 +196,7 @@ 'Composer\\Installers\\JoomlaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php', 'Composer\\Installers\\KanboardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KanboardInstaller.php', 'Composer\\Installers\\KirbyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KirbyInstaller.php', + 'Composer\\Installers\\KnownInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KnownInstaller.php', 'Composer\\Installers\\KodiCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php', 'Composer\\Installers\\KohanaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php', 'Composer\\Installers\\LanManagementSystemInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php', @@ -228,6 +231,7 @@ 'Composer\\Installers\\PxcmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php', 'Composer\\Installers\\RadPHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php', 'Composer\\Installers\\ReIndexInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php', + 'Composer\\Installers\\Redaxo5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php', 'Composer\\Installers\\RedaxoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php', 'Composer\\Installers\\RoundcubeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php', 'Composer\\Installers\\SMFInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php', @@ -238,6 +242,7 @@ 'Composer\\Installers\\Symfony1Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Symfony1Installer.php', 'Composer\\Installers\\TYPO3CmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php', 'Composer\\Installers\\TYPO3FlowInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php', + 'Composer\\Installers\\TaoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TaoInstaller.php', 'Composer\\Installers\\TheliaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php', 'Composer\\Installers\\TuskInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php', 'Composer\\Installers\\UserFrostingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php', @@ -2641,6 +2646,7 @@ 'Drupal\\Core\\Template\\Attribute' => $baseDir . '/web/core/lib/Drupal/Core/Template/Attribute.php', 'Drupal\\Core\\Template\\AttributeArray' => $baseDir . '/web/core/lib/Drupal/Core/Template/AttributeArray.php', 'Drupal\\Core\\Template\\AttributeBoolean' => $baseDir . '/web/core/lib/Drupal/Core/Template/AttributeBoolean.php', + 'Drupal\\Core\\Template\\AttributeHelper' => $baseDir . '/web/core/lib/Drupal/Core/Template/AttributeHelper.php', 'Drupal\\Core\\Template\\AttributeString' => $baseDir . '/web/core/lib/Drupal/Core/Template/AttributeString.php', 'Drupal\\Core\\Template\\AttributeValueBase' => $baseDir . '/web/core/lib/Drupal/Core/Template/AttributeValueBase.php', 'Drupal\\Core\\Template\\Loader\\FilesystemLoader' => $baseDir . '/web/core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php', @@ -3175,7 +3181,6 @@ 'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php', 'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php', 'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php', - 'GuzzleHttp\\Exception\\InvalidArgumentException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', 'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php', 'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php', 'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php', @@ -3303,6 +3308,7 @@ 'PEAR_Error' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php', 'PEAR_ErrorStack' => $vendorDir . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php', 'PEAR_Exception' => $vendorDir . '/pear/pear_exception/PEAR/Exception.php', + 'PEAR_ExceptionTest' => $vendorDir . '/pear/pear_exception/tests/PEAR/ExceptionTest.php', 'PantheonSystems\\CDNBehatHelpers\\AgeTracker' => $baseDir . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/AgeTracker.php', 'PantheonSystems\\CDNBehatHelpers\\Contexts\\FeatureContext' => $baseDir . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/Contexts/FeatureContext.php', 'PantheonSystems\\CDNBehatHelpers\\tests\\AgeTrackerTest' => $baseDir . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/tests/AgeTrackerTest.php', @@ -5261,11 +5267,9 @@ 'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php', 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', 'Symfony\\Polyfill\\Iconv\\Iconv' => $vendorDir . '/symfony/polyfill-iconv/Iconv.php', - 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => $vendorDir . '/symfony/polyfill-intl-idn/Idn.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', 'Symfony\\Polyfill\\Php56\\Php56' => $vendorDir . '/symfony/polyfill-php56/Php56.php', 'Symfony\\Polyfill\\Php70\\Php70' => $vendorDir . '/symfony/polyfill-php70/Php70.php', - 'Symfony\\Polyfill\\Php72\\Php72' => $vendorDir . '/symfony/polyfill-php72/Php72.php', 'Symfony\\Polyfill\\Util\\Binary' => $vendorDir . '/symfony/polyfill-util/Binary.php', 'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryNoFuncOverload.php', 'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryOnFuncOverload.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 67c3981894ea6501de692c302d7961f8285fdac5..e27cd9d82653c9f7eec892bc16fc0ec312d31d29 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -9,10 +9,8 @@ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', 'bd9634f2d41831496de0d3dfe4c94881' => $vendorDir . '/symfony/polyfill-php56/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', - 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', + '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index 8c5b9f67e1c87a7e2298c6b339ebf4b67b531ad8..95bd206b1e0447cd5cba7fb41cbf1e1fd7af014a 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -10,6 +10,7 @@ 'Twig_' => array($vendorDir . '/twig/twig/lib'), 'Stack' => array($vendorDir . '/stack/builder/src'), 'SAML2\\' => array($vendorDir . '/simplesamlphp/saml2/src'), + 'PEAR' => array($vendorDir . '/pear/pear_exception'), 'EasyRdf_' => array($vendorDir . '/easyrdf/easyrdf/lib'), 'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/lib'), 'Dflydev\\PlaceholderResolver' => array($vendorDir . '/dflydev/placeholder-resolver/src'), diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 2c75455622cc31a04dfc3770b353a2071077a93b..1cff6ac8527cd41ace1e4588ad90ca5132fe1984 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -21,11 +21,9 @@ 'Twig\\' => array($vendorDir . '/twig/twig/src'), 'TYPO3\\PharStreamWrapper\\' => array($vendorDir . '/typo3/phar-stream-wrapper/src'), 'Symfony\\Polyfill\\Util\\' => array($vendorDir . '/symfony/polyfill-util'), - 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), 'Symfony\\Polyfill\\Php70\\' => array($vendorDir . '/symfony/polyfill-php70'), 'Symfony\\Polyfill\\Php56\\' => array($vendorDir . '/symfony/polyfill-php56'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index ba184a4129c265e33990e5285024c024f1ef5b92..840c37d9a690d886be39f97614c52fff17b65d20 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -10,10 +10,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '023d27dca8066ef29e6739335ea73bad' => __DIR__ . '/..' . '/symfony/polyfill-php70/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', 'bd9634f2d41831496de0d3dfe4c94881' => __DIR__ . '/..' . '/symfony/polyfill-php56/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', - 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', + '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', @@ -73,11 +71,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'S' => array ( 'Symfony\\Polyfill\\Util\\' => 22, - 'Symfony\\Polyfill\\Php72\\' => 23, 'Symfony\\Polyfill\\Php70\\' => 23, 'Symfony\\Polyfill\\Php56\\' => 23, 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, 'Symfony\\Polyfill\\Iconv\\' => 23, 'Symfony\\Polyfill\\Ctype\\' => 23, 'Symfony\\Component\\Yaml\\' => 23, @@ -256,10 +252,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-util', ), - 'Symfony\\Polyfill\\Php72\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php72', - ), 'Symfony\\Polyfill\\Php70\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php70', @@ -272,10 +264,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', ), - 'Symfony\\Polyfill\\Intl\\Idn\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', - ), 'Symfony\\Polyfill\\Iconv\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-iconv', @@ -613,6 +601,13 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 0 => __DIR__ . '/..' . '/simplesamlphp/saml2/src', ), ), + 'P' => + array ( + 'PEAR' => + array ( + 0 => __DIR__ . '/..' . '/pear/pear_exception', + ), + ), 'E' => array ( 'EasyRdf_' => @@ -828,6 +823,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Composer\\Installers\\BonefishInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BonefishInstaller.php', 'Composer\\Installers\\CakePHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php', 'Composer\\Installers\\ChefInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ChefInstaller.php', + 'Composer\\Installers\\CiviCrmInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php', 'Composer\\Installers\\ClanCatsFrameworkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php', 'Composer\\Installers\\CockpitInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CockpitInstaller.php', 'Composer\\Installers\\CodeIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php', @@ -835,6 +831,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Composer\\Installers\\CraftInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CraftInstaller.php', 'Composer\\Installers\\CroogoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CroogoInstaller.php', 'Composer\\Installers\\DecibelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DecibelInstaller.php', + 'Composer\\Installers\\DframeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DframeInstaller.php', 'Composer\\Installers\\DokuWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php', 'Composer\\Installers\\DolibarrInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php', 'Composer\\Installers\\DrupalInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DrupalInstaller.php', @@ -852,6 +849,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Composer\\Installers\\JoomlaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php', 'Composer\\Installers\\KanboardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KanboardInstaller.php', 'Composer\\Installers\\KirbyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KirbyInstaller.php', + 'Composer\\Installers\\KnownInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KnownInstaller.php', 'Composer\\Installers\\KodiCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php', 'Composer\\Installers\\KohanaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KohanaInstaller.php', 'Composer\\Installers\\LanManagementSystemInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php', @@ -886,6 +884,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Composer\\Installers\\PxcmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php', 'Composer\\Installers\\RadPHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php', 'Composer\\Installers\\ReIndexInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php', + 'Composer\\Installers\\Redaxo5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php', 'Composer\\Installers\\RedaxoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php', 'Composer\\Installers\\RoundcubeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php', 'Composer\\Installers\\SMFInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SMFInstaller.php', @@ -896,6 +895,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Composer\\Installers\\Symfony1Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Symfony1Installer.php', 'Composer\\Installers\\TYPO3CmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php', 'Composer\\Installers\\TYPO3FlowInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php', + 'Composer\\Installers\\TaoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TaoInstaller.php', 'Composer\\Installers\\TheliaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TheliaInstaller.php', 'Composer\\Installers\\TuskInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TuskInstaller.php', 'Composer\\Installers\\UserFrostingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php', @@ -3299,6 +3299,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Drupal\\Core\\Template\\Attribute' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/Attribute.php', 'Drupal\\Core\\Template\\AttributeArray' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/AttributeArray.php', 'Drupal\\Core\\Template\\AttributeBoolean' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/AttributeBoolean.php', + 'Drupal\\Core\\Template\\AttributeHelper' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/AttributeHelper.php', 'Drupal\\Core\\Template\\AttributeString' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/AttributeString.php', 'Drupal\\Core\\Template\\AttributeValueBase' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/AttributeValueBase.php', 'Drupal\\Core\\Template\\Loader\\FilesystemLoader' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php', @@ -3833,7 +3834,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php', 'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php', 'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php', - 'GuzzleHttp\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', 'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php', 'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php', 'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php', @@ -3961,6 +3961,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'PEAR_Error' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php', 'PEAR_ErrorStack' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php', 'PEAR_Exception' => __DIR__ . '/..' . '/pear/pear_exception/PEAR/Exception.php', + 'PEAR_ExceptionTest' => __DIR__ . '/..' . '/pear/pear_exception/tests/PEAR/ExceptionTest.php', 'PantheonSystems\\CDNBehatHelpers\\AgeTracker' => __DIR__ . '/../..' . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/AgeTracker.php', 'PantheonSystems\\CDNBehatHelpers\\Contexts\\FeatureContext' => __DIR__ . '/../..' . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/Contexts/FeatureContext.php', 'PantheonSystems\\CDNBehatHelpers\\tests\\AgeTrackerTest' => __DIR__ . '/../..' . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/tests/AgeTrackerTest.php', @@ -5919,11 +5920,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php', 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', 'Symfony\\Polyfill\\Iconv\\Iconv' => __DIR__ . '/..' . '/symfony/polyfill-iconv/Iconv.php', - 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Idn.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', 'Symfony\\Polyfill\\Php56\\Php56' => __DIR__ . '/..' . '/symfony/polyfill-php56/Php56.php', 'Symfony\\Polyfill\\Php70\\Php70' => __DIR__ . '/..' . '/symfony/polyfill-php70/Php70.php', - 'Symfony\\Polyfill\\Php72\\Php72' => __DIR__ . '/..' . '/symfony/polyfill-php72/Php72.php', 'Symfony\\Polyfill\\Util\\Binary' => __DIR__ . '/..' . '/symfony/polyfill-util/Binary.php', 'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryNoFuncOverload.php', 'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryOnFuncOverload.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 115ff05a45c0f69fc1bb0eed26531064b38f1aae..430e46999fcc1ee1bdf7a22e9b2f41be081372bf 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -67,29 +67,29 @@ }, { "name": "asm89/stack-cors", - "version": "1.3.0", - "version_normalized": "1.3.0.0", + "version": "1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", "url": "https://github.com/asm89/stack-cors.git", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" + "reference": "c163e2b614550aedcf71165db2473d936abbced6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/c163e2b614550aedcf71165db2473d936abbced6", + "reference": "c163e2b614550aedcf71165db2473d936abbced6", "shasum": "" }, "require": { "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", - "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" + "symfony/http-foundation": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0" }, "require-dev": { "phpunit/phpunit": "^5.0 || ^4.8.10", "squizlabs/php_codesniffer": "^2.3" }, - "time": "2019-12-24T22:41:47+00:00", + "time": "2017-12-20T14:37:45+00:00", "type": "library", "extra": { "branch-alias": { @@ -304,17 +304,17 @@ }, { "name": "composer/installers", - "version": "v1.5.0", - "version_normalized": "1.5.0.0", + "version": "v1.7.0", + "version_normalized": "1.7.0.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "049797d727261bf27f2690430d935067710049c2" + "reference": "141b272484481432cda342727a427dc1e206bfa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/049797d727261bf27f2690430d935067710049c2", - "reference": "049797d727261bf27f2690430d935067710049c2", + "url": "https://api.github.com/repos/composer/installers/zipball/141b272484481432cda342727a427dc1e206bfa0", + "reference": "141b272484481432cda342727a427dc1e206bfa0", "shasum": "" }, "require": { @@ -328,7 +328,7 @@ "composer/composer": "1.0.*@dev", "phpunit/phpunit": "^4.8.36" }, - "time": "2017-12-29T09:13:20+00:00", + "time": "2019-08-12T15:00:31+00:00", "type": "composer-plugin", "extra": { "class": "Composer\\Installers\\Plugin", @@ -372,6 +372,7 @@ "RadPHP", "SMF", "Thelia", + "Whmcs", "WolfCMS", "agl", "aimeos", @@ -394,6 +395,7 @@ "installer", "itop", "joomla", + "known", "kohana", "laravel", "lavalite", @@ -426,26 +428,27 @@ }, { "name": "composer/semver", - "version": "1.5.1", - "version_normalized": "1.5.1.0", + "version": "1.5.0", + "version_normalized": "1.5.0.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, - "time": "2020-01-13T12:06:48+00:00", + "time": "2019-03-19T17:25:45+00:00", "type": "library", "extra": { "branch-alias": { @@ -3493,17 +3496,17 @@ }, { "name": "drupal/core", - "version": "8.8.2", - "version_normalized": "8.8.2.0", + "version": "8.8.4", + "version_normalized": "8.8.4.0", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "f997857003276c2ae6d27db30f0eab9c7dd10e62" + "reference": "34e59fcf702c1b3c497bbd6e92e68e546c5d15b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/f997857003276c2ae6d27db30f0eab9c7dd10e62", - "reference": "f997857003276c2ae6d27db30f0eab9c7dd10e62", + "url": "https://api.github.com/repos/drupal/core/zipball/34e59fcf702c1b3c497bbd6e92e68e546c5d15b8", + "reference": "34e59fcf702c1b3c497bbd6e92e68e546c5d15b8", "shasum": "" }, "require": { @@ -3669,7 +3672,7 @@ "drupal/workflows": "self.version", "drupal/workspaces": "self.version" }, - "time": "2020-02-01T19:51:15+00:00", + "time": "2020-03-18T16:26:33+00:00", "type": "drupal-core", "extra": { "drupal-scaffold": { @@ -3728,6 +3731,87 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications." }, + { + "name": "drupal/core-recommended", + "version": "8.8.4", + "version_normalized": "8.8.4.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-recommended.git", + "reference": "4155bff03954bae498029899f44e8adf697b20e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/4155bff03954bae498029899f44e8adf697b20e6", + "reference": "4155bff03954bae498029899f44e8adf697b20e6", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "1.2.0", + "composer/installers": "v1.7.0", + "composer/semver": "1.5.0", + "doctrine/annotations": "v1.4.0", + "doctrine/cache": "v1.6.2", + "doctrine/collections": "v1.4.0", + "doctrine/common": "v2.7.3", + "doctrine/inflector": "v1.2.0", + "doctrine/lexer": "1.0.2", + "drupal/core": "8.8.4", + "easyrdf/easyrdf": "0.9.1", + "egulias/email-validator": "2.1.11", + "guzzlehttp/guzzle": "6.3.3", + "guzzlehttp/promises": "v1.3.1", + "guzzlehttp/psr7": "1.6.1", + "masterminds/html5": "2.3.0", + "paragonie/random_compat": "v9.99.99", + "pear/archive_tar": "1.4.9", + "pear/console_getopt": "v1.4.2", + "pear/pear-core-minimal": "v1.10.9", + "pear/pear_exception": "v1.0.0", + "psr/container": "1.0.0", + "psr/http-message": "1.0.1", + "psr/log": "1.1.0", + "ralouphie/getallheaders": "3.0.3", + "stack/builder": "v1.0.5", + "symfony-cmf/routing": "1.4.1", + "symfony/class-loader": "v3.4.35", + "symfony/console": "v3.4.35", + "symfony/debug": "v3.4.35", + "symfony/dependency-injection": "v3.4.35", + "symfony/event-dispatcher": "v3.4.35", + "symfony/http-foundation": "v3.4.35", + "symfony/http-kernel": "v3.4.35", + "symfony/polyfill-ctype": "v1.12.0", + "symfony/polyfill-iconv": "v1.12.0", + "symfony/polyfill-mbstring": "v1.12.0", + "symfony/polyfill-php56": "v1.12.0", + "symfony/polyfill-php70": "v1.12.0", + "symfony/polyfill-util": "v1.12.0", + "symfony/process": "v3.4.35", + "symfony/psr-http-message-bridge": "v1.1.2", + "symfony/routing": "v3.4.35", + "symfony/serializer": "v3.4.35", + "symfony/translation": "v3.4.35", + "symfony/validator": "v3.4.35", + "symfony/yaml": "v3.4.35", + "twig/twig": "v1.42.3", + "typo3/phar-stream-wrapper": "v3.1.3", + "zendframework/zend-diactoros": "1.8.7", + "zendframework/zend-escaper": "2.6.1", + "zendframework/zend-feed": "2.12.0", + "zendframework/zend-stdlib": "3.2.1" + }, + "conflict": { + "webflo/drupal-core-strict": "*" + }, + "time": "2020-03-18T16:26:33+00:00", + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core." + }, { "name": "drupal/crop", "version": "2.0.0-rc1", @@ -9025,33 +9109,33 @@ }, { "name": "egulias/email-validator", - "version": "2.1.17", - "version_normalized": "2.1.17.0", + "version": "2.1.11", + "version_normalized": "2.1.11.0", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23", + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23", "shasum": "" }, "require": { "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "php": ">= 5.5" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1", + "symfony/phpunit-bridge": "^4.4@dev" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" }, - "time": "2020-02-13T22:36:52+00:00", + "time": "2019-08-13T17:33:27+00:00", "type": "library", "extra": { "branch-alias": { @@ -9361,49 +9445,47 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.2", - "version_normalized": "6.5.2.0", + "version": "6.3.3", + "version_normalized": "6.3.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { - "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", + "guzzlehttp/psr7": "^1.4", "php": ">=5.5" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" + "psr/log": "^1.0" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, - "time": "2019-12-23T11:57:10+00:00", + "time": "2018-04-22T15:46:56+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5-dev" + "dev-master": "6.3-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9818,35 +9900,33 @@ }, { "name": "masterminds/html5", - "version": "2.7.0", - "version_normalized": "2.7.0.0", + "version": "2.3.0", + "version_normalized": "2.3.0.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2" + "reference": "2c37c6c520b995b761674de3be8455a381679067" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/104443ad663d15981225f99532ba73c2f1d6b6f2", - "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", + "reference": "2c37c6c520b995b761674de3be8455a381679067", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-dom": "*", "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35", + "phpunit/phpunit": "4.*", "sami/sami": "~2.0", "satooshi/php-coveralls": "1.0.*" }, - "time": "2019-07-25T07:03:26+00:00", + "time": "2017-09-04T12:26:28+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.2-dev" } }, "installation-source": "dist", @@ -9864,13 +9944,13 @@ "name": "Matt Butcher", "email": "technosophos@gmail.com" }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - }, { "name": "Asmir Mustafic", "email": "goetas@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" } ], "description": "An HTML5 parser and serializer.", @@ -10214,20 +10294,20 @@ }, { "name": "pear/console_getopt", - "version": "v1.4.3", - "version_normalized": "1.4.3.0", + "version": "v1.4.2", + "version_normalized": "1.4.2.0", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, - "time": "2019-11-20T18:27:48+00:00", + "time": "2019-02-06T16:52:33+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -10243,6 +10323,11 @@ "BSD-2-Clause" ], "authors": [ + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, { "name": "Andrei Zmievski", "email": "andrei@php.net", @@ -10252,11 +10337,6 @@ "name": "Stig Bakken", "email": "stig@php.net", "role": "Developer" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net", - "role": "Helper" } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt" @@ -10320,17 +10400,17 @@ }, { "name": "pear/pear-core-minimal", - "version": "v1.10.10", - "version_normalized": "1.10.10.0", + "version": "v1.10.9", + "version_normalized": "1.10.9.0", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { @@ -10340,7 +10420,7 @@ "replace": { "rsky/pear-core-min": "self.version" }, - "time": "2019-11-19T19:00:24+00:00", + "time": "2019-03-13T18:15:44+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -10366,17 +10446,17 @@ }, { "name": "pear/pear_exception", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", "url": "https://github.com/pear/PEAR_Exception.git", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", "shasum": "" }, "require": { @@ -10385,7 +10465,7 @@ "require-dev": { "phpunit/phpunit": "*" }, - "time": "2019-12-10T10:24:42+00:00", + "time": "2015-02-10T20:07:52+00:00", "type": "class", "extra": { "branch-alias": { @@ -10394,9 +10474,9 @@ }, "installation-source": "dist", "autoload": { - "classmap": [ - "PEAR/" - ] + "psr-0": { + "PEAR": "" + } }, "notification-url": "https://packagist.org/downloads/", "include-path": [ @@ -10526,27 +10606,27 @@ }, { "name": "psr/log", - "version": "1.1.2", - "version_normalized": "1.1.2.0", + "version": "1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "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/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2019-11-01T11:05:21+00:00", + "time": "2018-11-20T15:27:04+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", @@ -11087,17 +11167,17 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "bcdf6ff46e115b29be3186391f29e0da82cd6f72" + "reference": "e212b06996819a2bce026a63da03b7182d05a690" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/bcdf6ff46e115b29be3186391f29e0da82cd6f72", - "reference": "bcdf6ff46e115b29be3186391f29e0da82cd6f72", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e212b06996819a2bce026a63da03b7182d05a690", + "reference": "e212b06996819a2bce026a63da03b7182d05a690", "shasum": "" }, "require": { @@ -11110,7 +11190,7 @@ "suggest": { "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" }, - "time": "2020-01-04T12:05:51+00:00", + "time": "2019-08-20T13:31:17+00:00", "type": "library", "extra": { "branch-alias": { @@ -11211,17 +11291,17 @@ }, { "name": "symfony/console", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12" + "reference": "17b154f932c5874cdbda6d05796b6490eec9f9f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12", - "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12", + "url": "https://api.github.com/repos/symfony/console/zipball/17b154f932c5874cdbda6d05796b6490eec9f9f7", + "reference": "17b154f932c5874cdbda6d05796b6490eec9f9f7", "shasum": "" }, "require": { @@ -11250,7 +11330,7 @@ "symfony/lock": "", "symfony/process": "" }, - "time": "2020-01-10T07:52:48+00:00", + "time": "2019-11-13T07:12:39+00:00", "type": "library", "extra": { "branch-alias": { @@ -11340,17 +11420,17 @@ }, { "name": "symfony/debug", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8" + "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/70dd18e93bb8bdf3c4db7fde832619fef9828cf8", - "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8", + "url": "https://api.github.com/repos/symfony/debug/zipball/f72e33fdb1170b326e72c3157f0cd456351dd086", + "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086", "shasum": "" }, "require": { @@ -11363,7 +11443,7 @@ "require-dev": { "symfony/http-kernel": "~2.8|~3.0|~4.0" }, - "time": "2020-01-08T16:36:15+00:00", + "time": "2019-10-24T15:33:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -11398,17 +11478,17 @@ }, { "name": "symfony/dependency-injection", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc" + "reference": "0ea4d39ca82409a25a43b61ce828048a90000920" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/22000f10c9e1cfef051e8b4de46815b41a0223fc", - "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0ea4d39ca82409a25a43b61ce828048a90000920", + "reference": "0ea4d39ca82409a25a43b61ce828048a90000920", "shasum": "" }, "require": { @@ -11436,7 +11516,7 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, - "time": "2020-01-08T11:20:51+00:00", + "time": "2019-11-08T16:18:30+00:00", "type": "library", "extra": { "branch-alias": { @@ -11530,17 +11610,17 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8" + "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/79ede8f2836e5ec910ebb325bde40f987244baa8", - "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177", + "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177", "shasum": "" }, "require": { @@ -11560,7 +11640,7 @@ "symfony/dependency-injection": "", "symfony/http-kernel": "" }, - "time": "2020-01-04T12:05:51+00:00", + "time": "2019-10-24T15:33:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -11698,17 +11778,17 @@ }, { "name": "symfony/http-foundation", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f3abd07a56111ebe6a1ad6f1cbc23e4f8983f8f5" + "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f3abd07a56111ebe6a1ad6f1cbc23e4f8983f8f5", - "reference": "f3abd07a56111ebe6a1ad6f1cbc23e4f8983f8f5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9e4b3ac8fa3348b4811674d23de32d201de225ce", + "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce", "shasum": "" }, "require": { @@ -11719,7 +11799,7 @@ "require-dev": { "symfony/expression-language": "~2.8|~3.0|~4.0" }, - "time": "2020-01-04T12:05:51+00:00", + "time": "2019-11-11T12:53:10+00:00", "type": "library", "extra": { "branch-alias": { @@ -11754,17 +11834,17 @@ }, { "name": "symfony/http-kernel", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ea8af453ccf14e24a6cb2fcc3ece5814cbcc0ff4" + "reference": "e1764b3de00ec5636dd03d02fd44bcb1147d70d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ea8af453ccf14e24a6cb2fcc3ece5814cbcc0ff4", - "reference": "ea8af453ccf14e24a6cb2fcc3ece5814cbcc0ff4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e1764b3de00ec5636dd03d02fd44bcb1147d70d9", + "reference": "e1764b3de00ec5636dd03d02fd44bcb1147d70d9", "shasum": "" }, "require": { @@ -11811,7 +11891,7 @@ "symfony/finder": "", "symfony/var-dumper": "" }, - "time": "2020-01-21T12:29:51+00:00", + "time": "2019-11-13T08:44:50+00:00", "type": "library", "extra": { "branch-alias": { @@ -11846,17 +11926,17 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", + "version": "v1.12.0", + "version_normalized": "1.12.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", "shasum": "" }, "require": { @@ -11865,11 +11945,11 @@ "suggest": { "ext-ctype": "For best performance" }, - "time": "2020-01-13T11:15:53+00:00", + "time": "2019-08-06T08:03:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", @@ -11906,17 +11986,17 @@ }, { "name": "symfony/polyfill-iconv", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", + "version": "v1.12.0", + "version_normalized": "1.12.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e" + "reference": "685968b11e61a347c18bf25db32effa478be610f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/926832ce51059bb58211b7b2080a88e0c3b5328e", - "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f", + "reference": "685968b11e61a347c18bf25db32effa478be610f", "shasum": "" }, "require": { @@ -11925,11 +12005,11 @@ "suggest": { "ext-iconv": "For best performance" }, - "time": "2020-01-13T11:15:53+00:00", + "time": "2019-08-06T08:03:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", @@ -11965,83 +12045,19 @@ "shim" ] }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2020-01-17T12:01:36+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.14-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ] - }, { "name": "symfony/polyfill-mbstring", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", + "version": "v1.12.0", + "version_normalized": "1.12.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", "shasum": "" }, "require": { @@ -12050,11 +12066,11 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2020-01-13T11:15:53+00:00", + "time": "2019-08-06T08:03:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", @@ -12092,28 +12108,28 @@ }, { "name": "symfony/polyfill-php56", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", + "version": "v1.12.0", + "version_normalized": "1.12.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3" + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3", - "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403", + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/polyfill-util": "~1.0" }, - "time": "2020-01-13T11:15:53+00:00", + "time": "2019-08-06T08:03:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", @@ -12150,28 +12166,28 @@ }, { "name": "symfony/polyfill-php70", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", + "version": "v1.12.0", + "version_normalized": "1.12.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "419c4940024c30ccc033650373a1fe13890d3255" + "reference": "54b4c428a0054e254223797d2713c31e08610831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/419c4940024c30ccc033650373a1fe13890d3255", - "reference": "419c4940024c30ccc033650373a1fe13890d3255", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831", + "reference": "54b4c428a0054e254223797d2713c31e08610831", "shasum": "" }, "require": { "paragonie/random_compat": "~1.0|~2.0|~9.99", "php": ">=5.3.3" }, - "time": "2020-01-13T11:15:53+00:00", + "time": "2019-08-06T08:03:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", @@ -12209,86 +12225,29 @@ "shim" ] }, - { - "name": "symfony/polyfill-php72", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-01-13T11:15:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.14-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, { "name": "symfony/polyfill-util", - "version": "v1.14.0", - "version_normalized": "1.14.0.0", + "version": "v1.12.0", + "version_normalized": "1.12.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-util.git", - "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3" + "reference": "4317de1386717b4c22caed7725350a8887ab205c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3", - "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c", + "reference": "4317de1386717b4c22caed7725350a8887ab205c", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2020-01-13T11:15:53+00:00", + "time": "2019-08-06T08:03:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", @@ -12322,23 +12281,23 @@ }, { "name": "symfony/process", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a" + "reference": "c19da50bc3e8fa7d60628fdb4ab5d67de534cf3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5b9d2bcffe4678911a4c941c00b7c161252cf09a", - "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a", + "url": "https://api.github.com/repos/symfony/process/zipball/c19da50bc3e8fa7d60628fdb4ab5d67de534cf3e", + "reference": "c19da50bc3e8fa7d60628fdb4ab5d67de534cf3e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, - "time": "2020-01-01T11:03:25+00:00", + "time": "2019-10-24T15:33:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -12438,17 +12397,17 @@ }, { "name": "symfony/routing", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "6366fbf86a05abccf77d6e605abbb0ee342f2cfa" + "reference": "afc10b9c6b5196e0fecbc3bd373c7b4482e5b6b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/6366fbf86a05abccf77d6e605abbb0ee342f2cfa", - "reference": "6366fbf86a05abccf77d6e605abbb0ee342f2cfa", + "url": "https://api.github.com/repos/symfony/routing/zipball/afc10b9c6b5196e0fecbc3bd373c7b4482e5b6b5", + "reference": "afc10b9c6b5196e0fecbc3bd373c7b4482e5b6b5", "shasum": "" }, "require": { @@ -12475,7 +12434,7 @@ "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" }, - "time": "2020-01-04T12:05:51+00:00", + "time": "2019-11-08T17:25:00+00:00", "type": "library", "extra": { "branch-alias": { @@ -12516,17 +12475,17 @@ }, { "name": "symfony/serializer", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "e85feee0d587c65713ec6d3e2a1d8782e6d219dc" + "reference": "9d14f7ff2c585a8a9f6f980253066285ddc2f675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/e85feee0d587c65713ec6d3e2a1d8782e6d219dc", - "reference": "e85feee0d587c65713ec6d3e2a1d8782e6d219dc", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9d14f7ff2c585a8a9f6f980253066285ddc2f675", + "reference": "9d14f7ff2c585a8a9f6f980253066285ddc2f675", "shasum": "" }, "require": { @@ -12562,7 +12521,7 @@ "symfony/property-info": "To deserialize relations.", "symfony/yaml": "For using the default YAML mapping loader." }, - "time": "2020-01-01T11:03:25+00:00", + "time": "2019-11-12T17:51:12+00:00", "type": "library", "extra": { "branch-alias": { @@ -12597,17 +12556,17 @@ }, { "name": "symfony/translation", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "577ec9ba1d6443947c48058acc3de298ad25e2bf" + "reference": "2031c895bc97ac1787d418d90bd1ed7d299f2772" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/577ec9ba1d6443947c48058acc3de298ad25e2bf", - "reference": "577ec9ba1d6443947c48058acc3de298ad25e2bf", + "url": "https://api.github.com/repos/symfony/translation/zipball/2031c895bc97ac1787d418d90bd1ed7d299f2772", + "reference": "2031c895bc97ac1787d418d90bd1ed7d299f2772", "shasum": "" }, "require": { @@ -12634,7 +12593,7 @@ "symfony/config": "", "symfony/yaml": "" }, - "time": "2020-01-04T12:05:51+00:00", + "time": "2019-10-30T12:43:22+00:00", "type": "library", "extra": { "branch-alias": { @@ -12669,17 +12628,17 @@ }, { "name": "symfony/validator", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "46580e4429797438033fc1f226cb4cba67afe280" + "reference": "b11f45742c5c9a228cedc46b70c6317780a1ac80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/46580e4429797438033fc1f226cb4cba67afe280", - "reference": "46580e4429797438033fc1f226cb4cba67afe280", + "url": "https://api.github.com/repos/symfony/validator/zipball/b11f45742c5c9a228cedc46b70c6317780a1ac80", + "reference": "b11f45742c5c9a228cedc46b70c6317780a1ac80", "shasum": "" }, "require": { @@ -12722,7 +12681,7 @@ "symfony/property-access": "For accessing properties within comparison constraints", "symfony/yaml": "" }, - "time": "2020-01-14T18:27:07+00:00", + "time": "2019-11-05T22:03:38+00:00", "type": "library", "extra": { "branch-alias": { @@ -12828,17 +12787,17 @@ }, { "name": "symfony/yaml", - "version": "v3.4.37", - "version_normalized": "3.4.37.0", + "version": "v3.4.35", + "version_normalized": "3.4.35.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "aa46bc2233097d5212332c907f9911533acfbf80" + "reference": "dab657db15207879217fc81df4f875947bf68804" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/aa46bc2233097d5212332c907f9911533acfbf80", - "reference": "aa46bc2233097d5212332c907f9911533acfbf80", + "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804", + "reference": "dab657db15207879217fc81df4f875947bf68804", "shasum": "" }, "require": { @@ -12854,7 +12813,7 @@ "suggest": { "symfony/console": "For validating YAML files using the lint command" }, - "time": "2020-01-13T08:00:59+00:00", + "time": "2019-10-24T15:33:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -12946,17 +12905,17 @@ }, { "name": "twig/twig", - "version": "v1.42.5", - "version_normalized": "1.42.5.0", + "version": "v1.42.3", + "version_normalized": "1.42.3.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + "reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/201baee843e0ffe8b0b956f336dd42b2a92fae4e", + "reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e", "shasum": "" }, "require": { @@ -12965,9 +12924,10 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/debug": "^3.4|^4.2", + "symfony/phpunit-bridge": "^4.4@dev|^5.0" }, - "time": "2020-02-11T05:59:23+00:00", + "time": "2019-08-24T12:51:03+00:00", "type": "library", "extra": { "branch-alias": { @@ -12996,6 +12956,7 @@ }, { "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -13012,17 +12973,17 @@ }, { "name": "typo3/phar-stream-wrapper", - "version": "v3.1.4", - "version_normalized": "3.1.4.0", + "version": "v3.1.3", + "version_normalized": "3.1.3.0", "source": { "type": "git", "url": "https://github.com/TYPO3/phar-stream-wrapper.git", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04" + "reference": "586ff60beea128e069a5dc271d3d8133a9bc460a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", + "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/586ff60beea128e069a5dc271d3d8133a9bc460a", + "reference": "586ff60beea128e069a5dc271d3d8133a9bc460a", "shasum": "" }, "require": { @@ -13036,7 +12997,7 @@ "suggest": { "ext-fileinfo": "For PHP builtin file type guessing, otherwise uses internal processing" }, - "time": "2019-12-10T11:53:27+00:00", + "time": "2019-10-18T11:57:16+00:00", "type": "library", "extra": { "branch-alias": { diff --git a/vendor/composer/installers/.editorconfig b/vendor/composer/installers/.editorconfig deleted file mode 100644 index 153cf3ef5bd040f196bf7ede995e02e896cbdb95..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -; top-most EditorConfig file -root = true - -; Unix-style newlines -[*] -end_of_line = LF - -[*.php] -indent_style = space -indent_size = 4 diff --git a/vendor/composer/installers/.travis.yml b/vendor/composer/installers/.travis.yml deleted file mode 100644 index eca55df3a37fc89ceb13ef05060a1486a0e2d6f1..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/.travis.yml +++ /dev/null @@ -1,33 +0,0 @@ -language: php - -sudo: false - -dist: trusty - -git: - depth: 5 - -php: - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - hhvm - - nightly - -matrix: - include: - - dist: precise - php: 5.3 - fast_finish: true - allow_failures: - - php: nightly - -before_script: - - composer self-update - - composer install - -script: - - composer test diff --git a/vendor/composer/installers/CHANGELOG.md b/vendor/composer/installers/CHANGELOG.md deleted file mode 100644 index c32a76ce3fa003b229080a7802e749f68f67f646..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/CHANGELOG.md +++ /dev/null @@ -1,86 +0,0 @@ -# Change Log - -## [Unreleased] - -## v1.5.0 - 2017-12-29 -### Added -* Added WordPress dropin support. -* Added new types supported for Eliasis. -* Added support for Phoenix CMS. -* Added MODX installer. -* Added Majima instaler. -* Added SiteDirect installer. -* Added support optional prefix in OctoberCMS installers. -* Added PHP 7.2 support. - -### Changed -* Changed remove packages, see [#348](https://github.com/composer/installers/pull/348). - -### Fixed -* Fixed code style, removed unused imports. - -## v1.4.0 - 2017-08-09 -### Added -* Installer for eZ Platform. -* Installer for UserFrosting. -* Installer for Osclass. -* Installer for Lan Management System. - -### Changed -* Added vendor name to package path for Lavalite. - -## v1.3.0 - 2017-04-24 -### Added -* Kanboard plugins installer. -* Porto-SAP installer. -* Add `core` to concrete5 installer. -* Support Moodle "search" plugin type. -* SyDES installer. -* iTop installer. -* Lavalite installer. -* Module type for Eliasis. -* Vgmcp installer. -* OntoWiki installer. -* The requirements for contributing (CONTRIBUTING.md). - -## v1.2.0 - 2016-08-13 -### Added -* Installer for Attogram. -* Installer for Cockpit. -* Installer for Plentymarkets. -* Installer for ReIndex. -* Installer for Vanilla. -* Installer for YAWIK. -* Added missing environments for new Shopware (5.2) Plugin System. - -## v1.1.0 - 2016-07-05 -### Added -* Installer for ReIndex. -* Installer for RadPHP. -* Installer for Decibel. -* Installer for Phifty. -* Installer for ExpressionEngine. - -### Changed -* New paths for new Bitrix CMS. Old paths is deprecated. - -### Deprecated -* Old paths in Bitrix CMS Installer is deprecated. - -## v1.0.25 - 2016-04-13 -### Removed -* Revert TYPO3 installer deletion. - -## v1.0.24 - 2016-04-05 -### Added -* Installer for ImageCMS. -* Installer for Mautic. -* New types in the Kirby installer: `kirby-plugin` and `kirby-field`. -* New types in the Drupal installer: `custom-theme` and `custom-module`. - -### Changed -* Switch to PSR-4. -* Update Bitrix Installer: configuration for setting custom path to directory with kernel. - -### Removed -* Remove TYPO3 Extension installers. diff --git a/vendor/composer/installers/CONTRIBUTING.md b/vendor/composer/installers/CONTRIBUTING.md deleted file mode 100644 index 1b1998e01abb4907790ffa71c8732f57189b0b42..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/CONTRIBUTING.md +++ /dev/null @@ -1,24 +0,0 @@ -# Contributing - -If you would like to help, please take a look at the list of -[issues](https://github.com/composer/installers/issues). - -## Pull requests - -* [Fork and clone](https://help.github.com/articles/fork-a-repo). -* Run the command `php composer.phar install` to install the dependencies. - This will also install the dev dependencies. See [Composer](https://getcomposer.org/doc/03-cli.md#install). -* Use the command `phpunit` to run the tests. See [PHPUnit](http://phpunit.de). -* Create a branch, commit, push and send us a - [pull request](https://help.github.com/articles/using-pull-requests). - -To ensure a consistent code base, you should make sure the code follows the -coding standards [PSR-1](http://www.php-fig.org/psr/psr-1/) and -[PSR-2](http://www.php-fig.org/psr/psr-2/). - -### Create a new Installer - -* Create class extends `Composer\Installers\BaseInstaller` with your Installer. -* Create unit tests as a separate class or as part of a `Composer\Installers\Test\InstallerTest`. -* Add information about your Installer in `README.md` in section "Current Supported Package Types". -* Run the tests. diff --git a/vendor/composer/installers/README.md b/vendor/composer/installers/README.md deleted file mode 100644 index 7f488b9da54ba7c75e663211af8b84faf7045ec1..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/README.md +++ /dev/null @@ -1,221 +0,0 @@ -# A Multi-Framework [Composer](http://getcomposer.org) Library Installer - -[](http://travis-ci.org/composer/installers) - -This is for PHP package authors to require in their `composer.json`. It will -install their package to the correct location based on the specified package -type. - -The goal of Installers is to be a simple package type to install path map. -Users can also customize the install path per package and package authors can -modify the package name upon installing. - -Installers isn't intended on replacing all custom installers. If your -package requires special installation handling then by all means, create a -custom installer to handle it. - -**Natively Supported Frameworks**: - -The following frameworks natively work with Composer and will be -installed to the default `vendor` directory. `composer/installers` -is not needed to install packages with these frameworks: - -* Aura -* Symfony2 -* Yii -* Yii2 - -## Current Supported Package Types - -> Stable types are marked as **bold**, this means that installation paths -> for those type will not be changed. Any adjustment for those types would -> require creation of brand new type that will cover required changes. - -| Framework | Types -| --------- | ----- -| Aimeos | `aimeos-extension` -| Asgard | `asgard-module`<br>`asgard-theme` -| Attogram | `attogram-module` -| AGL | `agl-module` -| Bonefish | `bonefish-package` -| AnnotateCms | `annotatecms-module`<br>`annotatecms-component`<br>`annotatecms-service` -| Bitrix | `bitrix-module` (deprecated) <br>`bitrix-component` (deprecated) <br>`bitrix-theme` (deprecated) <br><br> `bitrix-d7-module` <br> `bitrix-d7-component` <br> `bitrix-d7-template` -| CakePHP 2+ | **`cakephp-plugin`** -| Chef | `chef-cookbook`<br>`chef-role` -| CCFramework | `ccframework-ship`<br>`ccframework-theme` -| Cockpit | `cockpit-module` -| CodeIgniter | `codeigniter-library`<br>`codeigniter-third-party`<br>`codeigniter-module` -| concrete5 | `concrete5-core`<br>`concrete5-package`<br>`concrete5-theme`<br>`concrete5-block`<br>`concrete5-update` -| Craft | `craft-plugin` -| Croogo | `croogo-plugin`<br>`croogo-theme` -| Decibel | `decibel-app` -| DokuWiki | `dokuwiki-plugin`<br>`dokuwiki-template` -| Dolibarr | `dolibarr-module` -| Drupal | <b>`drupal-core`<br>`drupal-module`<br>`drupal-theme`</b><br>`drupal-library`<br>`drupal-profile`<br>`drupal-drush` -| Elgg | `elgg-plugin` -| Eliasis | `eliasis-component`<br>`eliasis-module`<br>`eliasis-plugin`<br>`eliasis-template` -| ExpressionEngine 3 | `ee3-addon`<br>`ee3-theme` -| eZ Platform | `ezplatform-assets`<br>`ezplatform-meta-assets` -| FuelPHP v1.x | `fuel-module`<br>`fuel-package`<br/>`fuel-theme` -| FuelPHP v2.x | `fuelphp-component` -| Grav | `grav-plugin`<br>`grav-theme` -| Hurad | `hurad-plugin`<br>`hurad-theme` -| ImageCMS | `imagecms-template`<br>`imagecms-module`<br>`imagecms-library` -| iTop | `itop-extension` -| Joomla | `joomla-component`<br>`joomla-module`<br>`joomla-template`<br>`joomla-plugin`<br>`joomla-library` -| Kanboard | `kanboard-plugin` -| Kirby | **`kirby-plugin`**<br>`kirby-field`<br>`kirby-tag` -| KodiCMS | `kodicms-plugin`<br>`kodicms-media` -| Kohana | **`kohana-module`** -| Lan Management System | `lms-plugin`<br>`lms-template`<br>`lms-document-template`<br>`lms-userpanel-module` -| Laravel | `laravel-library` -| Lavalite | `lavalite-theme`<br>`lavalite-package` -| Lithium | **`lithium-library`<br>`lithium-source`** -| Magento | `magento-library`<br>`magento-skin`<br>`magento-theme` -| majima | `majima-plugin` -| Mako | `mako-package` -| Mautic | `mautic-plugin`<br>`mautic-theme` -| Maya | `maya-module` -| MODX | `modx-extra` -| MODX Evo | `modxevo-snippet`<br>`modxevo-plugin`<br>`modxevo-module`<br>`modxevo-template`<br>`modxevo-lib` -| MediaWiki | `mediawiki-extension` -| October | **`october-module`<br>`october-plugin`<br>`october-theme`** -| OntoWiki | `ontowiki-extension`<br>`ontowiki-theme`<br>`ontowiki-translation` -| OXID | `oxid-module`<br>`oxid-theme`<br>`oxid-out` -| Osclass | `osclass-plugin`<br>`osclass-theme`<br>`osclass-language` -| MODULEWork | `modulework-module` -| Moodle | `moodle-*` (Please [check source](https://raw.githubusercontent.com/composer/installers/master/src/Composer/Installers/MoodleInstaller.php) for all supported types) -| Piwik | `piwik-plugin` -| phpBB | `phpbb-extension`<br>`phpbb-style`<br>`phpbb-language` -| Pimcore | `pimcore-plugin` -| Plentymarkets | `plentymarkets-plugin` -| PPI | **`ppi-module`** -| Puppet | `puppet-module` -| Porto | `porto-container` -| RadPHP | `radphp-bundle` -| REDAXO | `redaxo-addon` -| ReIndex | **`reindex-plugin`** <br> **`reindex-theme`** -| Roundcube | `roundcube-plugin` -| shopware | `shopware-backend-plugin`<br/>`shopware-core-plugin`<br/>`shopware-frontend-plugin`<br/>`shopware-theme`<br/>`shopware-plugin`<br/>`shopware-frontend-theme` -| SilverStripe | `silverstripe-module`<br>`silverstripe-theme` -| SiteDirect | `sitedirect-module`<br>`sitedirect-plugin` -| SMF | `smf-module`<br>`smf-theme` -| SyDES | `sydes-module`<br>`sydes-theme` -| symfony1 | **`symfony1-plugin`** -| Tusk | `tusk-task`<br>`tusk-command`<br>`tusk-asset` -| TYPO3 Flow | `typo3-flow-package`<br>`typo3-flow-framework`<br>`typo3-flow-plugin`<br>`typo3-flow-site`<br>`typo3-flow-boilerplate`<br>`typo3-flow-build` -| TYPO3 CMS | `typo3-cms-extension` (Deprecated in this package, use the [TYPO3 CMS Installers](https://packagist.org/packages/typo3/cms-composer-installers) instead) -| UserFrosting | `userfrosting-sprinkle` -| Vanilla | `vanilla-plugin`<br>`vanilla-theme` -| Vgmcp | `vgmcp-bundle`<br>`vgmcp-theme` -| Wolf CMS | `wolfcms-plugin` -| WordPress | <b>`wordpress-plugin`<br>`wordpress-theme`</b><br>`wordpress-muplugin`<br>`wordpress-dropin` -| YAWIK | `yawik-module` -| Zend | `zend-library`<br>`zend-extra`<br>`zend-module` -| Zikula | `zikula-module`<br>`zikula-theme` -| Prestashop | `prestashop-module`<br>`prestashop-theme` -| Phifty | `phifty-bundle`<br>`phifty-framework`<br>`phifty-library` - -## Example `composer.json` File - -This is an example for a CakePHP plugin. The only important parts to set in your -composer.json file are `"type": "cakephp-plugin"` which describes what your -package is and `"require": { "composer/installers": "~1.0" }` which tells composer -to load the custom installers. - -```json -{ - "name": "you/ftp", - "type": "cakephp-plugin", - "require": { - "composer/installers": "~1.0" - } -} -``` - -This would install your package to the `Plugin/Ftp/` folder of a CakePHP app -when a user runs `php composer.phar install`. - -So submit your packages to [packagist.org](http://packagist.org)! - -## Custom Install Paths - -If you are consuming a package that uses the `composer/installers` you can -override the install path with the following extra in your `composer.json`: - -```json -{ - "extra": { - "installer-paths": { - "your/custom/path/{$name}/": ["shama/ftp", "vendor/package"] - } - } -} -``` - -A package type can have a custom installation path with a `type:` prefix. - -``` json -{ - "extra": { - "installer-paths": { - "your/custom/path/{$name}/": ["type:wordpress-plugin"] - } - } -} -``` - -You can also have the same vendor packages with a custom installation path by -using the `vendor:` prefix. - -``` json -{ - "extra": { - "installer-paths": { - "your/custom/path/{$name}/": ["vendor:my_organization"] - } - } -} -``` - -These would use your custom path for each of the listed packages. The available -variables to use in your paths are: `{$name}`, `{$vendor}`, `{$type}`. - -## Custom Install Names - -If you're a package author and need your package to be named differently when -installed consider using the `installer-name` extra. - -For example you have a package named `shama/cakephp-ftp` with the type -`cakephp-plugin`. Installing with `composer/installers` would install to the -path `Plugin/CakephpFtp`. Due to the strict naming conventions, you as a -package author actually need the package to be named and installed to -`Plugin/Ftp`. Using the following config within your **package** `composer.json` -will allow this: - -```json -{ - "name": "shama/cakephp-ftp", - "type": "cakephp-plugin", - "extra": { - "installer-name": "Ftp" - } -} -``` - -Please note the name entered into `installer-name` will be the final and will -not be inflected. - -## Should we allow dynamic package types or paths? No. - -What are they? The ability for a package author to determine where a package -will be installed either through setting the path directly in their -`composer.json` or through a dynamic package type: `"type": -"framework-install-here"`. - -It has been proposed many times. Even implemented once early on and then -removed. Installers won't do this because it would allow a single package -author to wipe out entire folders without the user's consent. That user would -then come here to yell at us. - -Anyone still wanting this capability should consider requiring https://github.com/oomphinc/composer-installers-extender. diff --git a/vendor/composer/installers/_config.yml b/vendor/composer/installers/_config.yml deleted file mode 100644 index c4192631f25b34d77a7f159aa0da0e3ae99c4ef4..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/vendor/composer/installers/composer.json b/vendor/composer/installers/composer.json index 6de40853c9c453029ee67c7c98f5f27e6dbcd021..1f68e72a577b7d5073158a401a71d5ce043dfa1f 100644 --- a/vendor/composer/installers/composer.json +++ b/vendor/composer/installers/composer.json @@ -31,6 +31,7 @@ "iTop", "Joomla", "Kanboard", + "Known", "Kohana", "Lan Management System", "Laravel", @@ -65,6 +66,7 @@ "symfony", "Thelia", "TYPO3", + "WHMCS", "WolfCMS", "WordPress", "YAWIK", diff --git a/vendor/composer/installers/phpunit.xml.dist b/vendor/composer/installers/phpunit.xml.dist deleted file mode 100644 index cc5cc991590d56cd319af89e725e969fff8fe1c9..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/phpunit.xml.dist +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit backupGlobals="false" - backupStaticAttributes="false" - colors="true" - convertErrorsToExceptions="true" - convertNoticesToExceptions="true" - convertWarningsToExceptions="true" - processIsolation="false" - stopOnFailure="false" - syntaxCheck="false" - bootstrap="tests/bootstrap.php" -> - <testsuites> - <testsuite name="Installers Test Suite"> - <directory>tests/Composer/Installers</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>src/Composer/Installers</directory> - </whitelist> - </filter> -</phpunit> \ No newline at end of file diff --git a/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php b/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php new file mode 100644 index 0000000000000000000000000000000000000000..6673aea94badb7351d5d2ead518a21888e6c4069 --- /dev/null +++ b/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php @@ -0,0 +1,9 @@ +<?php +namespace Composer\Installers; + +class CiviCrmInstaller extends BaseInstaller +{ + protected $locations = array( + 'ext' => 'ext/{$name}/' + ); +} diff --git a/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php b/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php new file mode 100644 index 0000000000000000000000000000000000000000..70788163a112ac7eb86e48226f0619287687d4c0 --- /dev/null +++ b/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php @@ -0,0 +1,10 @@ +<?php + +namespace Composer\Installers; + +class DframeInstaller extends BaseInstaller +{ + protected $locations = array( + 'module' => 'modules/{$vendor}/{$name}/', + ); +} diff --git a/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php index a41ee2e152af7e78410da874d2a290adbfae1766..f520bfe25e23968cea40320da50a1f9d2823780b 100644 --- a/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php +++ b/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php @@ -4,13 +4,17 @@ class DrupalInstaller extends BaseInstaller { protected $locations = array( - 'core' => 'core/', - 'module' => 'modules/{$name}/', - 'theme' => 'themes/{$name}/', - 'library' => 'libraries/{$name}/', - 'profile' => 'profiles/{$name}/', - 'drush' => 'drush/{$name}/', - 'custom-theme' => 'themes/custom/{$name}/', - 'custom-module' => 'modules/custom/{$name}', + 'core' => 'core/', + 'module' => 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + 'library' => 'libraries/{$name}/', + 'profile' => 'profiles/{$name}/', + 'drush' => 'drush/{$name}/', + 'custom-theme' => 'themes/custom/{$name}/', + 'custom-module' => 'modules/custom/{$name}/', + 'custom-profile' => 'profiles/custom/{$name}/', + 'drupal-multisite' => 'sites/{$name}/', + 'console' => 'console/{$name}/', + 'console-language' => 'console/language/{$name}/', ); } diff --git a/vendor/composer/installers/src/Composer/Installers/Installer.php b/vendor/composer/installers/src/Composer/Installers/Installer.php index a9d49f34632cbc53283efb7fe85e438b8cd92e50..651c19043e7a39847d829959db79fdb9aef7ad72 100644 --- a/vendor/composer/installers/src/Composer/Installers/Installer.php +++ b/vendor/composer/installers/src/Composer/Installers/Installer.php @@ -1,13 +1,18 @@ <?php + namespace Composer\Installers; -use Composer\IO\IOInterface; +use Composer\Composer; +use Composer\Installer\BinaryInstaller; use Composer\Installer\LibraryInstaller; +use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Repository\InstalledRepositoryInterface; +use Composer\Util\Filesystem; class Installer extends LibraryInstaller { + /** * Package types to installer class map * @@ -23,12 +28,14 @@ class Installer extends LibraryInstaller 'bonefish' => 'BonefishInstaller', 'cakephp' => 'CakePHPInstaller', 'chef' => 'ChefInstaller', + 'civicrm' => 'CiviCrmInstaller', 'ccframework' => 'ClanCatsFrameworkInstaller', 'cockpit' => 'CockpitInstaller', 'codeigniter' => 'CodeIgniterInstaller', 'concrete5' => 'Concrete5Installer', 'craft' => 'CraftInstaller', 'croogo' => 'CroogoInstaller', + 'dframe' => 'DframeInstaller', 'dokuwiki' => 'DokuWikiInstaller', 'dolibarr' => 'DolibarrInstaller', 'decibel' => 'DecibelInstaller', @@ -47,6 +54,7 @@ class Installer extends LibraryInstaller 'joomla' => 'JoomlaInstaller', 'kanboard' => 'KanboardInstaller', 'kirby' => 'KirbyInstaller', + 'known' => 'KnownInstaller', 'kodicms' => 'KodiCMSInstaller', 'kohana' => 'KohanaInstaller', 'lms' => 'LanManagementSystemInstaller', @@ -79,6 +87,7 @@ class Installer extends LibraryInstaller 'phifty' => 'PhiftyInstaller', 'porto' => 'PortoInstaller', 'redaxo' => 'RedaxoInstaller', + 'redaxo5' => 'Redaxo5Installer', 'reindex' => 'ReIndexInstaller', 'roundcube' => 'RoundcubeInstaller', 'shopware' => 'ShopwareInstaller', @@ -87,6 +96,7 @@ class Installer extends LibraryInstaller 'smf' => 'SMFInstaller', 'sydes' => 'SyDESInstaller', 'symfony1' => 'Symfony1Installer', + 'tao' => 'TaoInstaller', 'thelia' => 'TheliaInstaller', 'tusk' => 'TuskInstaller', 'typo3-cms' => 'TYPO3CmsInstaller', @@ -102,6 +112,30 @@ class Installer extends LibraryInstaller 'prestashop' => 'PrestashopInstaller' ); + /** + * Installer constructor. + * + * Disables installers specified in main composer extra installer-disable + * list + * + * @param IOInterface $io + * @param Composer $composer + * @param string $type + * @param Filesystem|null $filesystem + * @param BinaryInstaller|null $binaryInstaller + */ + public function __construct( + IOInterface $io, + Composer $composer, + $type = 'library', + Filesystem $filesystem = null, + BinaryInstaller $binaryInstaller = null + ) { + parent::__construct($io, $composer, $type, $filesystem, + $binaryInstaller); + $this->removeDisabledInstallers(); + } + /** * {@inheritDoc} */ @@ -197,4 +231,48 @@ private function getIO() { return $this->io; } + + /** + * Look for installers set to be disabled in composer's extra config and + * remove them from the list of supported installers. + * + * Globals: + * - true, "all", and "*" - disable all installers. + * - false - enable all installers (useful with + * wikimedia/composer-merge-plugin or similar) + * + * @return void + */ + protected function removeDisabledInstallers() + { + $extra = $this->composer->getPackage()->getExtra(); + + if (!isset($extra['installer-disable']) || $extra['installer-disable'] === false) { + // No installers are disabled + return; + } + + // Get installers to disable + $disable = $extra['installer-disable']; + + // Ensure $disabled is an array + if (!is_array($disable)) { + $disable = array($disable); + } + + // Check which installers should be disabled + $all = array(true, "all", "*"); + $intersect = array_intersect($all, $disable); + if (!empty($intersect)) { + // Disable all installers + $this->supportedTypes = array(); + } else { + // Disable specified installers + foreach ($disable as $key => $installer) { + if (is_string($installer) && key_exists($installer, $this->supportedTypes)) { + unset($this->supportedTypes[$installer]); + } + } + } + } } diff --git a/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php b/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php new file mode 100644 index 0000000000000000000000000000000000000000..c5d08c5f9a1b65aaf3d3859c5182398ff714dea5 --- /dev/null +++ b/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php @@ -0,0 +1,11 @@ +<?php +namespace Composer\Installers; + +class KnownInstaller extends BaseInstaller +{ + protected $locations = array( + 'plugin' => 'IdnoPlugins/{$name}/', + 'theme' => 'Themes/{$name}/', + 'console' => 'ConsolePlugins/{$name}/', + ); +} diff --git a/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php b/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php index 01008c638e188d9994ed1b00146172c0187d80d0..f5a8957ef0d07ddc74fd16b49329a2d81d146a66 100644 --- a/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php +++ b/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php @@ -4,6 +4,7 @@ class MediaWikiInstaller extends BaseInstaller { protected $locations = array( + 'core' => 'core/', 'extension' => 'extensions/{$name}/', 'skin' => 'skins/{$name}/', ); diff --git a/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php index 4bbbec8c06b1a4adc56c87e60d421a68419625bf..b7d970392ab076a27638b705a496457f58d11efe 100644 --- a/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php +++ b/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php @@ -4,12 +4,12 @@ class MicroweberInstaller extends BaseInstaller { protected $locations = array( - 'module' => 'userfiles/modules/{$name}/', - 'module-skin' => 'userfiles/modules/{$name}/templates/', - 'template' => 'userfiles/templates/{$name}/', - 'element' => 'userfiles/elements/{$name}/', - 'vendor' => 'vendor/{$name}/', - 'components' => 'components/{$name}/' + 'module' => 'userfiles/modules/{$install_item_dir}/', + 'module-skin' => 'userfiles/modules/{$install_item_dir}/templates/', + 'template' => 'userfiles/templates/{$install_item_dir}/', + 'element' => 'userfiles/elements/{$install_item_dir}/', + 'vendor' => 'vendor/{$install_item_dir}/', + 'components' => 'components/{$install_item_dir}/' ); /** @@ -22,89 +22,97 @@ class MicroweberInstaller extends BaseInstaller */ public function inflectPackageVars($vars) { - if ($vars['type'] === 'microweber-template') { - return $this->inflectTemplateVars($vars); - } - if ($vars['type'] === 'microweber-templates') { - return $this->inflectTemplatesVars($vars); - } - if ($vars['type'] === 'microweber-core') { - return $this->inflectCoreVars($vars); - } - if ($vars['type'] === 'microweber-adapter') { - return $this->inflectCoreVars($vars); - } - if ($vars['type'] === 'microweber-module') { - return $this->inflectModuleVars($vars); - } - if ($vars['type'] === 'microweber-modules') { - return $this->inflectModulesVars($vars); - } - if ($vars['type'] === 'microweber-skin') { - return $this->inflectSkinVars($vars); - } - if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') { - return $this->inflectElementVars($vars); + + + if ($this->package->getTargetDir()) { + $vars['install_item_dir'] = $this->package->getTargetDir(); + } else { + $vars['install_item_dir'] = $vars['name']; + if ($vars['type'] === 'microweber-template') { + return $this->inflectTemplateVars($vars); + } + if ($vars['type'] === 'microweber-templates') { + return $this->inflectTemplatesVars($vars); + } + if ($vars['type'] === 'microweber-core') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-adapter') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-module') { + return $this->inflectModuleVars($vars); + } + if ($vars['type'] === 'microweber-modules') { + return $this->inflectModulesVars($vars); + } + if ($vars['type'] === 'microweber-skin') { + return $this->inflectSkinVars($vars); + } + if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') { + return $this->inflectElementVars($vars); + } } + return $vars; } protected function inflectTemplateVars($vars) { - $vars['name'] = preg_replace('/-template$/', '', $vars['name']); - $vars['name'] = preg_replace('/template-$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-template$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/template-$/', '', $vars['install_item_dir']); return $vars; } protected function inflectTemplatesVars($vars) { - $vars['name'] = preg_replace('/-templates$/', '', $vars['name']); - $vars['name'] = preg_replace('/templates-$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-templates$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/templates-$/', '', $vars['install_item_dir']); return $vars; } protected function inflectCoreVars($vars) { - $vars['name'] = preg_replace('/-providers$/', '', $vars['name']); - $vars['name'] = preg_replace('/-provider$/', '', $vars['name']); - $vars['name'] = preg_replace('/-adapter$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-providers$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/-provider$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/-adapter$/', '', $vars['install_item_dir']); return $vars; } protected function inflectModuleVars($vars) { - $vars['name'] = preg_replace('/-module$/', '', $vars['name']); - $vars['name'] = preg_replace('/module-$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-module$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/module-$/', '', $vars['install_item_dir']); return $vars; } protected function inflectModulesVars($vars) { - $vars['name'] = preg_replace('/-modules$/', '', $vars['name']); - $vars['name'] = preg_replace('/modules-$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-modules$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/modules-$/', '', $vars['install_item_dir']); return $vars; } protected function inflectSkinVars($vars) { - $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); - $vars['name'] = preg_replace('/skin-$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-skin$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/skin-$/', '', $vars['install_item_dir']); return $vars; } protected function inflectElementVars($vars) { - $vars['name'] = preg_replace('/-elements$/', '', $vars['name']); - $vars['name'] = preg_replace('/elements-$/', '', $vars['name']); - $vars['name'] = preg_replace('/-element$/', '', $vars['name']); - $vars['name'] = preg_replace('/element-$/', '', $vars['name']); + $vars['install_item_dir'] = preg_replace('/-elements$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/elements-$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/-element$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = preg_replace('/element-$/', '', $vars['install_item_dir']); return $vars; } diff --git a/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php index a89c82f736fbad702a227e2902254c16416e8358..75dbe71b3fcd2a329c64d5ab8cc2a922cd3c07aa 100644 --- a/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php +++ b/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php @@ -20,6 +20,7 @@ class MoodleInstaller extends BaseInstaller 'calendartype' => 'calendar/type/{$name}/', 'format' => 'course/format/{$name}/', 'coursereport' => 'course/report/{$name}/', + 'customcertelement' => 'mod/customcert/element/{$name}/', 'datafield' => 'mod/data/field/{$name}/', 'datapreset' => 'mod/data/preset/{$name}/', 'editor' => 'lib/editor/{$name}/', diff --git a/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php b/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php index 93b25de59ce2bec94f3df1b642061177347a01da..08d5dc4e75e673b06dc0add4ba0555e7cca57c02 100644 --- a/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php +++ b/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php @@ -33,6 +33,7 @@ public function inflectPackageVars($vars) protected function inflectPluginVars($vars) { $vars['name'] = preg_replace('/^oc-|-plugin$/', '', $vars['name']); + $vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']); return $vars; } diff --git a/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php b/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php new file mode 100644 index 0000000000000000000000000000000000000000..23a20347effc1c2100c7a59e6b5d0e438f24609f --- /dev/null +++ b/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php @@ -0,0 +1,10 @@ +<?php +namespace Composer\Installers; + +class Redaxo5Installer extends BaseInstaller +{ + protected $locations = array( + 'addon' => 'redaxo/src/addons/{$name}/', + 'bestyle-plugin' => 'redaxo/src/addons/be_style/plugins/{$name}/' + ); +} diff --git a/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php b/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php new file mode 100644 index 0000000000000000000000000000000000000000..108def151ddc63ecd6f29db6d8dd5d649cc1d6e5 --- /dev/null +++ b/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php @@ -0,0 +1,12 @@ +<?php +namespace Composer\Installers; + +/** + * An installer to handle TAO extensions. + */ +class TaoInstaller extends BaseInstaller +{ + protected $locations = array( + 'extension' => '{$name}' + ); +} diff --git a/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php index 2cbb4a463b7ef5999fcfd6f584e10319552c1f05..b65dbbafd36ba1d1ac72af1c5d4b338dd2ab0b8a 100644 --- a/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php +++ b/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php @@ -5,6 +5,17 @@ class WHMCSInstaller extends BaseInstaller { protected $locations = array( - 'gateway' => 'modules/gateways/{$name}/', + 'addons' => 'modules/addons/{$vendor}_{$name}/', + 'fraud' => 'modules/fraud/{$vendor}_{$name}/', + 'gateways' => 'modules/gateways/{$vendor}_{$name}/', + 'notifications' => 'modules/notifications/{$vendor}_{$name}/', + 'registrars' => 'modules/registrars/{$vendor}_{$name}/', + 'reports' => 'modules/reports/{$vendor}_{$name}/', + 'security' => 'modules/security/{$vendor}_{$name}/', + 'servers' => 'modules/servers/{$vendor}_{$name}/', + 'social' => 'modules/social/{$vendor}_{$name}/', + 'support' => 'modules/support/{$vendor}_{$name}/', + 'templates' => 'templates/{$vendor}_{$name}/', + 'includes' => 'includes/{$vendor}_{$name}/' ); } diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php deleted file mode 100644 index 3fff10030be063e46570944e5d554aa2b3324ff5..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\AsgardInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase; - -class AsgardInstallerTest extends TestCase -{ - /** - * @var AsgardInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new AsgardInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - array('name' => $expected, 'type' => $type), - $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) - ); - } - - public function packageNameInflectionProvider() - { - return array( - // Should keep module name StudlyCase - array( - 'asgard-module', - 'user-profile', - 'UserProfile' - ), - array( - 'asgard-module', - 'asgard-module', - 'Asgard' - ), - array( - 'asgard-module', - 'blog', - 'Blog' - ), - // tests that exactly one '-module' is cut off - array( - 'asgard-module', - 'some-module-module', - 'SomeModule', - ), - // tests that exactly one '-theme' is cut off - array( - 'asgard-theme', - 'some-theme-theme', - 'SomeTheme', - ), - // tests that names without '-theme' suffix stay valid - array( - 'asgard-theme', - 'someothertheme', - 'Someothertheme', - ), - // Should keep theme name StudlyCase - array( - 'asgard-theme', - 'adminlte-advanced', - 'AdminlteAdvanced' - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/BitrixInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/BitrixInstallerTest.php deleted file mode 100644 index 7fe8fcbb0340369dba3fce9e58e3bf1887fa629d..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/BitrixInstallerTest.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php - -namespace Composer\Installers\Test; - -use Composer\Installers\BitrixInstaller; -use Composer\Package\Package; -use Composer\Composer; - -/** - * Tests for the BitrixInstaller Class - * - * @coversDefaultClass Composer\Installers\BitrixInstaller - */ -class BitrixInstallerTest extends TestCase -{ - /** @var BitrixInstaller */ - private $installer; - - /** @var Composer */ - private $composer; - - - /** - * Sets up the fixture, for example, instantiate the class-under-test. - * - * This method is called before a test is executed. - */ - final function setUp() - { - $this->composer = new Composer(); - } - - /** - * @param string $vars - * @param string $expectedVars - * - * @covers ::inflectPackageVars - * - * @dataProvider provideExpectedInflectionResults - */ - final public function testInflectPackageVars($vars, $expectedVars) - { - - $this->installer = new BitrixInstaller( - new Package($vars['name'], '4.2', '4.2'), - $this->composer - ); - $actual = $this->installer->inflectPackageVars($vars); - $this->assertEquals($actual, $expectedVars); - } - - /** - * Provides various parameters for packages and the expected result after inflection - * - * @return array - */ - final public function provideExpectedInflectionResults() - { - return array( - //check bitrix-dir is correct - array( - array('name' => 'Nyan/Cat'), - array('name' => 'Nyan/Cat', 'bitrix_dir' => 'bitrix') - ), - array( - array('name' => 'Nyan/Cat', 'bitrix_dir' => 'bitrix'), - array('name' => 'Nyan/Cat', 'bitrix_dir' => 'bitrix') - ), - array( - array('name' => 'Nyan/Cat', 'bitrix_dir' => 'local'), - array('name' => 'Nyan/Cat', 'bitrix_dir' => 'local') - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php deleted file mode 100644 index 46b02769f72facbb69bc279a96900d700a48e9b7..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php +++ /dev/null @@ -1,114 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\CakePHPInstaller; -use Composer\Repository\RepositoryManager; -use Composer\Repository\InstalledArrayRepository; -use Composer\Package\Package; -use Composer\Package\RootPackage; -use Composer\Package\Version\VersionParser; -use Composer\Composer; -use Composer\Config; - -class CakePHPInstallerTest extends TestCase -{ - private $composer; - private $io; - - /** - * setUp - * - * @return void - */ - public function setUp() - { - $this->package = new Package('CamelCased', '1.0', '1.0'); - $this->io = $this->getMock('Composer\IO\PackageInterface'); - $this->composer = new Composer(); - $this->composer->setConfig(new Config(false)); - } - - /** - * testInflectPackageVars - * - * @return void - */ - public function testInflectPackageVars() - { - $installer = new CakePHPInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'CamelCased')); - $this->assertEquals($result, array('name' => 'CamelCased')); - - $installer = new CakePHPInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'with-dash')); - $this->assertEquals($result, array('name' => 'WithDash')); - - $installer = new CakePHPInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'with_underscore')); - $this->assertEquals($result, array('name' => 'WithUnderscore')); - - $installer = new CakePHPInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'cake/acl')); - $this->assertEquals($result, array('name' => 'Cake/Acl')); - - $installer = new CakePHPInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'cake/debug-kit')); - $this->assertEquals($result, array('name' => 'Cake/DebugKit')); - } - - /** - * Test getLocations returning appropriate values based on CakePHP version - * - */ - public function testGetLocations() { - $package = new RootPackage('CamelCased', '1.0', '1.0'); - $composer = $this->composer; - $rm = new RepositoryManager( - $this->getMock('Composer\IO\IOInterface'), - $this->getMock('Composer\Config') - ); - $composer->setRepositoryManager($rm); - $installer = new CakePHPInstaller($package, $composer); - - // 2.0 < cakephp < 3.0 - $this->setCakephpVersion($rm, '2.0.0'); - $result = $installer->getLocations(); - $this->assertContains('Plugin/', $result['plugin']); - - $this->setCakephpVersion($rm, '2.5.9'); - $result = $installer->getLocations(); - $this->assertContains('Plugin/', $result['plugin']); - - $this->setCakephpVersion($rm, '~2.5'); - $result = $installer->getLocations(); - $this->assertContains('Plugin/', $result['plugin']); - - // special handling for 2.x versions when 3.x is still in development - $this->setCakephpVersion($rm, 'dev-master'); - $result = $installer->getLocations(); - $this->assertContains('Plugin/', $result['plugin']); - - $this->setCakephpVersion($rm, '>=2.5'); - $result = $installer->getLocations(); - $this->assertContains('Plugin/', $result['plugin']); - - // cakephp >= 3.0 - $this->setCakephpVersion($rm, '3.0.*-dev'); - $result = $installer->getLocations(); - $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']); - - $this->setCakephpVersion($rm, '~8.8'); - $result = $installer->getLocations(); - $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']); - } - - protected function setCakephpVersion($rm, $version) { - $parser = new VersionParser(); - list(, $version) = explode(' ', $parser->parseConstraints($version)); - $installed = new InstalledArrayRepository(); - $package = new Package('cakephp/cakephp', $version, $version); - $installed->addPackage($package); - $rm->setLocalRepository($installed); - } - -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php deleted file mode 100644 index 31ccecdbccc9cd835ccb48a7bd0b84ef9035fa9e..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php - -namespace Composer\Installers\Test; - -use Composer\Installers\CraftInstaller; - -/** - * Tests for the CraftInstaller Class - * - * @coversDefaultClass Composer\Installers\CraftInstaller - */ -class CraftInstallerTest extends TestCase -{ - /** @var CraftInstaller */ - private $installer; - - /** - * Sets up the fixture, for example, instantiate the class-under-test. - * - * This method is called before a test is executed. - */ - final public function setup() - { - $this->installer = new CraftInstaller(); - } - - /** - * @param string $packageName - * @param string $expectedName - * - * @covers ::inflectPackageVars - * - * @dataProvider provideExpectedInflectionResults - */ - final public function testInflectPackageVars($packageName, $expectedName) - { - $installer = $this->installer; - - $vars = array('name' => $packageName); - $expected = array('name' => $expectedName); - - $actual = $installer->inflectPackageVars($vars); - - $this->assertEquals($actual, $expected); - } - - /** - * Provides various names for packages and the expected result after inflection - * - * @return array - */ - final public function provideExpectedInflectionResults() - { - return array( - // lowercase - array('foo', 'foo'), - array('craftfoo', 'craftfoo'), - array('fooplugin', 'fooplugin'), - array('craftfooplugin', 'craftfooplugin'), - // lowercase - dash - array('craft-foo', 'foo'), - array('foo-plugin', 'foo'), - array('craft-foo-plugin', 'foo'), - // lowercase - underscore - array('craft_foo', 'craft_foo'), - array('foo_plugin', 'foo_plugin'), - array('craft_foo_plugin', 'craft_foo_plugin'), - // CamelCase - array('Foo', 'Foo'), - array('CraftFoo', 'CraftFoo'), - array('FooPlugin', 'FooPlugin'), - array('CraftFooPlugin', 'CraftFooPlugin'), - // CamelCase - Dash - array('Craft-Foo', 'Foo'), - array('Foo-Plugin', 'Foo'), - array('Craft-Foo-Plugin', 'Foo'), - // CamelCase - underscore - array('Craft_Foo', 'Craft_Foo'), - array('Foo_Plugin', 'Foo_Plugin'), - array('Craft_Foo_Plugin', 'Craft_Foo_Plugin'), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php deleted file mode 100644 index fc1d67176dba8f9f477663e775b1b79c5c6fdfe0..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\DokuWikiInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase as BaseTestCase; - -class DokuWikiInstallerTest extends BaseTestCase -{ - /** - * @var DokuWikiInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new DokuWikiInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), - array('name' => $expected, 'type'=>$type) - ); - } - - public function packageNameInflectionProvider() - { - return array( - array( - 'dokuwiki-plugin', - 'dokuwiki-test-plugin', - 'test', - ), - array( - 'dokuwiki-plugin', - 'test-plugin', - 'test', - ), - array( - 'dokuwiki-plugin', - 'dokuwiki_test', - 'test', - ), - array( - 'dokuwiki-plugin', - 'test', - 'test', - ), - array( - 'dokuwiki-plugin', - 'test-template', - 'test-template', - ), - array( - 'dokuwiki-template', - 'dokuwiki-test-template', - 'test', - ), - array( - 'dokuwiki-template', - 'test-template', - 'test', - ), - array( - 'dokuwiki-template', - 'dokuwiki_test', - 'test', - ), - array( - 'dokuwiki-template', - 'test', - 'test', - ), - array( - 'dokuwiki-template', - 'test-plugin', - 'test-plugin', - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php deleted file mode 100644 index b757799b4841cdb232894145dd0838e905a190a6..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Composer; -use Composer\Installers\GravInstaller; - -class GravInstallerTest extends TestCase -{ - /* @var \Composer\Composer */ - protected $composer; - - public function setUp() - { - $this->composer = new Composer(); - } - - public function testInflectPackageVars() - { - $package = $this->getPackage('vendor/name', '0.0.0'); - $installer = new GravInstaller($package, $this->composer); - $packageVars = $this->getPackageVars($package); - - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => 'test'))); - $this->assertEquals('test', $result['name']); - - foreach ($installer->getLocations() as $name => $location) { - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test"))); - $this->assertEquals('test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-$name"))); - $this->assertEquals('test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test-test"))); - $this->assertEquals('test-test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-test-$name"))); - $this->assertEquals('test-test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test"))); - $this->assertEquals('test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-$name"))); - $this->assertEquals('test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test-test"))); - $this->assertEquals('test-test', $result['name']); - $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-test-$name"))); - $this->assertEquals('test-test', $result['name']); - } - } - - /** - * @param $package \Composer\Package\PackageInterface - */ - public function getPackageVars($package) - { - $type = $package->getType(); - - $prettyName = $package->getPrettyName(); - if (strpos($prettyName, '/') !== false) { - list($vendor, $name) = explode('/', $prettyName); - } else { - $vendor = ''; - $name = $prettyName; - } - - return compact('name', 'vendor', 'type'); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php deleted file mode 100644 index 75b402b640f11940c9bcbf20cfd688e7e665170a..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php +++ /dev/null @@ -1,552 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\Installer; -use Composer\Util\Filesystem; -use Composer\Package\Package; -use Composer\Package\RootPackage; -use Composer\Composer; -use Composer\Config; - -class InstallerTest extends TestCase -{ - private $composer; - private $config; - private $vendorDir; - private $binDir; - private $dm; - private $repository; - private $io; - private $fs; - - /** - * setUp - * - * @return void - */ - public function setUp() - { - $this->fs = new Filesystem; - - $this->composer = new Composer(); - $this->config = new Config(); - $this->composer->setConfig($this->config); - - $this->vendorDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-vendor'; - $this->ensureDirectoryExistsAndClear($this->vendorDir); - - $this->binDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-bin'; - $this->ensureDirectoryExistsAndClear($this->binDir); - - $this->config->merge(array( - 'config' => array( - 'vendor-dir' => $this->vendorDir, - 'bin-dir' => $this->binDir, - ), - )); - - $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') - ->disableOriginalConstructor() - ->getMock(); - $this->composer->setDownloadManager($this->dm); - - $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); - $this->io = $this->getMock('Composer\IO\IOInterface'); - } - - /** - * tearDown - * - * @return void - */ - public function tearDown() - { - $this->fs->removeDirectory($this->vendorDir); - $this->fs->removeDirectory($this->binDir); - } - - /** - * testSupports - * - * @return void - * - * @dataProvider dataForTestSupport - */ - public function testSupports($type, $expected) - { - $installer = new Installer($this->io, $this->composer); - $this->assertSame($expected, $installer->supports($type), sprintf('Failed to show support for %s', $type)); - } - - /** - * dataForTestSupport - */ - public function dataForTestSupport() - { - return array( - array('agl-module', true), - array('aimeos-extension', true), - array('annotatecms-module', true), - array('annotatecms-component', true), - array('annotatecms-service', true), - array('attogram-module', true), - array('bitrix-module', true), - array('bitrix-component', true), - array('bitrix-theme', true), - array('bonefish-package', true), - array('cakephp', false), - array('cakephp-', false), - array('cakephp-app', false), - array('cakephp-plugin', true), - array('chef-cookbook', true), - array('chef-role', true), - array('cockpit-module', true), - array('codeigniter-app', false), - array('codeigniter-library', true), - array('codeigniter-third-party', true), - array('codeigniter-module', true), - array('concrete5-block', true), - array('concrete5-package', true), - array('concrete5-theme', true), - array('concrete5-core', true), - array('concrete5-update', true), - array('craft-plugin', true), - array('croogo-plugin', true), - array('croogo-theme', true), - array('decibel-app', true), - array('dokuwiki-plugin', true), - array('dokuwiki-template', true), - array('drupal-module', true), - array('dolibarr-module', true), - array('ee3-theme', true), - array('ee3-addon', true), - array('ee2-theme', true), - array('ee2-addon', true), - array('elgg-plugin', true), - array('eliasis-component', true), - array('eliasis-module', true), - array('eliasis-plugin', true), - array('eliasis-template', true), - array('ezplatform-assets', true), - array('ezplatform-meta-assets', true), - array('fuel-module', true), - array('fuel-package', true), - array('fuel-theme', true), - array('fuelphp-component', true), - array('hurad-plugin', true), - array('hurad-theme', true), - array('imagecms-template', true), - array('imagecms-module', true), - array('imagecms-library', true), - array('itop-extension', true), - array('joomla-library', true), - array('kanboard-plugin', true), - array('kirby-plugin', true), - array('kohana-module', true), - array('lms-plugin', true), - array('lms-template', true), - array('lms-document-template', true), - array('lms-userpanel-module', true), - array('laravel-library', true), - array('lavalite-theme', true), - array('lavalite-package', true), - array('lithium-library', true), - array('magento-library', true), - array('majima-plugin', true), - array('mako-package', true), - array('modx-extra', true), - array('modxevo-snippet', true), - array('modxevo-plugin', true), - array('modxevo-module', true), - array('modxevo-template', true), - array('modxevo-lib', true), - array('mediawiki-extension', true), - array('mediawiki-skin', true), - array('microweber-module', true), - array('modulework-module', true), - array('moodle-mod', true), - array('october-module', true), - array('october-plugin', true), - array('piwik-plugin', true), - array('pxcms-module', true), - array('pxcms-theme', true), - array('phpbb-extension', true), - array('pimcore-plugin', true), - array('plentymarkets-plugin', true), - array('ppi-module', true), - array('prestashop-module', true), - array('prestashop-theme', true), - array('puppet-module', true), - array('porto-container', true), - array('radphp-bundle', true), - array('redaxo-addon', true), - array('redaxo-bestyle-plugin', true), - array('reindex-theme', true), - array('reindex-plugin', true), - array('roundcube-plugin', true), - array('shopware-backend-plugin', true), - array('shopware-core-plugin', true), - array('shopware-frontend-plugin', true), - array('shopware-theme', true), - array('shopware-plugin', true), - array('shopware-frontend-theme', true), - array('silverstripe-module', true), - array('silverstripe-theme', true), - array('smf-module', true), - array('smf-theme', true), - array('sydes-module', true), - array('sydes-theme', true), - array('symfony1-plugin', true), - array('thelia-module', true), - array('thelia-frontoffice-template', true), - array('thelia-backoffice-template', true), - array('thelia-email-template', true), - array('tusk-task', true), - array('tusk-asset', true), - array('typo3-flow-plugin', true), - array('typo3-cms-extension', true), - array('userfrosting-sprinkle', true), - array('vanilla-plugin', true), - array('vanilla-theme', true), - array('whmcs-gateway', true), - array('wolfcms-plugin', true), - array('wordpress-plugin', true), - array('wordpress-core', false), - array('yawik-module', true), - array('zend-library', true), - array('zikula-module', true), - array('zikula-theme', true), - array('kodicms-plugin', true), - array('kodicms-media', true), - array('phifty-bundle', true), - array('phifty-library', true), - array('phifty-framework', true), - array('osclass-plugin', true), - array('osclass-theme', true), - array('osclass-language', true), - ); - } - - /** - * testInstallPath - * - * @dataProvider dataForTestInstallPath - */ - public function testInstallPath($type, $path, $name, $version = '1.0.0') - { - $installer = new Installer($this->io, $this->composer); - $package = new Package($name, $version, $version); - - $package->setType($type); - $result = $installer->getInstallPath($package); - $this->assertEquals($path, $result); - } - - /** - * dataFormTestInstallPath - */ - public function dataForTestInstallPath() - { - return array( - array('agl-module', 'More/MyTestPackage/', 'agl/my_test-package'), - array('aimeos-extension', 'ext/ai-test/', 'author/ai-test'), - array('annotatecms-module', 'addons/modules/my_module/', 'vysinsky/my_module'), - array('annotatecms-component', 'addons/components/my_component/', 'vysinsky/my_component'), - array('annotatecms-service', 'addons/services/my_service/', 'vysinsky/my_service'), - array('attogram-module', 'modules/my_module/', 'author/my_module'), - array('bitrix-module', 'bitrix/modules/my_module/', 'author/my_module'), - array('bitrix-component', 'bitrix/components/my_component/', 'author/my_component'), - array('bitrix-theme', 'bitrix/templates/my_theme/', 'author/my_theme'), - array('bitrix-d7-module', 'bitrix/modules/author.my_module/', 'author/my_module'), - array('bitrix-d7-component', 'bitrix/components/author/my_component/', 'author/my_component'), - array('bitrix-d7-template', 'bitrix/templates/author_my_template/', 'author/my_template'), - array('bonefish-package', 'Packages/bonefish/package/', 'bonefish/package'), - array('cakephp-plugin', 'Plugin/Ftp/', 'shama/ftp'), - array('chef-cookbook', 'Chef/mre/my_cookbook/', 'mre/my_cookbook'), - array('chef-role', 'Chef/roles/my_role/', 'mre/my_role'), - array('cockpit-module', 'cockpit/modules/addons/My_module/', 'piotr-cz/cockpit-my_module'), - array('codeigniter-library', 'application/libraries/my_package/', 'shama/my_package'), - array('codeigniter-module', 'application/modules/my_package/', 'shama/my_package'), - array('concrete5-block', 'application/blocks/concrete5_block/', 'remo/concrete5_block'), - array('concrete5-package', 'packages/concrete5_package/', 'remo/concrete5_package'), - array('concrete5-theme', 'application/themes/concrete5_theme/', 'remo/concrete5_theme'), - array('concrete5-core', 'concrete/', 'concrete5/core'), - array('concrete5-update', 'updates/concrete5/', 'concrete5/concrete5'), - array('craft-plugin', 'craft/plugins/my_plugin/', 'mdcpepper/my_plugin'), - array('croogo-plugin', 'Plugin/Sitemaps/', 'fahad19/sitemaps'), - array('croogo-theme', 'View/Themed/Readable/', 'rchavik/readable'), - array('decibel-app', 'app/someapp/', 'author/someapp'), - array('dokuwiki-plugin', 'lib/plugins/someplugin/', 'author/someplugin'), - array('dokuwiki-template', 'lib/tpl/sometemplate/', 'author/sometemplate'), - array('dolibarr-module', 'htdocs/custom/my_module/', 'shama/my_module'), - array('drupal-module', 'modules/my_module/', 'shama/my_module'), - array('drupal-theme', 'themes/my_module/', 'shama/my_module'), - array('drupal-profile', 'profiles/my_module/', 'shama/my_module'), - array('drupal-drush', 'drush/my_module/', 'shama/my_module'), - array('elgg-plugin', 'mod/sample_plugin/', 'test/sample_plugin'), - array('eliasis-component', 'components/my_component/', 'shama/my_component'), - array('eliasis-module', 'modules/my_module/', 'shama/my_module'), - array('eliasis-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), - array('eliasis-template', 'templates/my_template/', 'shama/my_template'), - array('ee3-addon', 'system/user/addons/ee_theme/', 'author/ee_theme'), - array('ee3-theme', 'themes/user/ee_package/', 'author/ee_package'), - array('ee2-addon', 'system/expressionengine/third_party/ee_theme/', 'author/ee_theme'), - array('ee2-theme', 'themes/third_party/ee_package/', 'author/ee_package'), - array('ezplatform-assets', 'web/assets/ezplatform/ezplatform_comp/', 'author/ezplatform_comp'), - array('ezplatform-meta-assets', 'web/assets/ezplatform/', 'author/ezplatform_comp'), - array('fuel-module', 'fuel/app/modules/module/', 'fuel/module'), - array('fuel-package', 'fuel/packages/orm/', 'fuel/orm'), - array('fuel-theme', 'fuel/app/themes/theme/', 'fuel/theme'), - array('fuelphp-component', 'components/demo/', 'fuelphp/demo'), - array('hurad-plugin', 'plugins/Akismet/', 'atkrad/akismet'), - array('hurad-theme', 'plugins/Hurad2013/', 'atkrad/Hurad2013'), - array('imagecms-template', 'templates/my_template/', 'shama/my_template'), - array('imagecms-module', 'application/modules/my_module/', 'shama/my_module'), - array('imagecms-library', 'application/libraries/my_library/', 'shama/my_library'), - array('itop-extension', 'extensions/my_extension/', 'shama/my_extension'), - array('joomla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), - array('kanboard-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), - array('kirby-plugin', 'site/plugins/my_plugin/', 'shama/my_plugin'), - array('kohana-module', 'modules/my_package/', 'shama/my_package'), - array('lms-plugin', 'plugins/MyPackage/', 'shama/MyPackage'), - array('lms-plugin', 'plugins/MyPackage/', 'shama/my_package'), - array('lms-template', 'templates/MyPackage/', 'shama/MyPackage'), - array('lms-template', 'templates/MyPackage/', 'shama/my_package'), - array('lms-document-template', 'documents/templates/MyPackage/', 'shama/MyPackage'), - array('lms-document-template', 'documents/templates/MyPackage/', 'shama/my_package'), - array('lms-userpanel-module', 'userpanel/modules/MyPackage/', 'shama/MyPackage'), - array('lms-userpanel-module', 'userpanel/modules/MyPackage/', 'shama/my_package'), - array('laravel-library', 'libraries/my_package/', 'shama/my_package'), - array('lavalite-theme', 'public/themes/my_theme/', 'shama/my_theme'), - array('lavalite-package', 'packages/my_group/my_package/', 'my_group/my_package'), - array('lithium-library', 'libraries/li3_test/', 'user/li3_test'), - array('magento-library', 'lib/foo/', 'test/foo'), - array('majima-plugin', 'plugins/MyPlugin/', 'shama/my-plugin'), - array('modx-extra', 'core/packages/extra/', 'vendor/extra'), - array('modxevo-snippet', 'assets/snippets/my_snippet/', 'shama/my_snippet'), - array('modxevo-plugin', 'assets/plugins/my_plugin/', 'shama/my_plugin'), - array('modxevo-module', 'assets/modules/my_module/', 'shama/my_module'), - array('modxevo-template', 'assets/templates/my_template/', 'shama/my_template'), - array('modxevo-lib', 'assets/lib/my_lib/', 'shama/my_lib'), - array('mako-package', 'app/packages/my_package/', 'shama/my_package'), - array('mediawiki-extension', 'extensions/APC/', 'author/APC'), - array('mediawiki-extension', 'extensions/APC/', 'author/APC-extension'), - array('mediawiki-extension', 'extensions/UploadWizard/', 'author/upload-wizard'), - array('mediawiki-extension', 'extensions/SyntaxHighlight_GeSHi/', 'author/syntax-highlight_GeSHi'), - array('mediawiki-skin', 'skins/someskin/', 'author/someskin-skin'), - array('mediawiki-skin', 'skins/someskin/', 'author/someskin'), - array('microweber-module', 'userfiles/modules/my-thing/', 'author/my-thing-module'), - array('modulework-module', 'modules/my_package/', 'shama/my_package'), - array('moodle-mod', 'mod/my_package/', 'shama/my_package'), - array('october-module', 'modules/my_plugin/', 'shama/my_plugin'), - array('october-plugin', 'plugins/shama/my_plugin/', 'shama/my_plugin'), - array('october-theme', 'themes/my_theme/', 'shama/my_theme'), - array('piwik-plugin', 'plugins/VisitSummary/', 'shama/visit-summary'), - array('prestashop-module', 'modules/a-module/', 'vendor/a-module'), - array('prestashop-theme', 'themes/a-theme/', 'vendor/a-theme'), - array('pxcms-module', 'app/Modules/Foo/', 'vendor/module-foo'), - array('pxcms-module', 'app/Modules/Foo/', 'vendor/pxcms-foo'), - array('pxcms-theme', 'themes/Foo/', 'vendor/theme-foo'), - array('pxcms-theme', 'themes/Foo/', 'vendor/pxcms-foo'), - array('phpbb-extension', 'ext/test/foo/', 'test/foo'), - array('phpbb-style', 'styles/foo/', 'test/foo'), - array('phpbb-language', 'language/foo/', 'test/foo'), - array('pimcore-plugin', 'plugins/MyPlugin/', 'ubikz/my_plugin'), - array('plentymarkets-plugin', 'HelloWorld/', 'plugin-hello-world'), - array('ppi-module', 'modules/foo/', 'test/foo'), - array('puppet-module', 'modules/puppet-name/', 'puppet/puppet-name'), - array('porto-container', 'app/Containers/container-name/', 'test/container-name'), - array('radphp-bundle', 'src/Migration/', 'atkrad/migration'), - array('redaxo-addon', 'redaxo/include/addons/my_plugin/', 'shama/my_plugin'), - array('redaxo-bestyle-plugin', 'redaxo/include/addons/be_style/plugins/my_plugin/', 'shama/my_plugin'), - array('reindex-theme', 'themes/my_module/', 'author/my_module'), - array('reindex-plugin', 'plugins/my_module/', 'author/my_module'), - array('roundcube-plugin', 'plugins/base/', 'test/base'), - array('roundcube-plugin', 'plugins/replace_dash/', 'test/replace-dash'), - array('shopware-backend-plugin', 'engine/Shopware/Plugins/Local/Backend/ShamaMyBackendPlugin/', 'shama/my-backend-plugin'), - array('shopware-core-plugin', 'engine/Shopware/Plugins/Local/Core/ShamaMyCorePlugin/', 'shama/my-core-plugin'), - array('shopware-frontend-plugin', 'engine/Shopware/Plugins/Local/Frontend/ShamaMyFrontendPlugin/', 'shama/my-frontend-plugin'), - array('shopware-theme', 'templates/my_theme/', 'shama/my-theme'), - array('shopware-frontend-theme', 'themes/Frontend/ShamaMyFrontendTheme/', 'shama/my-frontend-theme'), - array('shopware-plugin', 'custom/plugins/ShamaMyPlugin/', 'shama/my-plugin'), - array('silverstripe-module', 'my_module/', 'shama/my_module'), - array('silverstripe-module', 'sapphire/', 'silverstripe/framework', '2.4.0'), - array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0'), - array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0-rc1'), - array('silverstripe-module', 'framework/', 'silverstripe/framework', 'my/branch'), - array('silverstripe-theme', 'themes/my_theme/', 'shama/my_theme'), - array('smf-module', 'Sources/my_module/', 'shama/my_module'), - array('smf-theme', 'Themes/my_theme/', 'shama/my_theme'), - array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sfShamaPlugin'), - array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sf-shama-plugin'), - array('thelia-module', 'local/modules/my_module/', 'shama/my_module'), - array('thelia-frontoffice-template', 'templates/frontOffice/my_template_fo/', 'shama/my_template_fo'), - array('thelia-backoffice-template', 'templates/backOffice/my_template_bo/', 'shama/my_template_bo'), - array('thelia-email-template', 'templates/email/my_template_email/', 'shama/my_template_email'), - array('tusk-task', '.tusk/tasks/my_task/', 'shama/my_task'), - array('typo3-flow-package', 'Packages/Application/my_package/', 'shama/my_package'), - array('typo3-flow-build', 'Build/my_package/', 'shama/my_package'), - array('typo3-cms-extension', 'typo3conf/ext/my_extension/', 'shama/my_extension'), - array('userfrosting-sprinkle', 'app/sprinkles/my_sprinkle/', 'shama/my_sprinkle'), - array('vanilla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), - array('vanilla-theme', 'themes/my_theme/', 'shama/my_theme'), - array('whmcs-gateway', 'modules/gateways/gateway_name/', 'vendor/gateway_name'), - array('wolfcms-plugin', 'wolf/plugins/my_plugin/', 'shama/my_plugin'), - array('wordpress-plugin', 'wp-content/plugins/my_plugin/', 'shama/my_plugin'), - array('wordpress-muplugin', 'wp-content/mu-plugins/my_plugin/', 'shama/my_plugin'), - array('zend-extra', 'extras/library/zend_test/', 'shama/zend_test'), - array('zikula-module', 'modules/my-test_module/', 'my/test_module'), - array('zikula-theme', 'themes/my-test_theme/', 'my/test_theme'), - array('kodicms-media', 'cms/media/vendor/my_media/', 'shama/my_media'), - array('kodicms-plugin', 'cms/plugins/my_plugin/', 'shama/my_plugin'), - array('phifty-bundle', 'bundles/core/', 'shama/core'), - array('phifty-library', 'libraries/my-lib/', 'shama/my-lib'), - array('phifty-framework', 'frameworks/my-framework/', 'shama/my-framework'), - array('yawik-module', 'module/MyModule/', 'shama/my_module'), - array('osclass-plugin', 'oc-content/plugins/sample_plugin/', 'test/sample_plugin'), - array('osclass-theme', 'oc-content/themes/sample_theme/', 'test/sample_theme'), - array('osclass-language', 'oc-content/languages/sample_lang/', 'test/sample_lang'), - ); - } - - /** - * testGetCakePHPInstallPathException - * - * @return void - * - * @expectedException \InvalidArgumentException - */ - public function testGetCakePHPInstallPathException() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('shama/ftp', '1.0.0', '1.0.0'); - - $package->setType('cakephp-whoops'); - $result = $installer->getInstallPath($package); - } - - /** - * testCustomInstallPath - */ - public function testCustomInstallPath() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('shama/ftp', '1.0.0', '1.0.0'); - $package->setType('cakephp-plugin'); - $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); - $this->composer->setPackage($consumerPackage); - $consumerPackage->setExtra(array( - 'installer-paths' => array( - 'my/custom/path/{$name}/' => array( - 'shama/ftp', - 'foo/bar', - ), - ), - )); - $result = $installer->getInstallPath($package); - $this->assertEquals('my/custom/path/Ftp/', $result); - } - - /** - * testCustomInstallerName - */ - public function testCustomInstallerName() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('shama/cakephp-ftp-plugin', '1.0.0', '1.0.0'); - $package->setType('cakephp-plugin'); - $package->setExtra(array( - 'installer-name' => 'FTP', - )); - $result = $installer->getInstallPath($package); - $this->assertEquals('Plugin/FTP/', $result); - } - - /** - * testCustomTypePath - */ - public function testCustomTypePath() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('slbmeh/my_plugin', '1.0.0', '1.0.0'); - $package->setType('wordpress-plugin'); - $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); - $this->composer->setPackage($consumerPackage); - $consumerPackage->setExtra(array( - 'installer-paths' => array( - 'my/custom/path/{$name}/' => array( - 'type:wordpress-plugin' - ), - ), - )); - $result = $installer->getInstallPath($package); - $this->assertEquals('my/custom/path/my_plugin/', $result); - } - - /** - * testVendorPath - */ - public function testVendorPath() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('penyaskito/my_module', '1.0.0', '1.0.0'); - $package->setType('drupal-module'); - $consumerPackage = new RootPackage('drupal/drupal', '1.0.0', '1.0.0'); - $this->composer->setPackage($consumerPackage); - $consumerPackage->setExtra(array( - 'installer-paths' => array( - 'modules/custom/{$name}/' => array( - 'vendor:penyaskito' - ), - ), - )); - $result = $installer->getInstallPath($package); - $this->assertEquals('modules/custom/my_module/', $result); - } - - /** - * testNoVendorName - */ - public function testNoVendorName() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('sfPhpunitPlugin', '1.0.0', '1.0.0'); - - $package->setType('symfony1-plugin'); - $result = $installer->getInstallPath($package); - $this->assertEquals('plugins/sfPhpunitPlugin/', $result); - } - - /** - * testTypo3Inflection - */ - public function testTypo3Inflection() - { - $installer = new Installer($this->io, $this->composer); - $package = new Package('typo3/fluid', '1.0.0', '1.0.0'); - - $package->setAutoload(array( - 'psr-0' => array( - 'TYPO3\\Fluid' => 'Classes', - ), - )); - - $package->setType('typo3-flow-package'); - $result = $installer->getInstallPath($package); - $this->assertEquals('Packages/Application/TYPO3.Fluid/', $result); - } - - public function testUninstallAndDeletePackageFromLocalRepo() - { - $package = new Package('foo', '1.0.0', '1.0.0'); - - $installer = $this->getMock('Composer\Installers\Installer', array('getInstallPath'), array($this->io, $this->composer)); - $installer->expects($this->atLeastOnce())->method('getInstallPath')->with($package)->will($this->returnValue(sys_get_temp_dir().'/foo')); - - $repo = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); - $repo->expects($this->once())->method('hasPackage')->with($package)->will($this->returnValue(true)); - $repo->expects($this->once())->method('removePackage')->with($package); - - $installer->uninstall($repo, $package); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/MayaInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/MayaInstallerTest.php deleted file mode 100644 index 1e57696f8813c39be09d2cc3dc93a8c0470ef3a6..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/MayaInstallerTest.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\MayaInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase as BaseTestCase; - -class MayaInstallerTest extends BaseTestCase -{ - /** - * @var MayaInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new MayaInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - array('name' => $expected, 'type' => $type), - $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) - ); - } - - public function packageNameInflectionProvider() - { - return array( - // Should keep module name StudlyCase - array( - 'maya-module', - 'user-profile', - 'UserProfile' - ), - array( - 'maya-module', - 'maya-module', - 'Maya' - ), - array( - 'maya-module', - 'blog', - 'Blog' - ), - // tests that exactly one '-module' is cut off - array( - 'maya-module', - 'some-module-module', - 'SomeModule', - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php deleted file mode 100644 index a51c0bb2eb559dfacaf951ad588440541226529c..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\MediaWikiInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase as BaseTestCase; - -class MediaWikiInstallerTest extends BaseTestCase -{ - /** - * @var MediaWikiInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new MediaWikiInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), - array('name' => $expected, 'type'=>$type) - ); - } - - public function packageNameInflectionProvider() - { - return array( - array( - 'mediawiki-extension', - 'sub-page-list', - 'SubPageList', - ), - array( - 'mediawiki-extension', - 'sub-page-list-extension', - 'SubPageList', - ), - array( - 'mediawiki-extension', - 'semantic-mediawiki', - 'SemanticMediawiki', - ), - // tests that exactly one '-skin' is cut off, and that skins do not get ucwords treatment like extensions - array( - 'mediawiki-skin', - 'some-skin-skin', - 'some-skin', - ), - // tests that names without '-skin' suffix stay valid - array( - 'mediawiki-skin', - 'someotherskin', - 'someotherskin', - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php deleted file mode 100644 index 6e615c772fa2672826c3605c586b12880ff94eae..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\OctoberInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase as BaseTestCase; - -class OctoberInstallerTest extends BaseTestCase -{ - /** - * @var OctoberInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new OctoberInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)), - array('name' => $expected, 'type' => $type) - ); - } - - public function packageNameInflectionProvider() - { - return array( - array( - 'october-plugin', - 'subpagelist', - 'subpagelist', - ), - array( - 'october-plugin', - 'subpagelist-plugin', - 'subpagelist', - ), - array( - 'october-plugin', - 'semanticoctober', - 'semanticoctober', - ), - // tests that exactly one '-theme' is cut off - array( - 'october-theme', - 'some-theme-theme', - 'some-theme', - ), - // tests that names without '-theme' suffix stay valid - array( - 'october-theme', - 'someothertheme', - 'someothertheme', - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/OntoWikiInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/OntoWikiInstallerTest.php deleted file mode 100644 index 9558a6b243d575bd8b3167169c389d8eeac4f4d6..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/OntoWikiInstallerTest.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\OntoWikiInstaller; -use PHPUnit\Framework\TestCase as BaseTestCase; - -/** - * Test for the OntoWikiInstaller - * code was taken from DokuWikiInstaller - */ -class OntoWikiInstallerTest extends BaseTestCase -{ - /** - * @var OntoWikiInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new OntoWikiInstaller(); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), - array('name' => $expected, 'type'=>$type) - ); - } - - public function packageNameInflectionProvider() - { - return array( - array( - 'ontowiki-extension', - 'CSVImport.ontowiki', - 'csvimport', - ), - array( - 'ontowiki-extension', - 'csvimport', - 'csvimport', - ), - array( - 'ontowiki-extension', - 'some_ontowiki_extension', - 'some_ontowiki_extension', - ), - array( - 'ontowiki-extension', - 'some_ontowiki_extension.ontowiki', - 'some_ontowiki_extension', - ), - array( - 'ontowiki-translation', - 'de-translation.ontowiki', - 'de', - ), - array( - 'ontowiki-translation', - 'en-US-translation.ontowiki', - 'en-us', - ), - array( - 'ontowiki-translation', - 'en-US-translation', - 'en-us', - ), - array( - 'ontowiki-theme', - 'blue-theme.ontowiki', - 'blue', - ), - array( - 'ontowiki-theme', - 'blue-theme', - 'blue', - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php deleted file mode 100644 index ea79374bf51c37063fafefb26a420b4a43806a63..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\PimcoreInstaller; -use Composer\Package\Package; -use Composer\Composer; - -class PimcoreInstallerTest extends TestCase -{ - private $composer; - private $io; - - /** - * setUp - * - * @return void - */ - public function setUp() - { - $this->package = new Package('CamelCased', '1.0', '1.0'); - $this->io = $this->getMock('Composer\IO\PackageInterface'); - $this->composer = new Composer(); - } - - /** - * testInflectPackageVars - * - * @return void - */ - public function testInflectPackageVars() - { - $installer = new PimcoreInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'CamelCased')); - $this->assertEquals($result, array('name' => 'CamelCased')); - - $installer = new PimcoreInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'with-dash')); - $this->assertEquals($result, array('name' => 'WithDash')); - - $installer = new PimcoreInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'with_underscore')); - $this->assertEquals($result, array('name' => 'WithUnderscore')); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php deleted file mode 100644 index 8d9ff3f82e11a6f13bdf45acc12e1dcde1c30fc4..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Composer; -use Composer\Installers\PiwikInstaller; -use Composer\Package\Package; -use Composer\Package\PackageInterface; - -/** - * Class PiwikInstallerTest - * - * @package Composer\Installers\Test - */ -class PiwikInstallerTest extends TestCase -{ - /** - * @varComposer - */ - private $composer; - - /** - * @var PackageInterface - */ - private $io; - - /** - * @var Package - */ - private $package; - - /** - * setUp - * - * @return void - */ - public function setUp() - { - $this->package = new Package('VisitSummary', '1.0', '1.0'); - $this->io = $this->getMock('Composer\IO\PackageInterface'); - $this->composer = new Composer(); - } - - /** - * testInflectPackageVars - * - * @return void - */ - public function testInflectPackageVars() - { - $installer = new PiwikInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'VisitSummary')); - $this->assertEquals($result, array('name' => 'VisitSummary')); - - $installer = new PiwikInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'visit-summary')); - $this->assertEquals($result, array('name' => 'VisitSummary')); - - $installer = new PiwikInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => 'visit_summary')); - $this->assertEquals($result, array('name' => 'VisitSummary')); - } - -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/SiteDirectInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/SiteDirectInstallerTest.php deleted file mode 100644 index e36210d5ae04a09d8ca2efc4b90cdb0c5eaad14b..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/SiteDirectInstallerTest.php +++ /dev/null @@ -1,120 +0,0 @@ -<?php - -namespace Composer\Installers\Test; - -use Composer\Composer; -use Composer\Installers\SiteDirectInstaller; -use Composer\Package\Package; - -class SiteDirectInstallerTest extends TestCase -{ - /** @var SiteDirectInstaller $installer */ - protected $installer; - - /** @var Package */ - private $package; - - public function SetUp() - { - $this->package = new Package('sitedirect/some_name', '1.0.9', '1.0'); - $this->installer = new SiteDirectInstaller( - $this->package, - new Composer() - ); - - } - - /** - * @dataProvider dataProvider - */ - public function testInflectPackageVars($data, $expected) - { - $result = $this->installer->inflectPackageVars($data); - $this->assertEquals($result, $expected); - } - - /** - * @dataProvider dataProvider - */ - public function testInstallPath($data, $expected) - { - $result = $this->installer->inflectPackageVars($data); - $path = $this->createPackage($data); - - // use $result to get the proper capitalization for the vendor path - $expectedPath = "modules/{$result['vendor']}/{$result['name']}/"; - $notExpectedPath = "modules/{$data['vendor']}/{$data['name']}/"; - $this->assertEquals($expectedPath, $path); - $this->assertNotEquals($notExpectedPath, $path); - } - - /** - * @param $data - * @return string - */ - private function createPackage($data) - { - $fullName = "{$data['vendor']}/{$data['name']}"; - - $package = new Package($fullName, '1.0', '1.0'); - $package->setType('sitedirect-module'); - $installer = new SiteDirectInstaller($package, new Composer()); - - $path = $installer->getInstallPath($package, 'sitedirect'); - return $path; - } - - public function dataProvider() - { - return array( - array( - 'data' => array( - 'name' => 'kernel', - 'vendor' => 'sitedirect', - 'type' => 'sitedirect-module', - ), - 'expected' => array( - 'name' => 'Kernel', - 'vendor' => 'SiteDirect', - 'type' => 'sitedirect-module', - ) - ), - array( - 'data' => array( - 'name' => 'that_guy', - 'vendor' => 'whatGuy', - 'type' => 'sitedirect-module', - ), - 'expected' => array( - 'name' => 'ThatGuy', - 'vendor' => 'whatGuy', - 'type' => 'sitedirect-module', - ) - ), - array( - 'data' => array( - 'name' => 'checkout', - 'vendor' => 'someVendor', - 'type' => 'sitedirect-plugin', - ), - 'expected' => array( - 'name' => 'Checkout', - 'vendor' => 'someVendor', - 'type' => 'sitedirect-plugin', - ) - ), - array( - 'data' => array( - 'name' => 'checkout', - 'vendor' => 'siteDirect', - 'type' => 'sitedirect-plugin', - ), - 'expected' => array( - 'name' => 'Checkout', - 'vendor' => 'SiteDirect', - 'type' => 'sitedirect-plugin', - ) - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/SyDESInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/SyDESInstallerTest.php deleted file mode 100644 index f1d120e5dad37919520c30dc2bf5f7236323aa9f..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/SyDESInstallerTest.php +++ /dev/null @@ -1,82 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\SyDESInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase as BaseTestCase; - -class SyDESInstallerTest extends BaseTestCase -{ - /** - * @var SyDESInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new SyDESInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - array('name' => $expected, 'type' => $type), - $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) - ); - } - - public function packageNameInflectionProvider() - { - return array( - // modules - array( - 'sydes-module', - 'name', - 'Name' - ), - array( - 'sydes-module', - 'sample-name', - 'SampleName' - ), - array( - 'sydes-module', - 'sydes-name', - 'Name' - ), - array( - 'sydes-module', - 'sample-name-module', - 'SampleName', - ), - array( - 'sydes-module', - 'sydes-sample-name-module', - 'SampleName' - ), - // themes - array( - 'sydes-theme', - 'some-theme-theme', - 'some-theme', - ), - array( - 'sydes-theme', - 'sydes-sometheme', - 'sometheme', - ), - array( - 'sydes-theme', - 'Sample-Name', - 'sample-name' - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php b/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php deleted file mode 100644 index 0e3e7319b74a0cddf5ccf07d22139dffe2bd1b97..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php - -/* - * This file is part of Composer. - * - * (c) Nils Adermann <naderman@naderman.de> - * Jordi Boggiano <j.boggiano@seld.be> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Installers\Test; - -use Composer\Package\Version\VersionParser; -use Composer\Package\Package; -use Composer\Package\AliasPackage; -use Composer\Package\LinkConstraint\VersionConstraint; -use Composer\Util\Filesystem; -use PHPUnit\Framework\TestCase as BaseTestCase; - -abstract class TestCase extends BaseTestCase -{ - private static $parser; - - protected static function getVersionParser() - { - if (!self::$parser) { - self::$parser = new VersionParser(); - } - - return self::$parser; - } - - protected function getVersionConstraint($operator, $version) - { - return new VersionConstraint( - $operator, - self::getVersionParser()->normalize($version) - ); - } - - protected function getPackage($name, $version) - { - $normVersion = self::getVersionParser()->normalize($version); - - return new Package($name, $normVersion, $version); - } - - protected function getAliasPackage($package, $version) - { - $normVersion = self::getVersionParser()->normalize($version); - - return new AliasPackage($package, $normVersion, $version); - } - - protected function ensureDirectoryExistsAndClear($directory) - { - $fs = new Filesystem(); - if (is_dir($directory)) { - $fs->removeDirectory($directory); - } - mkdir($directory, 0777, true); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/VgmcpInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/VgmcpInstallerTest.php deleted file mode 100644 index 1a91588db1bbb91ae9ad240234f58987b052282b..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/VgmcpInstallerTest.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Installers\VgmcpInstaller; -use Composer\Package\Package; -use Composer\Composer; -use PHPUnit\Framework\TestCase as BaseTestCase; - -class VgmcpInstallerTest extends BaseTestCase -{ - /** - * @var VgmcpInstaller - */ - private $installer; - - public function setUp() - { - $this->installer = new VgmcpInstaller( - new Package('NyanCat', '4.2', '4.2'), - new Composer() - ); - } - - /** - * @dataProvider packageNameInflectionProvider - */ - public function testInflectPackageVars($type, $name, $expected) - { - $this->assertEquals( - array('name' => $expected, 'type' => $type), - $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) - ); - } - - public function packageNameInflectionProvider() - { - return array( - // Should keep bundle name StudlyCase - array( - 'vgmcp-bundle', - 'user-profile', - 'UserProfile' - ), - array( - 'vgmcp-bundle', - 'vgmcp-bundle', - 'Vgmcp' - ), - array( - 'vgmcp-bundle', - 'blog', - 'Blog' - ), - // tests that exactly one '-bundle' is cut off - array( - 'vgmcp-bundle', - 'some-bundle-bundle', - 'SomeBundle', - ), - // tests that exactly one '-theme' is cut off - array( - 'vgmcp-theme', - 'some-theme-theme', - 'SomeTheme', - ), - // tests that names without '-theme' suffix stay valid - array( - 'vgmcp-theme', - 'someothertheme', - 'Someothertheme', - ), - // Should keep theme name StudlyCase - array( - 'vgmcp-theme', - 'adminlte-advanced', - 'AdminlteAdvanced' - ), - ); - } -} diff --git a/vendor/composer/installers/tests/Composer/Installers/Test/YawikInstallerTest.php b/vendor/composer/installers/tests/Composer/Installers/Test/YawikInstallerTest.php deleted file mode 100644 index d8d35ff245730609edf670fefb61775b48df9053..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/Composer/Installers/Test/YawikInstallerTest.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -namespace Composer\Installers\Test; - -use Composer\Composer; -use Composer\Installers\YawikInstaller; -use Composer\Package\Package; -use Composer\Package\PackageInterface; - -/** - * Class YawikInstallerTest - * - * @package Composer\Installers\Test - */ -class YawikInstallerTest extends TestCase -{ - /** - * @varComposer - */ - private $composer; - - /** - * @var PackageInterface - */ - private $io; - - /** - * @var Package - */ - private $package; - - /** - * setUp - * - * @return void - */ - public function setUp() - { - $this->package = new Package('YawikCompanyRegistration', '1.0', '1.0'); - $this->io = $this->getMock('Composer\IO\PackageInterface'); - $this->composer = new Composer(); - } - - /** - * testInflectPackageVars - * - * @dataProvider packageNameProvider - * @return void - */ - public function testInflectPackageVars($input) - { - $installer = new YawikInstaller($this->package, $this->composer); - $result = $installer->inflectPackageVars(array('name' => $input)); - $this->assertEquals($result, array('name' => 'YawikCompanyRegistration')); - } - - public function packageNameProvider() - { - return array( - array('yawik-company-registration'), - array('yawik_company_registration'), - array('YawikCompanyRegistration') - ); - } -} diff --git a/vendor/composer/installers/tests/bootstrap.php b/vendor/composer/installers/tests/bootstrap.php deleted file mode 100644 index 30c8fdc67a059c166d31c7e2cba3d8d0c62c8b36..0000000000000000000000000000000000000000 --- a/vendor/composer/installers/tests/bootstrap.php +++ /dev/null @@ -1,4 +0,0 @@ -<?php - -$loader = require __DIR__ . '/../src/bootstrap.php'; -$loader->add('Composer\Installers\Test', __DIR__); diff --git a/vendor/composer/semver/CHANGELOG.md b/vendor/composer/semver/CHANGELOG.md index ee0c2ef349304ad1383850425f116e993e541860..e5009d7b62892a65925bfaecdbdbbf1a054ffa82 100644 --- a/vendor/composer/semver/CHANGELOG.md +++ b/vendor/composer/semver/CHANGELOG.md @@ -3,10 +3,6 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -### [1.5.1] 2020-01-13 - - * Fixed: Parsing of aliased version was not validating the alias to be a valid version - ### [1.5.0] 2019-03-19 * Added: some support for date versions (e.g. 201903) in `~` operator @@ -66,8 +62,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint` * Changed: code style using php-cs-fixer. -[1.5.1]: https://github.com/composer/semver/compare/1.5.0...1.5.1 -[1.5.0]: https://github.com/composer/semver/compare/1.4.2...1.5.0 [1.4.2]: https://github.com/composer/semver/compare/1.4.1...1.4.2 [1.4.1]: https://github.com/composer/semver/compare/1.4.0...1.4.1 [1.4.0]: https://github.com/composer/semver/compare/1.3.0...1.4.0 diff --git a/vendor/composer/semver/composer.json b/vendor/composer/semver/composer.json index 981e7d1552f083415d913ab9f127b7a9698346bd..b0400cd7b09271eb7e1a17c3943f4cbf5d07f681 100644 --- a/vendor/composer/semver/composer.json +++ b/vendor/composer/semver/composer.json @@ -34,7 +34,8 @@ "php": "^5.3.2 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, "autoload": { "psr-4": { diff --git a/vendor/composer/semver/src/Constraint/Constraint.php b/vendor/composer/semver/src/Constraint/Constraint.php index c8c90f02e0084c55a023623df8e9cdfa147049d6..7a21eb47f5446207d6aef3260d3e663124915c72 100644 --- a/vendor/composer/semver/src/Constraint/Constraint.php +++ b/vendor/composer/semver/src/Constraint/Constraint.php @@ -184,7 +184,7 @@ public function matchSpecific(Constraint $provider, $compareBranches = false) // '!=' operator is match when other operator is not '==' operator or version is not match // these kinds of comparisons always have a solution if ($isNonEqualOp || $isProviderNonEqualOp) { - return (!$isEqualOp && !$isProviderEqualOp) + return !$isEqualOp && !$isProviderEqualOp || $this->versionCompare($provider->version, $this->version, '!=', $compareBranches); } @@ -197,9 +197,13 @@ public function matchSpecific(Constraint $provider, $compareBranches = false) if ($this->versionCompare($provider->version, $this->version, self::$transOpInt[$this->operator], $compareBranches)) { // special case, e.g. require >= 1.0 and provide < 1.0 // 1.0 >= 1.0 but 1.0 is outside of the provided interval - return !($provider->version === $this->version + if ($provider->version === $this->version && self::$transOpInt[$provider->operator] === $providerNoEqualOp - && self::$transOpInt[$this->operator] !== $noEqualOp); + && self::$transOpInt[$this->operator] !== $noEqualOp) { + return false; + } + + return true; } return false; diff --git a/vendor/composer/semver/src/Constraint/EmptyConstraint.php b/vendor/composer/semver/src/Constraint/EmptyConstraint.php index cb89cd2645595b2c5dd9936edafbfd33e7420e2f..faba56bf0c814c0134558737bab3b598643c0879 100644 --- a/vendor/composer/semver/src/Constraint/EmptyConstraint.php +++ b/vendor/composer/semver/src/Constraint/EmptyConstraint.php @@ -46,7 +46,7 @@ public function getPrettyString() return $this->prettyString; } - return (string) $this; + return $this->__toString(); } /** diff --git a/vendor/composer/semver/src/Constraint/MultiConstraint.php b/vendor/composer/semver/src/Constraint/MultiConstraint.php index f8a60e4e130e857b97f9230311d7e8988f67ff97..0c547afd45118d489b4bbaca99aabde9c10e1858 100644 --- a/vendor/composer/semver/src/Constraint/MultiConstraint.php +++ b/vendor/composer/semver/src/Constraint/MultiConstraint.php @@ -102,7 +102,7 @@ public function getPrettyString() return $this->prettyString; } - return (string) $this; + return $this->__toString(); } /** diff --git a/vendor/composer/semver/src/Semver.php b/vendor/composer/semver/src/Semver.php index 3ab2b68ab4b1c414c836b63e8a30234ac73a56de..0225bb55ad645cdb9679d68a6e5c172b58ba13fe 100644 --- a/vendor/composer/semver/src/Semver.php +++ b/vendor/composer/semver/src/Semver.php @@ -37,9 +37,9 @@ public static function satisfies($version, $constraints) $versionParser = self::$versionParser; $provider = new Constraint('==', $versionParser->normalize($version)); - $parsedConstraints = $versionParser->parseConstraints($constraints); + $constraints = $versionParser->parseConstraints($constraints); - return $parsedConstraints->matches($provider); + return $constraints->matches($provider); } /** diff --git a/vendor/composer/semver/src/VersionParser.php b/vendor/composer/semver/src/VersionParser.php index 9a7d0dbb2671503c4b1249f7519b4c61280acc31..475e9cc0f93ca93ebf64055630bb58ffb1d60a1e 100644 --- a/vendor/composer/semver/src/VersionParser.php +++ b/vendor/composer/semver/src/VersionParser.php @@ -52,12 +52,11 @@ public static function parseStability($version) { $version = preg_replace('{#.+$}i', '', $version); - if (strpos($version, 'dev-') === 0 || '-dev' === substr($version, -4)) { + if ('dev-' === substr($version, 0, 4) || '-dev' === substr($version, -4)) { return 'dev'; } preg_match('{' . self::$modifierRegex . '(?:\+.*)?$}i', strtolower($version), $match); - if (!empty($match[3])) { return 'dev'; } @@ -108,9 +107,6 @@ public function normalize($version, $fullVersion = null) // strip off aliasing if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) { - // verify that the alias is a version without constraint - $this->normalize($match[2]); - $version = $match[1]; } @@ -120,7 +116,7 @@ public function normalize($version, $fullVersion = null) } // if requirement is branch-like, use full name - if (stripos($version, 'dev-') === 0) { + if ('dev-' === strtolower(substr($version, 0, 4))) { return 'dev-' . substr($version, 4); } @@ -240,7 +236,6 @@ public function parseConstraints($constraints) $orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints)); $orGroups = array(); - foreach ($orConstraints as $constraints) { $andConstraints = preg_split('{(?<!^|as|[=>< ,]) *(?<!-)[, ](?!-) *(?!,|as|$)}', $constraints); if (count($andConstraints) > 1) { @@ -273,9 +268,9 @@ public function parseConstraints($constraints) && 2 === count($orGroups[0]->getConstraints()) && 2 === count($orGroups[1]->getConstraints()) && ($a = (string) $orGroups[0]) - && strpos($a, '[>=') === 0 && (false !== ($posA = strpos($a, '<', 4))) + && substr($a, 0, 3) === '[>=' && (false !== ($posA = strpos($a, '<', 4))) && ($b = (string) $orGroups[1]) - && strpos($b, '[>=') === 0 && (false !== ($posB = strpos($b, '<', 4))) + && substr($b, 0, 3) === '[>=' && (false !== ($posB = strpos($b, '<', 4))) && substr($a, $posA + 2, -1) === substr($b, 4, $posB - 5) ) { $constraint = new MultiConstraint(array( @@ -319,7 +314,7 @@ private function parseConstraint($constraint) // version, to ensure that unstable instances of the current version are allowed. However, if a stability // suffix is added to the constraint, then a >= match on the current version is used instead. if (preg_match('{^~>?' . $versionRegex . '$}i', $constraint, $matches)) { - if (strpos($constraint, '~>') === 0) { + if (substr($constraint, 0, 2) === '~>') { throw new \UnexpectedValueException( 'Could not parse version constraint ' . $constraint . ': ' . 'Invalid operator "~>", you probably meant to use the "~" operator' @@ -459,11 +454,11 @@ private function parseConstraint($constraint) try { $version = $this->normalize($matches[2]); - if (!empty($stabilityModifier) && self::parseStability($version) === 'stable') { + if (!empty($stabilityModifier) && $this->parseStability($version) === 'stable') { $version .= '-' . $stabilityModifier; } elseif ('<' === $matches[1] || '>=' === $matches[1]) { if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) { - if (strpos($matches[2], 'dev-') !== 0) { + if (substr($matches[2], 0, 4) !== 'dev-') { $version .= '-dev'; } } @@ -508,7 +503,7 @@ private function manipulateVersionString($matches, $position, $increment = 0, $p // Return null on a carry overflow if ($i === 1) { - return null; + return; } } } diff --git a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php index cb47c01e46ae32af553977a49e18c88e56be1cfb..44857288dd2ed6076b074a4f6207471060b85d46 100644 --- a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php +++ b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php @@ -73,37 +73,10 @@ class EmailLexer extends AbstractLexer '\0' => self::C_NUL, ); - /** - * @var bool - */ protected $hasInvalidTokens = false; - /** - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int}|array<empty, empty> - */ - protected $previous = []; - - /** - * The last matched/seen token. - * - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int} - */ - public $token; + protected $previous; - /** - * The next token in the input. - * - * @var array|null - */ - public $lookahead; - - /** - * @psalm-var array{value:'', type:null, position:0} - */ private static $nullToken = [ 'value' => '', 'type' => null, @@ -113,7 +86,6 @@ class EmailLexer extends AbstractLexer public function __construct() { $this->previous = $this->token = self::$nullToken; - $this->lookahead = null; } /** @@ -126,20 +98,15 @@ public function reset() $this->previous = $this->token = self::$nullToken; } - /** - * @return bool - */ public function hasInvalidTokens() { return $this->hasInvalidTokens; } /** - * @param int $type + * @param string $type * @throws \UnexpectedValueException * @return boolean - * - * @psalm-suppress InvalidScalarArgument */ public function find($type) { @@ -155,7 +122,7 @@ public function find($type) /** * getPrevious * - * @return array + * @return array token */ public function getPrevious() { @@ -229,11 +196,6 @@ protected function getType(&$value) return self::GENERIC; } - /** - * @param string $value - * - * @return bool - */ protected function isValid($value) { if (isset($this->charValue[$value])) { diff --git a/vendor/egulias/email-validator/EmailValidator/EmailParser.php b/vendor/egulias/email-validator/EmailValidator/EmailParser.php index 6b7bad6692799a6842687a3f971edb14f996a115..5bf605ac2f2a0d2adc2dc92a348968905aeee191 100644 --- a/vendor/egulias/email-validator/EmailValidator/EmailParser.php +++ b/vendor/egulias/email-validator/EmailValidator/EmailParser.php @@ -17,33 +17,11 @@ class EmailParser { const EMAIL_MAX_LENGTH = 254; - /** - * @var array - */ - protected $warnings = []; - - /** - * @var string - */ + protected $warnings; protected $domainPart = ''; - - /** - * @var string - */ protected $localPart = ''; - /** - * @var EmailLexer - */ protected $lexer; - - /** - * @var LocalPart - */ protected $localPartParser; - - /** - * @var DomainPart - */ protected $domainPartParser; public function __construct(EmailLexer $lexer) @@ -51,6 +29,7 @@ public function __construct(EmailLexer $lexer) $this->lexer = $lexer; $this->localPartParser = new LocalPart($this->lexer); $this->domainPartParser = new DomainPart($this->lexer); + $this->warnings = new \SplObjectStorage(); } /** @@ -78,9 +57,6 @@ public function parse($str) return array('local' => $this->localPart, 'domain' => $this->domainPart); } - /** - * @return Warning\Warning[] - */ public function getWarnings() { $localPartWarnings = $this->localPartParser->getWarnings(); @@ -92,17 +68,11 @@ public function getWarnings() return $this->warnings; } - /** - * @return string - */ public function getParsedDomainPart() { return $this->domainPart; } - /** - * @param string $email - */ protected function setParts($email) { $parts = explode('@', $email); @@ -110,9 +80,6 @@ protected function setParts($email) $this->localPart = $parts[0]; } - /** - * @return bool - */ protected function hasAtToken() { $this->lexer->moveNext(); diff --git a/vendor/egulias/email-validator/EmailValidator/EmailValidator.php b/vendor/egulias/email-validator/EmailValidator/EmailValidator.php index a30f21dcd30a137ee2f3a3afc04a148c43a378ad..1c2770721e2b0fefa13738d69609662f4a12a129 100644 --- a/vendor/egulias/email-validator/EmailValidator/EmailValidator.php +++ b/vendor/egulias/email-validator/EmailValidator/EmailValidator.php @@ -13,12 +13,12 @@ class EmailValidator private $lexer; /** - * @var Warning\Warning[] + * @var array */ - protected $warnings = []; + protected $warnings; /** - * @var InvalidEmail|null + * @var InvalidEmail */ protected $error; @@ -58,7 +58,7 @@ public function getWarnings() } /** - * @return InvalidEmail|null + * @return InvalidEmail */ public function getError() { diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php b/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php index 0613e31d8cbb50704805300931bf0208bcebc14b..8ed240b3935e4cd36bc63e11d90f3029f5397a36 100644 --- a/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php +++ b/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php @@ -35,10 +35,6 @@ class DomainPart extends Parser { const DOMAIN_MAX_LENGTH = 254; - - /** - * @var string - */ protected $domainPart = ''; public function parse($domainPart) @@ -99,18 +95,11 @@ private function checkInvalidTokensAfterAT() } } - /** - * @return string - */ public function getDomainPart() { return $this->domainPart; } - /** - * @param string $addressLiteral - * @param int $maxGroups - */ public function checkIPV6Tag($addressLiteral, $maxGroups = 8) { $prev = $this->lexer->getPrevious(); @@ -154,9 +143,6 @@ public function checkIPV6Tag($addressLiteral, $maxGroups = 8) } } - /** - * @return string - */ protected function doParseDomainPart() { $domain = ''; @@ -203,7 +189,7 @@ protected function doParseDomainPart() return $domain; } - private function checkNotAllowedChars(array $token) + private function checkNotAllowedChars($token) { $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; if (isset($notAllowed[$token['type']])) { @@ -211,9 +197,6 @@ private function checkNotAllowedChars(array $token) } } - /** - * @return string|false - */ protected function parseDomainLiteral() { if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { @@ -230,9 +213,6 @@ protected function parseDomainLiteral() return $this->doParseDomainLiteral(); } - /** - * @return string|false - */ protected function doParseDomainLiteral() { $IPv6TAG = false; @@ -300,11 +280,6 @@ protected function doParseDomainLiteral() return $addressLiteral; } - /** - * @param string $addressLiteral - * - * @return string|false - */ protected function checkIPV4Tag($addressLiteral) { $matchesIP = array(); @@ -322,13 +297,13 @@ protected function checkIPV4Tag($addressLiteral) return false; } // Convert IPv4 part to IPv6 format for further testing - $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; + $addressLiteral = substr($addressLiteral, 0, $index) . '0:0'; } return $addressLiteral; } - protected function checkDomainPartExceptions(array $prev) + protected function checkDomainPartExceptions($prev) { $invalidDomainTokens = array( EmailLexer::S_DQUOTE => true, @@ -363,9 +338,6 @@ protected function checkDomainPartExceptions(array $prev) } } - /** - * @return bool - */ protected function hasBrackets() { if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { @@ -381,7 +353,7 @@ protected function hasBrackets() return true; } - protected function checkLabelLength(array $prev) + protected function checkLabelLength($prev) { if ($this->lexer->token['type'] === EmailLexer::S_DOT && $prev['type'] === EmailLexer::GENERIC && diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php index 3c21f34ac07ebdf9b33bc754847e5644b268eb96..fa1d17b7f4e1f5717b5e79344a2074d884589a43 100644 --- a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php +++ b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php @@ -5,6 +5,7 @@ use Egulias\EmailValidator\Exception\DotAtEnd; use Egulias\EmailValidator\Exception\DotAtStart; use Egulias\EmailValidator\EmailLexer; +use Egulias\EmailValidator\EmailValidator; use Egulias\EmailValidator\Exception\ExpectingAT; use Egulias\EmailValidator\Exception\ExpectingATEXT; use Egulias\EmailValidator\Exception\UnclosedQuotedString; @@ -19,7 +20,6 @@ public function parse($localPart) $parseDQuote = true; $closingQuote = false; $openedParenthesis = 0; - $totalLength = 0; while ($this->lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { @@ -35,13 +35,12 @@ public function parse($localPart) $this->parseComments(); $openedParenthesis += $this->getOpenedParenthesis(); } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { if ($openedParenthesis === 0) { throw new UnopenedComment(); + } else { + $openedParenthesis--; } - - $openedParenthesis--; } $this->checkConsecutiveDots(); @@ -59,18 +58,15 @@ public function parse($localPart) $this->parseFWS(); } - $totalLength += strlen($this->lexer->token['value']); $this->lexer->moveNext(); } - if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { + $prev = $this->lexer->getPrevious(); + if (strlen($prev['value']) > LocalTooLong::LOCAL_PART_LENGTH) { $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); } } - /** - * @return bool - */ protected function parseDoubleQuote() { $parseAgain = true; @@ -122,10 +118,7 @@ protected function parseDoubleQuote() return $parseAgain; } - /** - * @param bool $closingQuote - */ - protected function isInvalidToken(array $token, $closingQuote) + protected function isInvalidToken($token, $closingQuote) { $forbidden = array( EmailLexer::S_COMMA, diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php b/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php index d0673b992e8eb908664443c9fb4b5e52c9ed275c..fa7bd44b3021b67c768708c16393d880b9997595 100644 --- a/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php +++ b/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php @@ -21,19 +21,8 @@ abstract class Parser { - /** - * @var \Egulias\EmailValidator\Warning\Warning[] - */ protected $warnings = []; - - /** - * @var EmailLexer - */ protected $lexer; - - /** - * @var int - */ protected $openedParenthesis = 0; public function __construct(EmailLexer $lexer) @@ -41,17 +30,11 @@ public function __construct(EmailLexer $lexer) $this->lexer = $lexer; } - /** - * @return \Egulias\EmailValidator\Warning\Warning[] - */ public function getWarnings() { return $this->warnings; } - /** - * @param string $str - */ abstract public function parse($str); /** @return int */ @@ -97,9 +80,6 @@ protected function parseComments() } } - /** - * @return bool - */ protected function isUnclosedComment() { try { @@ -142,9 +122,6 @@ protected function checkConsecutiveDots() } } - /** - * @return bool - */ protected function isFWS() { if ($this->escaped()) { @@ -163,14 +140,11 @@ protected function isFWS() return false; } - /** - * @return bool - */ protected function escaped() { $previous = $this->lexer->getPrevious(); - if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH + if ($previous['type'] === EmailLexer::S_BACKSLASH && $this->lexer->token['type'] !== EmailLexer::GENERIC ) { @@ -180,9 +154,6 @@ protected function escaped() return false; } - /** - * @return bool - */ protected function warnEscaping() { if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { @@ -203,11 +174,6 @@ protected function warnEscaping() } - /** - * @param bool $hasClosingQuote - * - * @return bool - */ protected function checkDQUOTE($hasClosingQuote) { if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php index da13253eeaec84f3cd6e9f9eb34ce8a64cbebd2a..e5c3e5df90a782baebd3a585b63e1001610c6c78 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php @@ -15,13 +15,13 @@ class DNSCheckValidation implements EmailValidation private $warnings = []; /** - * @var InvalidEmail|null + * @var InvalidEmail */ private $error; - + public function __construct() { - if (!function_exists('idn_to_ascii')) { + if (!extension_loaded('intl')) { throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__)); } } @@ -49,11 +49,6 @@ public function getWarnings() return $this->warnings; } - /** - * @param string $host - * - * @return bool - */ protected function checkDNS($host) { $variant = INTL_IDNA_VARIANT_2003; diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php b/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php index ee7c41aa0333b95362d15ae16ccf1fb13e0a454b..775ad16fb51375077a97f4ff706daf79a26b853c 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php @@ -6,9 +6,6 @@ class EmptyValidationList extends \InvalidArgumentException { - /** - * @param int $code - */ public function __construct($code = 0, Exception $previous = null) { parent::__construct("Empty validation list is not allowed", $code, $previous); diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php index 3be5973266406bf7e978f7dff9f83b0eec812057..d5e87d8ce060ef32c8381df7b8c85839fceacf77 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php @@ -9,22 +9,16 @@ class MultipleErrors extends InvalidEmail const CODE = 999; const REASON = "Accumulated errors for multiple validations"; /** - * @var InvalidEmail[] + * @var array */ private $errors = []; - /** - * @param InvalidEmail[] $errors - */ public function __construct(array $errors) { $this->errors = $errors; parent::__construct(); } - /** - * @return InvalidEmail[] - */ public function getErrors() { return $this->errors; diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php index feb224023daea0689ddc4cd029ef3b190f8cb442..ce161ac848a64fefafb02ae9450af7d9d0116573 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php @@ -30,12 +30,12 @@ class MultipleValidationWithAnd implements EmailValidation private $warnings = []; /** - * @var MultipleErrors|null + * @var MultipleErrors */ private $error; /** - * @var int + * @var bool */ private $mode; @@ -79,12 +79,6 @@ public function isValid($email, EmailLexer $emailLexer) return $result; } - /** - * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError - * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors - * - * @return \Egulias\EmailValidator\Exception\InvalidEmail[] - */ private function addNewError($possibleError, array $errors) { if (null !== $possibleError) { @@ -94,20 +88,13 @@ private function addNewError($possibleError, array $errors) return $errors; } - /** - * @param bool $result - * - * @return bool - */ private function shouldStop($result) { return !$result && $this->mode === self::STOP_ON_ERROR; } /** - * Returns the validation errors. - * - * @return MultipleErrors|null + * {@inheritdoc} */ public function getError() { diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php index 6b31e5440ec55f2aede43f13447e7cc433ba204a..e4bf0cc4df9c0a889f4a4cdcce17bb182052b9fc 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php @@ -9,7 +9,7 @@ class NoRFCWarningsValidation extends RFCValidation { /** - * @var InvalidEmail|null + * @var InvalidEmail */ private $error; diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php index 8781e0b62d1e40fe54314931aed6e7e9c73caaae..c4ffe35034babf1fa50832fa1e606e1f63fc1f71 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php @@ -9,7 +9,7 @@ class RFCValidation implements EmailValidation { /** - * @var EmailParser|null + * @var EmailParser */ private $parser; @@ -19,7 +19,7 @@ class RFCValidation implements EmailValidation private $warnings = []; /** - * @var InvalidEmail|null + * @var InvalidEmail */ private $error; diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php index e10bfabd92f0f95d59924cb0fd0122ccd8e8d478..4721f0d8c9844605adc0b1d363b770805733f420 100644 --- a/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php +++ b/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php @@ -10,7 +10,7 @@ class SpoofCheckValidation implements EmailValidation { /** - * @var InvalidEmail|null + * @var InvalidEmail */ private $error; @@ -21,9 +21,6 @@ public function __construct() } } - /** - * @psalm-suppress InvalidArgument - */ public function isValid($email, EmailLexer $emailLexer) { $checker = new Spoofchecker(); @@ -36,9 +33,6 @@ public function isValid($email, EmailLexer $emailLexer) return $this->error === null; } - /** - * @return InvalidEmail|null - */ public function getError() { return $this->error; diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php index 36a4265a515f9b442df57c4e2385dddea5d3fec9..7be9e6a3f2520c3d2b10774121dee2288f4bf561 100644 --- a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php +++ b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php @@ -6,10 +6,6 @@ class QuotedPart extends Warning { const CODE = 36; - /** - * @param scalar $prevToken - * @param scalar $postToken - */ public function __construct($prevToken, $postToken) { $this->message = "Deprecated Quoted String found between $prevToken and $postToken"; diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php index 817e4e84b07968c25ecf6736b038d8b9af7edbcb..e9d56e1e0322a6b5551a010078381a2753e199e8 100644 --- a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php +++ b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php @@ -6,10 +6,6 @@ class QuotedString extends Warning { const CODE = 11; - /** - * @param scalar $prevToken - * @param scalar $postToken - */ public function __construct($prevToken, $postToken) { $this->message = "Quoted String found between $prevToken and $postToken"; diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php b/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php index bce7e7a5aedb8bb1f7784c84e83ed4cd28d419cb..ec6a365ffb750c2e4a553336eb8daae397f55b97 100644 --- a/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php +++ b/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php @@ -5,36 +5,19 @@ abstract class Warning { const CODE = 0; + protected $message; + protected $rfcNumber; - /** - * @var string - */ - protected $message = ''; - - /** - * @var int - */ - protected $rfcNumber = 0; - - /** - * @return string - */ public function message() { return $this->message; } - /** - * @return int - */ public function code() { return self::CODE; } - /** - * @return int - */ public function RFCNumber() { return $this->rfcNumber; diff --git a/vendor/egulias/email-validator/composer.json b/vendor/egulias/email-validator/composer.json index 595caff01f8ef30b7830fe2c638f551bedd09584..4956da9e0013126422bd6274f22298319bce2a10 100644 --- a/vendor/egulias/email-validator/composer.json +++ b/vendor/egulias/email-validator/composer.json @@ -2,6 +2,7 @@ "name": "egulias/email-validator", "description": "A library for validating emails against several RFCs", "homepage": "https://github.com/egulias/EmailValidator", + "type": "Library", "keywords": ["email", "validation", "validator", "emailvalidation", "emailvalidator"], "license": "MIT", "authors": [ @@ -12,15 +13,21 @@ "dev-master": "2.1.x-dev" } }, - "require": { - "php": ">=5.5", - "doctrine/lexer": "^1.0.1", - "symfony/polyfill-intl-idn": "^1.10" + "repositories": [ + { + "type": "git", + "url": "https://github.com/dominicsayers/isemail" + } + ], + "require": { + "php": ">= 5.5", + "doctrine/lexer": "^1.0.1" }, - "require-dev": { + "require-dev" : { "satooshi/php-coveralls": "^1.0.1", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "dominicsayers/isemail": "^3.0.7" + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "symfony/phpunit-bridge": "^4.4@dev", + "dominicsayers/isemail": "dev-master" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -32,7 +39,7 @@ }, "autoload-dev": { "psr-4": { - "Egulias\\Tests\\": "Tests" + "Egulias\\Tests\\": "test" } } } diff --git a/vendor/egulias/email-validator/phpunit.xml.dist b/vendor/egulias/email-validator/phpunit.xml.dist index 1122406d96c6f228863f490e6e7bb31c3c3e0cbe..754445a76d24986af592743d1cf4f30e78ffa765 100644 --- a/vendor/egulias/email-validator/phpunit.xml.dist +++ b/vendor/egulias/email-validator/phpunit.xml.dist @@ -22,4 +22,8 @@ <directory>./EmailValidator/</directory> </whitelist> </filter> + +<listeners> + <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" /> +</listeners> </phpunit> diff --git a/vendor/egulias/email-validator/psalm.baseline.xml b/vendor/egulias/email-validator/psalm.baseline.xml deleted file mode 100644 index f81df72c96645cf0c5ff0e6ffb2686192bb0f784..0000000000000000000000000000000000000000 --- a/vendor/egulias/email-validator/psalm.baseline.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<files psalm-version="3.8.3@389af1bfc739bfdff3f9e3dc7bd6499aee51a831"> - <file src="EmailValidator/EmailLexer.php"> - <DocblockTypeContradiction occurrences="1"> - <code>self::$nullToken</code> - </DocblockTypeContradiction> - </file> - <file src="EmailValidator/Parser/Parser.php"> - <MissingReturnType occurrences="1"> - <code>parse</code> - </MissingReturnType> - </file> - <file src="EmailValidator/Validation/SpoofCheckValidation.php"> - <UndefinedClass occurrences="2"> - <code>Spoofchecker</code> - <code>Spoofchecker</code> - </UndefinedClass> - </file> -</files> diff --git a/vendor/egulias/email-validator/psalm.xml b/vendor/egulias/email-validator/psalm.xml deleted file mode 100644 index fb17dc852c76d3700f37688421c86483585306f0..0000000000000000000000000000000000000000 --- a/vendor/egulias/email-validator/psalm.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<psalm - requireVoidReturnType="false" - totallyTyped="false" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="https://getpsalm.org/schema/config" - xsi:schemaLocation="https://getpsalm.org/schema/config ./vendor/vimeo/psalm/config.xsd" - errorBaseline="./psalm.baseline.xml" -> - <projectFiles> - <directory name="EmailValidator" /> - <ignoreFiles> - <directory name="vendor" /> - </ignoreFiles> - </projectFiles> - - <issueHandlers> - </issueHandlers> -</psalm> diff --git a/vendor/guzzlehttp/guzzle/.php_cs b/vendor/guzzlehttp/guzzle/.php_cs deleted file mode 100644 index 2dd5036c1f2b63fcf74a59df09d3b9e649e91e19..0000000000000000000000000000000000000000 --- a/vendor/guzzlehttp/guzzle/.php_cs +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -$config = PhpCsFixer\Config::create() - ->setRiskyAllowed(true) - ->setRules([ - '@PSR2' => true, - 'array_syntax' => ['syntax' => 'short'], - 'declare_strict_types' => false, - 'concat_space' => ['spacing'=>'one'], - 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], - 'ordered_imports' => true, - // 'phpdoc_align' => ['align'=>'vertical'], - // 'native_function_invocation' => true, - ]) - ->setFinder( - PhpCsFixer\Finder::create() - ->in(__DIR__.'/src') - ->in(__DIR__.'/tests') - ->name('*.php') - ) -; - -return $config; diff --git a/vendor/guzzlehttp/guzzle/CHANGELOG.md b/vendor/guzzlehttp/guzzle/CHANGELOG.md index a2b61e712852151294b21bafe434322492796647..17badd756062b2fbb6d893750da457b88117d2f1 100644 --- a/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -1,40 +1,5 @@ # Change Log -## 6.5.2 - 2019-12-23 - -* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) - -## 6.5.1 - 2019-12-21 - -* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) -* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) - -## 6.5.0 - 2019-12-07 - -* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) -* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287) -* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132) -* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) -* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) -* Deprecated `ClientInterface::VERSION` - -## 6.4.1 - 2019-10-23 - -* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that -* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` - -## 6.4.0 - 2019-10-23 - -* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) -* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081) -* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161) -* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163) -* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242) -* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284) -* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273) -* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) -* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) - ## 6.3.3 - 2018-04-22 * Fix: Default headers when decode_content is specified diff --git a/vendor/guzzlehttp/guzzle/Dockerfile b/vendor/guzzlehttp/guzzle/Dockerfile deleted file mode 100644 index f6a095230e85638cc9f98dd7beef2bcf8c87e98e..0000000000000000000000000000000000000000 --- a/vendor/guzzlehttp/guzzle/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM composer:latest as setup - -RUN mkdir /guzzle - -WORKDIR /guzzle - -RUN set -xe \ - && composer init --name=guzzlehttp/test --description="Simple project for testing Guzzle scripts" --author="Márk Sági-Kazár <mark.sagikazar@gmail.com>" --no-interaction \ - && composer require guzzlehttp/guzzle - - -FROM php:7.3 - -RUN mkdir /guzzle - -WORKDIR /guzzle - -COPY --from=setup /guzzle /guzzle diff --git a/vendor/guzzlehttp/guzzle/README.md b/vendor/guzzlehttp/guzzle/README.md index 5fdb6c5f42dba76d7d29d51dd23512478ac3ccdb..bcd18b8e718bcfb922288cf6350eced1dbae966d 100644 --- a/vendor/guzzlehttp/guzzle/README.md +++ b/vendor/guzzlehttp/guzzle/README.md @@ -21,18 +21,19 @@ trivial to integrate with web services. ```php $client = new \GuzzleHttp\Client(); -$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); - -echo $response->getStatusCode(); # 200 -echo $response->getHeaderLine('content-type'); # 'application/json; charset=utf8' -echo $response->getBody(); # '{"id": 1420053, "name": "guzzle", ...}' - -# Send an asynchronous request. +$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); +echo $res->getStatusCode(); +// 200 +echo $res->getHeaderLine('content-type'); +// 'application/json; charset=utf8' +echo $res->getBody(); +// '{"id": 1420053, "name": "guzzle", ...}' + +// Send an asynchronous request. $request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); $promise = $client->sendAsync($request)->then(function ($response) { echo 'I completed! ' . $response->getBody(); }); - $promise->wait(); ``` @@ -56,7 +57,7 @@ curl -sS https://getcomposer.org/installer | php Next, run the Composer command to install the latest stable version of Guzzle: ```bash -composer require guzzlehttp/guzzle +php composer.phar require guzzlehttp/guzzle ``` After installing, you need to require Composer's autoloader: @@ -68,7 +69,7 @@ require 'vendor/autoload.php'; You can then later update Guzzle using composer: ```bash -composer update +composer.phar update ``` @@ -78,13 +79,13 @@ composer update |---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------| | 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >= 5.3.3 | | 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >= 5.4 | -| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | +| 5.x | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | | 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 | [guzzle-3-repo]: https://github.com/guzzle/guzzle3 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x [guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3 [guzzle-6-repo]: https://github.com/guzzle/guzzle -[guzzle-3-docs]: http://guzzle3.readthedocs.org +[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/ [guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/ [guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/ diff --git a/vendor/guzzlehttp/guzzle/composer.json b/vendor/guzzlehttp/guzzle/composer.json index bbf0ff20b4f550424b5d9248ea2fe4b3bc8ca58a..1f328e308cdbf05fd63eac1be11099a194d3cb1c 100644 --- a/vendor/guzzlehttp/guzzle/composer.json +++ b/vendor/guzzlehttp/guzzle/composer.json @@ -2,15 +2,7 @@ "name": "guzzlehttp/guzzle", "type": "library", "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "framework", - "http", - "rest", - "web service", - "curl", - "client", - "HTTP client" - ], + "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"], "homepage": "http://guzzlephp.org/", "license": "MIT", "authors": [ @@ -22,38 +14,31 @@ ], "require": { "php": ">=5.5", - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1" + "guzzlehttp/psr7": "^1.4", + "guzzlehttp/promises": "^1.0" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware", - "ext-intl": "Required for Internationalized Domain Name (IDN) support" - }, - "config": { - "sort-packages": true - }, - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } + "psr/log": "^1.0" }, "autoload": { + "files": ["src/functions_include.php"], "psr-4": { "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "autoload-dev": { "psr-4": { "GuzzleHttp\\Tests\\": "tests/" } + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } } } diff --git a/vendor/guzzlehttp/guzzle/src/Client.php b/vendor/guzzlehttp/guzzle/src/Client.php index f2bf20444cd282b689aabcae9909419183d4963c..80417918d053c720a6079496dc9dbf40d19c41d7 100644 --- a/vendor/guzzlehttp/guzzle/src/Client.php +++ b/vendor/guzzlehttp/guzzle/src/Client.php @@ -2,12 +2,11 @@ namespace GuzzleHttp; use GuzzleHttp\Cookie\CookieJar; -use GuzzleHttp\Exception\InvalidArgumentException; use GuzzleHttp\Promise; use GuzzleHttp\Psr7; +use Psr\Http\Message\UriInterface; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; -use Psr\Http\Message\UriInterface; /** * @method ResponseInterface get(string|UriInterface $uri, array $options = []) @@ -76,12 +75,6 @@ public function __construct(array $config = []) $this->configureDefaults($config); } - /** - * @param string $method - * @param array $args - * - * @return Promise\PromiseInterface - */ public function __call($method, $args) { if (count($args) < 1) { @@ -96,14 +89,6 @@ public function __call($method, $args) : $this->request($method, $uri, $opts); } - /** - * Asynchronously send an HTTP request. - * - * @param array $options Request options to apply to the given - * request and to the transfer. See \GuzzleHttp\RequestOptions. - * - * @return Promise\PromiseInterface - */ public function sendAsync(RequestInterface $request, array $options = []) { // Merge the base URI into the request URI if needed. @@ -115,35 +100,12 @@ public function sendAsync(RequestInterface $request, array $options = []) ); } - /** - * Send an HTTP request. - * - * @param array $options Request options to apply to the given - * request and to the transfer. See \GuzzleHttp\RequestOptions. - * - * @return ResponseInterface - * @throws GuzzleException - */ public function send(RequestInterface $request, array $options = []) { $options[RequestOptions::SYNCHRONOUS] = true; return $this->sendAsync($request, $options)->wait(); } - /** - * Create and send an asynchronous HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. Use an array to provide a URL - * template and additional variables to use in the URL template expansion. - * - * @param string $method HTTP method - * @param string|UriInterface $uri URI object or string. - * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. - * - * @return Promise\PromiseInterface - */ public function requestAsync($method, $uri = '', array $options = []) { $options = $this->prepareDefaults($options); @@ -163,37 +125,12 @@ public function requestAsync($method, $uri = '', array $options = []) return $this->transfer($request, $options); } - /** - * Create and send an HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string $method HTTP method. - * @param string|UriInterface $uri URI object or string. - * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. - * - * @return ResponseInterface - * @throws GuzzleException - */ public function request($method, $uri = '', array $options = []) { $options[RequestOptions::SYNCHRONOUS] = true; return $this->requestAsync($method, $uri, $options)->wait(); } - /** - * Get a client configuration option. - * - * These options include default request options of the client, a "handler" - * (if utilized by the concrete client), and a "base_uri" if utilized by - * the concrete client. - * - * @param string|null $option The config option to retrieve. - * - * @return mixed - */ public function getConfig($option = null) { return $option === null @@ -201,11 +138,6 @@ public function getConfig($option = null) : (isset($this->config[$option]) ? $this->config[$option] : null); } - /** - * @param string|null $uri - * - * @return UriInterface - */ private function buildUri($uri, array $config) { // for BC we accept null which would otherwise fail in uri_for @@ -215,11 +147,6 @@ private function buildUri($uri, array $config) $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri); } - if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) { - $idnOptions = ($config['idn_conversion'] === true) ? IDNA_DEFAULT : $config['idn_conversion']; - $uri = _idn_uri_convert($uri, $idnOptions); - } - return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; } @@ -227,7 +154,6 @@ private function buildUri($uri, array $config) * Configures the default options for a client. * * @param array $config - * @return void */ private function configureDefaults(array $config) { @@ -239,22 +165,12 @@ private function configureDefaults(array $config) 'cookies' => false ]; - // idn_to_ascii() is a part of ext-intl and might be not available - $defaults['idn_conversion'] = function_exists('idn_to_ascii') - // Old ICU versions don't have this constant, so we are basically stuck (see https://github.com/guzzle/guzzle/pull/2424 - // and https://github.com/guzzle/guzzle/issues/2448 for details) - && ( - defined('INTL_IDNA_VARIANT_UTS46') - || - PHP_VERSION_ID < 70200 - ); - // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. // We can only trust the HTTP_PROXY environment variable in a CLI // process due to the fact that PHP has no reliable mechanism to // get environment variables that start with "HTTP_". - if (php_sapi_name() === 'cli' && getenv('HTTP_PROXY')) { + if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) { $defaults['proxy']['http'] = getenv('HTTP_PROXY'); } @@ -294,7 +210,7 @@ private function configureDefaults(array $config) * * @return array */ - private function prepareDefaults(array $options) + private function prepareDefaults($options) { $defaults = $this->config; @@ -309,7 +225,7 @@ private function prepareDefaults(array $options) if (array_key_exists('headers', $options)) { // Allows default headers to be unset. if ($options['headers'] === null) { - $defaults['_conditional'] = []; + $defaults['_conditional'] = null; unset($options['headers']); } elseif (!is_array($options['headers'])) { throw new \InvalidArgumentException('headers must be an array'); @@ -335,7 +251,8 @@ private function prepareDefaults(array $options) * The URI of the request is not modified and the request options are used * as-is without merging in default options. * - * @param array $options See \GuzzleHttp\RequestOptions. + * @param RequestInterface $request + * @param array $options * * @return Promise\PromiseInterface */ @@ -354,7 +271,6 @@ private function transfer(RequestInterface $request, array $options) } $request = $this->applyOptions($request, $options); - /** @var HandlerStack $handler */ $handler = $options['handler']; try { @@ -495,11 +411,6 @@ private function applyOptions(RequestInterface $request, array &$options) return $request; } - /** - * Throw Exception with pre-set message. - * @return void - * @throws InvalidArgumentException Invalid body. - */ private function invalidBody() { throw new \InvalidArgumentException('Passing in the "body" request ' diff --git a/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 0c8d42a1e5aeabe78186399dc9cbb4e94f5a656f..2dbcffa492d0c4ade0b8bf7ba73756cdede249a0 100644 --- a/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -1,8 +1,8 @@ <?php namespace GuzzleHttp; -use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Exception\GuzzleException; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\UriInterface; @@ -12,10 +12,7 @@ */ interface ClientInterface { - /** - * @deprecated Will be removed in Guzzle 7.0.0 - */ - const VERSION = '6.5.1'; + const VERSION = '6.3.3'; /** * Send an HTTP request. diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php index 38f98ad7c0c97fc1df0668c6639659e2870b4e4e..78f2b79fecb55316ad3b974e3293206d66e81590 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -94,8 +94,8 @@ public static function shouldPersist( */ public function getCookieByName($name) { - // don't allow a non string name - if ($name === null || !is_scalar($name)) { + // don't allow a null name + if ($name === null) { return null; } foreach ($this->cookies as $cookie) { @@ -103,8 +103,6 @@ public function getCookieByName($name) return $cookie; } } - - return null; } public function toArray() @@ -122,7 +120,7 @@ public function clear($domain = null, $path = null, $name = null) } elseif (!$path) { $this->cookies = array_filter( $this->cookies, - function (SetCookie $cookie) use ($domain) { + function (SetCookie $cookie) use ($path, $domain) { return !$cookie->matchesDomain($domain); } ); diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php index 6ee11885e1f1f2cfc82ffc1d463966e24ddd9d25..2cf298a867b3713f6fa3143d5288ce2458c311c2 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -58,9 +58,9 @@ public function setCookie(SetCookie $cookie); * arguments, then the cookie with the specified name, path and domain is * removed. * - * @param string|null $domain Clears cookies matching a domain - * @param string|null $path Clears cookies matching a domain and path - * @param string|null $name Clears cookies matching a domain, path, and name + * @param string $domain Clears cookies matching a domain + * @param string $path Clears cookies matching a domain and path + * @param string $name Clears cookies matching a domain, path, and name * * @return CookieJarInterface */ diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php index 3fb8600ef07be182db6d8ad607b73582ec1746e3..9887c1d54b2db295e6d9e5dfc67510d54941d940 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php @@ -23,7 +23,6 @@ class FileCookieJar extends CookieJar */ public function __construct($cookieFile, $storeSessionCookies = false) { - parent::__construct(); $this->filename = $cookieFile; $this->storeSessionCookies = $storeSessionCookies; @@ -57,7 +56,7 @@ public function save($filename) } $jsonStr = \GuzzleHttp\json_encode($json); - if (false === file_put_contents($filename, $jsonStr, LOCK_EX)) { + if (false === file_put_contents($filename, $jsonStr)) { throw new \RuntimeException("Unable to save file {$filename}"); } } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php index 0224a2447b14c55eadac53831258e7bdc3041210..4497bcf03e24ec69b443eff05ac56b2c94e62c9f 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -22,7 +22,6 @@ class SessionCookieJar extends CookieJar */ public function __construct($sessionKey, $storeSessionCookies = false) { - parent::__construct(); $this->sessionKey = $sessionKey; $this->storeSessionCookies = $storeSessionCookies; $this->load(); diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php index 3d776a70bc78c3eb5d7f10f325780eada7803244..f6993943e747c2d56218b343c74d7444bcb98cd8 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -227,7 +227,7 @@ public function setExpires($timestamp) /** * Get whether or not this is a secure cookie * - * @return bool|null + * @return null|bool */ public function getSecure() { @@ -247,7 +247,7 @@ public function setSecure($secure) /** * Get whether or not this is a session cookie * - * @return bool|null + * @return null|bool */ public function getDiscard() { diff --git a/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php index 4cfd393cc1a48c227f450caaf6f5eeac9bb7e214..f95c09f2b1a50923056acbf108e1695e2a148bfa 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php @@ -4,6 +4,4 @@ /** * Exception when a client error is encountered (4xx codes) */ -class ClientException extends BadResponseException -{ -} +class ClientException extends BadResponseException {} diff --git a/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php index 27b2722b0b6716d131b74631359cda86d3dcbbdb..510778f6eb2f6800eef95d903d0b5b3ff139b415 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php @@ -1,23 +1,13 @@ <?php namespace GuzzleHttp\Exception; -use Throwable; - -if (interface_exists(Throwable::class)) { - interface GuzzleException extends Throwable - { - } -} else { - /** - * @method string getMessage() - * @method \Throwable|null getPrevious() - * @method mixed getCode() - * @method string getFile() - * @method int getLine() - * @method array getTrace() - * @method string getTraceAsString() - */ - interface GuzzleException - { - } -} +/** + * @method string getMessage() + * @method \Throwable|null getPrevious() + * @method mixed getCode() + * @method string getFile() + * @method int getLine() + * @method array getTrace() + * @method string getTraceAsString() + */ +interface GuzzleException {} diff --git a/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php b/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php deleted file mode 100644 index bfd20e232bba460f910e7c4ed7315e9a244ffad2..0000000000000000000000000000000000000000 --- a/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,7 +0,0 @@ -<?php - -namespace GuzzleHttp\Exception; - -final class InvalidArgumentException extends \InvalidArgumentException implements GuzzleException -{ -} diff --git a/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php index 12dd081eb6c2b99f9561e5bb37ffd51bd968ea7f..39de327e7b6ea887f0ebb904faa3340c2c1d5d0f 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php @@ -1,9 +1,9 @@ <?php namespace GuzzleHttp\Exception; -use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; +use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\UriInterface; /** @@ -14,7 +14,7 @@ class RequestException extends TransferException /** @var RequestInterface */ private $request; - /** @var ResponseInterface|null */ + /** @var ResponseInterface */ private $response; /** @var array */ @@ -124,17 +124,42 @@ public static function create( */ public static function getResponseBodySummary(ResponseInterface $response) { - return \GuzzleHttp\Psr7\get_message_body_summary($response); + $body = $response->getBody(); + + if (!$body->isSeekable()) { + return null; + } + + $size = $body->getSize(); + + if ($size === 0) { + return null; + } + + $summary = $body->read(120); + $body->rewind(); + + if ($size > 120) { + $summary .= ' (truncated...)'; + } + + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { + return null; + } + + return $summary; } /** - * Obfuscates URI if there is a username and a password present + * Obfuscates URI if there is an username and a password present * * @param UriInterface $uri * * @return UriInterface */ - private static function obfuscateUri(UriInterface $uri) + private static function obfuscateUri($uri) { $userInfo = $uri->getUserInfo(); diff --git a/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php index 127094c149959a8c95be188f699bc3e5219e0e19..7cdd340866b63b318e78b38981565d3e78eaacdd 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php @@ -4,6 +4,4 @@ /** * Exception when a server error is encountered (5xx codes) */ -class ServerException extends BadResponseException -{ -} +class ServerException extends BadResponseException {} diff --git a/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php index fff05251d502c010be4ad114381f8b5aa179d37f..b60a9678d650676bdecd6fab6740d0f9a39e7849 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php @@ -1,6 +1,4 @@ <?php namespace GuzzleHttp\Exception; -class TooManyRedirectsException extends RequestException -{ -} +class TooManyRedirectsException extends RequestException {} diff --git a/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php index 7c11db3abc1d8b5c5ec60c9f9b9d4fa9d5603817..b92071ca20630d1a988249a9befc247ab4e3d2de 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php @@ -1,6 +1,4 @@ <?php namespace GuzzleHttp\Exception; -class TransferException extends \RuntimeException implements GuzzleException -{ -} +class TransferException extends \RuntimeException implements GuzzleException {} diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php index 4a28a96ebce6dbd41d31c2e24c1216052644344c..e0923714306af0cc5c92bfbd838503e872e4fc68 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php @@ -1,8 +1,8 @@ <?php namespace GuzzleHttp\Handler; -use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Promise\FulfilledPromise; use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\LazyOpenStream; @@ -14,9 +14,6 @@ */ class CurlFactory implements CurlFactoryInterface { - const CURL_VERSION_STR = 'curl_version'; - const LOW_CURL_VERSION_NUMBER = '7.21.2'; - /** @var array */ private $handles = []; @@ -120,7 +117,6 @@ public static function finish( private static function invokeStats(EasyHandle $easy) { $curlStats = curl_getinfo($easy->handle); - $curlStats['appconnect_time'] = curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME); $stats = new TransferStats( $easy->request, $easy->response, @@ -140,9 +136,7 @@ private static function finishError( $ctx = [ 'errno' => $easy->errno, 'error' => curl_error($easy->handle), - 'appconnect_time' => curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME), ] + curl_getinfo($easy->handle); - $ctx[self::CURL_VERSION_STR] = curl_version()['version']; $factory->release($easy); // Retry when nothing is present or when curl failed to rewind. @@ -178,22 +172,13 @@ private static function createRejection(EasyHandle $easy, array $ctx) ) ); } - if (version_compare($ctx[self::CURL_VERSION_STR], self::LOW_CURL_VERSION_NUMBER)) { - $message = sprintf( - 'cURL error %s: %s (%s)', - $ctx['errno'], - $ctx['error'], - 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html' - ); - } else { - $message = sprintf( - 'cURL error %s: %s (%s) for %s', - $ctx['errno'], - $ctx['error'], - 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html', - $easy->request->getUri() - ); - } + + $message = sprintf( + 'cURL error %s: %s (%s)', + $ctx['errno'], + $ctx['error'], + 'see http://curl.haxx.se/libcurl/c/libcurl-errors.html' + ); // Create a connection exception if it was a specific error code. $error = isset($connectionErrors[$easy->errno]) @@ -454,16 +439,11 @@ private function applyHandlerOptions(EasyHandle $easy, array &$conf) } if (isset($options['ssl_key'])) { - if (is_array($options['ssl_key'])) { - if (count($options['ssl_key']) === 2) { - list($sslKey, $conf[CURLOPT_SSLKEYPASSWD]) = $options['ssl_key']; - } else { - list($sslKey) = $options['ssl_key']; - } + $sslKey = $options['ssl_key']; + if (is_array($sslKey)) { + $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1]; + $sslKey = $sslKey[0]; } - - $sslKey = isset($sslKey) ? $sslKey: $options['ssl_key']; - if (!file_exists($sslKey)) { throw new \InvalidArgumentException( "SSL private key not found: {$sslKey}" diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index b73e5c72d42c17cd63f53a0db9a0d77ff906f8a3..2754d8e4378d92530e1a3767c92cc3b673660161 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -1,9 +1,9 @@ <?php namespace GuzzleHttp\Handler; -use GuzzleHttp\Exception\InvalidArgumentException; use GuzzleHttp\Promise as P; use GuzzleHttp\Promise\Promise; +use GuzzleHttp\Psr7; use Psr\Http\Message\RequestInterface; /** @@ -23,7 +23,6 @@ class CurlMultiHandler private $active; private $handles = []; private $delays = []; - private $options = []; /** * This handler accepts the following options: @@ -31,8 +30,6 @@ class CurlMultiHandler * - handle_factory: An optional factory used to create curl handles * - select_timeout: Optional timeout (in seconds) to block before timing * out while selecting curl handles. Defaults to 1 second. - * - options: An associative array of CURLMOPT_* options and - * corresponding values for curl_multi_setopt() * * @param array $options */ @@ -40,31 +37,14 @@ public function __construct(array $options = []) { $this->factory = isset($options['handle_factory']) ? $options['handle_factory'] : new CurlFactory(50); - - if (isset($options['select_timeout'])) { - $this->selectTimeout = $options['select_timeout']; - } elseif ($selectTimeout = getenv('GUZZLE_CURL_SELECT_TIMEOUT')) { - $this->selectTimeout = $selectTimeout; - } else { - $this->selectTimeout = 1; - } - - $this->options = isset($options['options']) ? $options['options'] : []; + $this->selectTimeout = isset($options['select_timeout']) + ? $options['select_timeout'] : 1; } public function __get($name) { if ($name === '_mh') { - $this->_mh = curl_multi_init(); - - foreach ($this->options as $option => $value) { - // A warning is raised in case of a wrong option. - curl_multi_setopt($this->_mh, $option, $value); - } - - // Further calls to _mh will return the value directly, without entering the - // __get() method at all. - return $this->_mh; + return $this->_mh = curl_multi_init(); } throw new \BadMethodCallException(); @@ -102,7 +82,7 @@ public function tick() { // Add any delayed handles if needed. if ($this->delays) { - $currentTime = \GuzzleHttp\_current_time(); + $currentTime = microtime(true); foreach ($this->delays as $id => $delay) { if ($currentTime >= $delay) { unset($this->delays[$id]); @@ -154,7 +134,7 @@ private function addRequest(array $entry) if (empty($easy->options['delay'])) { curl_multi_add_handle($this->_mh, $easy->handle); } else { - $this->delays[$id] = \GuzzleHttp\_current_time() + ($easy->options['delay'] / 1000); + $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000); } } @@ -206,7 +186,7 @@ private function processMessages() private function timeToNext() { - $currentTime = \GuzzleHttp\_current_time(); + $currentTime = microtime(true); $nextTime = PHP_INT_MAX; foreach ($this->delays as $time) { if ($time < $nextTime) { diff --git a/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php index 5b312bc0428ab910c00bfdbf4f962beba08c75b1..d892061c7a0074063d33c20fea167c898dc2beb2 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php @@ -66,7 +66,7 @@ public function __invoke(RequestInterface $request, array $options) throw new \OutOfBoundsException('Mock queue is empty'); } - if (isset($options['delay']) && is_numeric($options['delay'])) { + if (isset($options['delay'])) { usleep($options['delay'] * 1000); } @@ -175,11 +175,6 @@ public function count() return count($this->queue); } - public function reset() - { - $this->queue = []; - } - private function invokeStats( RequestInterface $request, array $options, @@ -187,8 +182,7 @@ private function invokeStats( $reason = null ) { if (isset($options['on_stats'])) { - $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0; - $stats = new TransferStats($request, $response, $transferTime, $reason); + $stats = new TransferStats($request, $response, 0, $reason); call_user_func($options['on_stats'], $stats); } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php index a8eba3786be348c6ab5ab6bcb9c6130a19836c21..b686545ea7f1d44d0de79ee0343524fc2b68128f 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php @@ -1,8 +1,8 @@ <?php namespace GuzzleHttp\Handler; -use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Promise\FulfilledPromise; use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Psr7; @@ -33,7 +33,7 @@ public function __invoke(RequestInterface $request, array $options) usleep($options['delay'] * 1000); } - $startTime = isset($options['on_stats']) ? \GuzzleHttp\_current_time() : null; + $startTime = isset($options['on_stats']) ? microtime(true) : null; try { // Does not support the expect header. @@ -42,7 +42,7 @@ public function __invoke(RequestInterface $request, array $options) // Append a content-length header if body size is zero to match // cURL's behavior. if (0 === $request->getBody()->getSize()) { - $request = $request->withHeader('Content-Length', '0'); + $request = $request->withHeader('Content-Length', 0); } return $this->createResponse( @@ -82,7 +82,7 @@ private function invokeStats( $stats = new TransferStats( $request, $response, - \GuzzleHttp\_current_time() - $startTime, + microtime(true) - $startTime, $error, [] ); @@ -343,25 +343,13 @@ private function resolveHost(RequestInterface $request, array $options) if ('v4' === $options['force_ip_resolve']) { $records = dns_get_record($uri->getHost(), DNS_A); if (!isset($records[0]['ip'])) { - throw new ConnectException( - sprintf( - "Could not resolve IPv4 address for host '%s'", - $uri->getHost() - ), - $request - ); + throw new ConnectException(sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); } $uri = $uri->withHost($records[0]['ip']); } elseif ('v6' === $options['force_ip_resolve']) { $records = dns_get_record($uri->getHost(), DNS_AAAA); if (!isset($records[0]['ipv6'])) { - throw new ConnectException( - sprintf( - "Could not resolve IPv6 address for host '%s'", - $uri->getHost() - ), - $request - ); + throw new ConnectException(sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); } $uri = $uri->withHost('[' . $records[0]['ipv6'] . ']'); } diff --git a/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/vendor/guzzlehttp/guzzle/src/HandlerStack.php index 6a49cc0690cb0fa24b8987957aa8e4ba43b7cf05..24c46fd9fea30c28a93137325f39bc18e9c8873c 100644 --- a/vendor/guzzlehttp/guzzle/src/HandlerStack.php +++ b/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -1,9 +1,7 @@ <?php namespace GuzzleHttp; -use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\RequestInterface; -use Psr\Http\Message\ResponseInterface; /** * Creates a composed Guzzle handler function by stacking middlewares on top of @@ -11,7 +9,7 @@ */ class HandlerStack { - /** @var callable|null */ + /** @var callable */ private $handler; /** @var array */ @@ -61,8 +59,6 @@ public function __construct(callable $handler = null) * * @param RequestInterface $request * @param array $options - * - * @return ResponseInterface|PromiseInterface */ public function __invoke(RequestInterface $request, array $options) { @@ -210,7 +206,7 @@ public function resolve() } /** - * @param string $name + * @param $name * @return int */ private function findByName($name) @@ -227,10 +223,10 @@ private function findByName($name) /** * Splices a function into the middleware list at a specific position. * - * @param string $findName - * @param string $withName + * @param $findName + * @param $withName * @param callable $middleware - * @param bool $before + * @param $before */ private function splice($findName, $withName, callable $middleware, $before) { diff --git a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php index dc36bb524d4b7f2515e9ce053c20557169c990aa..663ac7391632645eb2f6b926123a1d669c1b9e69 100644 --- a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php +++ b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -168,11 +168,6 @@ function (array $matches) use ($request, $response, $error, &$cache) { ); } - /** - * Get headers from message as string - * - * @return string - */ private function headers(MessageInterface $message) { $result = ''; diff --git a/vendor/guzzlehttp/guzzle/src/Middleware.php b/vendor/guzzlehttp/guzzle/src/Middleware.php index bffc1974bbe0d94287ff580d0cfe657e32cf041e..d4ad75c94f333a43b97f42e973e3c5962572d606 100644 --- a/vendor/guzzlehttp/guzzle/src/Middleware.php +++ b/vendor/guzzlehttp/guzzle/src/Middleware.php @@ -7,6 +7,7 @@ use GuzzleHttp\Psr7; use Psr\Http\Message\ResponseInterface; use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; /** * Functions used to create and wrap handlers with handler middleware. @@ -38,7 +39,7 @@ function ($response) use ($cookieJar, $request) { $cookieJar->extractCookies($request, $response); return $response; } - ); + ); }; }; } @@ -57,7 +58,7 @@ public static function httpErrors() return $handler($request, $options); } return $handler($request, $options)->then( - function (ResponseInterface $response) use ($request) { + function (ResponseInterface $response) use ($request, $handler) { $code = $response->getStatusCode(); if ($code < 400) { return $response; @@ -182,7 +183,7 @@ public static function retry(callable $decider, callable $delay = null) * * @return callable Returns a function that accepts the next handler. */ - public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = 'info' /* \Psr\Log\LogLevel::INFO */) + public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO) { return function (callable $handler) use ($logger, $formatter, $logLevel) { return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) { diff --git a/vendor/guzzlehttp/guzzle/src/Pool.php b/vendor/guzzlehttp/guzzle/src/Pool.php index 5838db4f4cf9a7e3596891a8dcf8c80ad5eef3ed..8f1be33cd396b60e9dd738fe81150cb62dd9e211 100644 --- a/vendor/guzzlehttp/guzzle/src/Pool.php +++ b/vendor/guzzlehttp/guzzle/src/Pool.php @@ -1,13 +1,12 @@ <?php namespace GuzzleHttp; -use GuzzleHttp\Promise\EachPromise; -use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Promise\PromisorInterface; use Psr\Http\Message\RequestInterface; +use GuzzleHttp\Promise\EachPromise; /** - * Sends an iterator of requests concurrently using a capped pool size. + * Sends and iterator of requests concurrently using a capped pool size. * * The pool will read from an iterator until it is cancelled or until the * iterator is consumed. When a request is yielded, the request is sent after @@ -70,11 +69,6 @@ public function __construct( $this->each = new EachPromise($requests(), $config); } - /** - * Get promise - * - * @return PromiseInterface - */ public function promise() { return $this->each->promise(); @@ -112,11 +106,6 @@ public static function batch( return $res; } - /** - * Execute callback(s) - * - * @return void - */ private static function cmpCallback(array &$options, $name, array &$results) { if (!isset($options[$name])) { diff --git a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php index 568a1e906c97071c5d7220439278fc9aaf4058f2..2eb95f9b2d3a1d9ce581f34bb01fcdf46ddd493d 100644 --- a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -66,11 +66,6 @@ public function __invoke(RequestInterface $request, array $options) return $fn(Psr7\modify_request($request, $modify), $options); } - /** - * Add expect header - * - * @return void - */ private function addExpectHeader( RequestInterface $request, array $options, diff --git a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php index 2f3012618dd086a2cc9b09141b1a0ccd58152706..131b77179aa07f59ef65ff0945dd51083d58eb0e 100644 --- a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -13,7 +13,7 @@ * Request redirect middleware. * * Apply this middleware like other middleware using - * {@see \GuzzleHttp\Middleware::redirect()}. + * {@see GuzzleHttp\Middleware::redirect()}. */ class RedirectMiddleware { @@ -76,7 +76,7 @@ public function __invoke(RequestInterface $request, array $options) /** * @param RequestInterface $request * @param array $options - * @param ResponseInterface $response + * @param ResponseInterface|PromiseInterface $response * * @return ResponseInterface|PromiseInterface */ @@ -118,11 +118,6 @@ public function checkRedirect( return $promise; } - /** - * Enable tracking on promise. - * - * @return PromiseInterface - */ private function withTracking(PromiseInterface $promise, $uri, $statusCode) { return $promise->then( @@ -140,13 +135,6 @@ function (ResponseInterface $response) use ($uri, $statusCode) { ); } - /** - * Check for too many redirects - * - * @return void - * - * @throws TooManyRedirectsException Too many redirects. - */ private function guardMax(RequestInterface $request, array &$options) { $current = isset($options['__redirect_count']) @@ -184,19 +172,13 @@ public function modifyRequest( // would do. $statusCode = $response->getStatusCode(); if ($statusCode == 303 || - ($statusCode <= 302 && !$options['allow_redirects']['strict']) + ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict']) ) { $modify['method'] = 'GET'; $modify['body'] = ''; } - $uri = $this->redirectUri($request, $response, $protocols); - if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) { - $idnOptions = ($options['idn_conversion'] === true) ? IDNA_DEFAULT : $options['idn_conversion']; - $uri = _idn_uri_convert($uri, $idnOptions); - } - - $modify['uri'] = $uri; + $modify['uri'] = $this->redirectUri($request, $response, $protocols); Psr7\rewind_body($request); // Add the Referer header if it is told to do so and only @@ -204,7 +186,7 @@ public function modifyRequest( if ($options['allow_redirects']['referer'] && $modify['uri']->getScheme() === $request->getUri()->getScheme() ) { - $uri = $request->getUri()->withUserInfo(''); + $uri = $request->getUri()->withUserInfo('', ''); $modify['set_headers']['Referer'] = (string) $uri; } else { $modify['remove_headers'][] = 'Referer'; diff --git a/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/vendor/guzzlehttp/guzzle/src/RequestOptions.php index 355f658f03457e48a615ec368a4fc6d31b83f1ad..c6aacfb15782756a14e24ccc71143663795011fa 100644 --- a/vendor/guzzlehttp/guzzle/src/RequestOptions.php +++ b/vendor/guzzlehttp/guzzle/src/RequestOptions.php @@ -22,7 +22,7 @@ final class RequestOptions * - strict: (bool, default=false) Set to true to use strict redirects * meaning redirect POST requests with POST requests vs. doing what most * browsers do which is redirect POST requests with GET requests - * - referer: (bool, default=false) Set to true to enable the Referer + * - referer: (bool, default=true) Set to false to disable the Referer * header. * - protocols: (array, default=['http', 'https']) Allowed redirect * protocols. @@ -132,14 +132,6 @@ final class RequestOptions */ const HTTP_ERRORS = 'http_errors'; - /** - * idn: (bool|int, default=true) A combination of IDNA_* constants for - * idn_to_ascii() PHP's function (see "options" parameter). Set to false to - * disable IDN support completely, or to true to use the default - * configuration (IDNA_DEFAULT constant). - */ - const IDN_CONVERSION = 'idn_conversion'; - /** * json: (mixed) Adds JSON data to a request. The provided value is JSON * encoded and a Content-Type header of application/json will be added to diff --git a/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php index 5acc8c5c392eb717c00d0fc5643dacaf670b9149..f27090fd197ab7ff443f12f6501d639f169871cf 100644 --- a/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php @@ -19,9 +19,6 @@ class RetryMiddleware /** @var callable */ private $decider; - /** @var callable */ - private $delay; - /** * @param callable $decider Function that accepts the number of retries, * a request, [response], and [exception] and @@ -45,13 +42,13 @@ public function __construct( /** * Default exponential backoff delay function. * - * @param int $retries + * @param $retries * - * @return int milliseconds. + * @return int */ public static function exponentialDelay($retries) { - return (int) pow(2, $retries - 1) * 1000; + return (int) pow(2, $retries - 1); } /** @@ -74,11 +71,6 @@ public function __invoke(RequestInterface $request, array $options) ); } - /** - * Execute fulfilled closure - * - * @return mixed - */ private function onFulfilled(RequestInterface $req, array $options) { return function ($value) use ($req, $options) { @@ -95,11 +87,6 @@ private function onFulfilled(RequestInterface $req, array $options) }; } - /** - * Execute rejected closure - * - * @return callable - */ private function onRejected(RequestInterface $req, array $options) { return function ($reason) use ($req, $options) { @@ -116,9 +103,6 @@ private function onRejected(RequestInterface $req, array $options) }; } - /** - * @return self - */ private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null) { $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response); diff --git a/vendor/guzzlehttp/guzzle/src/TransferStats.php b/vendor/guzzlehttp/guzzle/src/TransferStats.php index 87fb3c00164d274d9b5cec535339bcfb059efc84..15f717e1ea6e8edf6bc3a252f5a478e19e835b04 100644 --- a/vendor/guzzlehttp/guzzle/src/TransferStats.php +++ b/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -18,11 +18,11 @@ final class TransferStats private $handlerErrorData; /** - * @param RequestInterface $request Request that was sent. - * @param ResponseInterface|null $response Response received (if any) - * @param float|null $transferTime Total handler transfer time. - * @param mixed $handlerErrorData Handler error data. - * @param array $handlerStats Handler specific stats. + * @param RequestInterface $request Request that was sent. + * @param ResponseInterface $response Response received (if any) + * @param null $transferTime Total handler transfer time. + * @param mixed $handlerErrorData Handler error data. + * @param array $handlerStats Handler specific stats. */ public function __construct( RequestInterface $request, @@ -93,7 +93,7 @@ public function getEffectiveUri() /** * Get the estimated time the request was being transferred by the handler. * - * @return float|null Time in seconds. + * @return float Time in seconds. */ public function getTransferTime() { diff --git a/vendor/guzzlehttp/guzzle/src/functions.php b/vendor/guzzlehttp/guzzle/src/functions.php index 5e806f63272296a1fee2becef8f7eced082b011e..a3ac450db94cfe1409f5ec052d2710e6426e469e 100644 --- a/vendor/guzzlehttp/guzzle/src/functions.php +++ b/vendor/guzzlehttp/guzzle/src/functions.php @@ -1,12 +1,10 @@ <?php namespace GuzzleHttp; -use GuzzleHttp\Exception\InvalidArgumentException; use GuzzleHttp\Handler\CurlHandler; use GuzzleHttp\Handler\CurlMultiHandler; use GuzzleHttp\Handler\Proxy; use GuzzleHttp\Handler\StreamHandler; -use Psr\Http\Message\UriInterface; /** * Expands a URI template @@ -58,7 +56,7 @@ function describe_type($input) /** * Parses an array of header lines into an associative array of headers. * - * @param iterable $lines Header lines array of strings in the following + * @param array $lines Header lines array of strings in the following * format: "Name: Value" * @return array */ @@ -198,8 +196,7 @@ function default_ca_bundle() } } - throw new \RuntimeException( - <<< EOT + throw new \RuntimeException(<<< EOT No system CA bundle could be found in any of the the common system locations. PHP versions earlier than 5.6 are not properly configured to use the system's CA bundle by default. In order to verify peer certificates, you will need to @@ -297,14 +294,14 @@ function is_host_in_noproxy($host, array $noProxyArray) * @param int $options Bitmask of JSON decode options. * * @return mixed - * @throws Exception\InvalidArgumentException if the JSON cannot be decoded. + * @throws \InvalidArgumentException if the JSON cannot be decoded. * @link http://www.php.net/manual/en/function.json-decode.php */ function json_decode($json, $assoc = false, $depth = 512, $options = 0) { $data = \json_decode($json, $assoc, $depth, $options); if (JSON_ERROR_NONE !== json_last_error()) { - throw new Exception\InvalidArgumentException( + throw new \InvalidArgumentException( 'json_decode error: ' . json_last_error_msg() ); } @@ -320,75 +317,17 @@ function json_decode($json, $assoc = false, $depth = 512, $options = 0) * @param int $depth Set the maximum depth. Must be greater than zero. * * @return string - * @throws Exception\InvalidArgumentException if the JSON cannot be encoded. + * @throws \InvalidArgumentException if the JSON cannot be encoded. * @link http://www.php.net/manual/en/function.json-encode.php */ function json_encode($value, $options = 0, $depth = 512) { $json = \json_encode($value, $options, $depth); if (JSON_ERROR_NONE !== json_last_error()) { - throw new Exception\InvalidArgumentException( + throw new \InvalidArgumentException( 'json_encode error: ' . json_last_error_msg() ); } return $json; } - -/** - * Wrapper for the hrtime() or microtime() functions - * (depending on the PHP version, one of the two is used) - * - * @return float|mixed UNIX timestamp - * @internal - */ -function _current_time() -{ - return function_exists('hrtime') ? hrtime(true) / 1e9 : microtime(true); -} - - -/** - * @param int $options - * - * @return UriInterface - * - * @internal - */ -function _idn_uri_convert(UriInterface $uri, $options = 0) -{ - if ($uri->getHost()) { - $idnaVariant = defined('INTL_IDNA_VARIANT_UTS46') ? INTL_IDNA_VARIANT_UTS46 : 0; - $asciiHost = $idnaVariant === 0 - ? idn_to_ascii($uri->getHost(), $options) - : idn_to_ascii($uri->getHost(), $options, $idnaVariant, $info); - if ($asciiHost === false) { - $errorBitSet = isset($info['errors']) ? $info['errors'] : 0; - - $errorConstants = array_filter(array_keys(get_defined_constants()), function ($name) { - return substr($name, 0, 11) === 'IDNA_ERROR_'; - }); - - $errors = []; - foreach ($errorConstants as $errorConstant) { - if ($errorBitSet & constant($errorConstant)) { - $errors[] = $errorConstant; - } - } - - $errorMessage = 'IDN conversion failed'; - if ($errors) { - $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; - } - - throw new InvalidArgumentException($errorMessage); - } else { - if ($uri->getHost() !== $asciiHost) { - // Replace URI only if the ASCII version is different - $uri = $uri->withHost($asciiHost); - } - } - } - - return $uri; -} diff --git a/vendor/masterminds/html5/.gitignore b/vendor/masterminds/html5/.gitignore index 1fa9e586153da6654167044016b906de96eeb15e..f9ead4a8f306d0a78a893eaf4d1d6b84a2ecaac8 100644 --- a/vendor/masterminds/html5/.gitignore +++ b/vendor/masterminds/html5/.gitignore @@ -1,5 +1,4 @@ vendor/ scratch.php composer.lock -build/ -.php_cs.cache +build/ \ No newline at end of file diff --git a/vendor/masterminds/html5/.php_cs.dist b/vendor/masterminds/html5/.php_cs.dist deleted file mode 100644 index d5e49183d574f5cc4b3026763cba624517c03e25..0000000000000000000000000000000000000000 --- a/vendor/masterminds/html5/.php_cs.dist +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -$finder = PhpCsFixer\Finder::create() - ->in(__DIR__) -; - -return PhpCsFixer\Config::create() - ->setRules(array( - '@Symfony' => true, - 'concat_space' => array('spacing' => 'one'), - 'phpdoc_annotation_without_dot' => false, - )) - ->setFinder($finder) -; diff --git a/vendor/masterminds/html5/.travis.yml b/vendor/masterminds/html5/.travis.yml index 469dc220ad90a88b89193e0366e3563ce1472fbf..9183e6569b8a56350089f6ff74deb50c8f7056f2 100644 --- a/vendor/masterminds/html5/.travis.yml +++ b/vendor/masterminds/html5/.travis.yml @@ -1,42 +1,39 @@ language: php -dist: trusty + sudo: false +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - hhvm + matrix: - include: - - php: 5.3 - dist: precise - env: COMPOSER_FLAGS="--prefer-lowest" - - php: 5.4 - - php: 5.5 - - php: 5.6 - env: SCRUTINIZER=1 - - php: 7.0 - env: COMPOSER_FLAGS="--prefer-lowest" - - php: 7.1 - env: CS_FIXER=1 - - php: 7.2 - - php: 7.3 - env: BENCHMARK=1 - fast_finish: true + include: + - php: 5.3 + dist: precise + fast_finish: true + +dist: trusty cache: directories: - $HOME/.composer/cache +notifications: + irc: "irc.freenode.net#masterminds" + before_script: - composer self-update - - composer update $COMPOSER_FLAGS --prefer-dist + - composer install script: - - stty cols 120 - - if [ "$CS_FIXER" == 1 ]; then wget https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.13.1/php-cs-fixer.phar && php php-cs-fixer.phar fix --dry-run --diff; fi - mkdir -p build/logs - ./vendor/bin/phpunit --coverage-clover=coverage.xml after_script: - - if [ "$SCRUTINIZER" == 1 ]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.xml; fi - - if [ "$BENCHMARK" == 1 ]; then php test/benchmark/run.php 10; fi - -notifications: - irc: "irc.freenode.net#masterminds" + - bash -c 'if [ "$TRAVIS_PHP_VERSION" == "5.6" ] ; then wget https://scrutinizer-ci.com/ocular.phar; fi;' + - bash -c 'if [ "$TRAVIS_PHP_VERSION" == "5.6" ] ; then php ocular.phar code-coverage:upload --format=php-clover coverage.xml; fi;' + - php test/benchmark/run.php 50 diff --git a/vendor/masterminds/html5/README.md b/vendor/masterminds/html5/README.md index 546d3e24cfe78a5fdb92cbc23dcf7b4d32248f4c..e2cfdf9527c5bf336c7ac92504ddd9308528d78c 100644 --- a/vendor/masterminds/html5/README.md +++ b/vendor/masterminds/html5/README.md @@ -2,7 +2,7 @@ HTML5 is a standards-compliant HTML5 parser and writer written entirely in PHP. It is stable and used in many production websites, and has -well over [five million downloads](https://packagist.org/packages/masterminds/html5). +well over [one million downloads](https://packagist.org/packages/masterminds/html5). HTML5 provides the following features. @@ -12,7 +12,7 @@ HTML5 provides the following features. - Event-based (SAX-like) parser - A DOM tree builder - Interoperability with [QueryPath](https://github.com/technosophos/querypath) -- Runs on **PHP** 5.3.0 or newer +- Runs on **PHP** 5.3.0 or newer and **HHVM** 3.2 or newer [](https://travis-ci.org/Masterminds/html5-php) [](https://packagist.org/packages/masterminds/html5) @@ -24,21 +24,21 @@ HTML5 provides the following features. Install HTML5-PHP using [composer](http://getcomposer.org/). -By adding the `masterminds/html5` dependency to your `composer.json` file: +To install, add `masterminds/html5` to your `composer.json` file: ```json { "require" : { - "masterminds/html5": "^2.0" + "masterminds/html5": "2.*" }, } ``` -By invoking require command via composer executable: +(You may substitute `2.*` for a more specific release tag, of +course.) -```bash -composer require masterminds/html5 -``` +From there, use the `composer install` or `composer update` commands to +install. ## Basic Usage @@ -50,9 +50,9 @@ Here is how you use the high-level `HTML5` library API: <?php // Assuming you installed from Composer: require "vendor/autoload.php"; - use Masterminds\HTML5; + // An example HTML document: $html = <<< 'HERE' <html> @@ -75,6 +75,8 @@ print $html5->saveHTML($dom); // Or save it to a file: $html5->save($dom, 'out.html'); + +?> ``` The `$dom` created by the parser is a full `DOMDocument` object. And the @@ -115,6 +117,8 @@ The following options are supported: This library provides the following low-level APIs that you can use to create more customized HTML5 tools: +- An `InputStream` abstraction that can work with different kinds of +input source (not just files and strings). - A SAX-like event-based parser that you can hook into for special kinds of parsing. - A flexible error-reporting mechanism that can be tuned to document @@ -128,6 +132,7 @@ is well-documented. The parser is designed as follows: +- The `InputStream` portion handles direct I/O. - The `Scanner` handles scanning on behalf of the parser. - The `Tokenizer` requests data off of the scanner, parses it, clasifies it, and sends it to an `EventHandler`. It is a *recursive descent parser.* @@ -197,7 +202,7 @@ issues known issues that are not presently on the roadmap: - PLAINTEXT: Unsupported. - Adoption Agency Algorithm: Not yet implemented. (8.2.5.4.7) -## XML Namespaces +##XML Namespaces To use XML style namespaces you have to configure well the main `HTML5` instance. @@ -214,7 +219,7 @@ $dom->documentElement->namespaceURI; // http://www.example.com ``` You can also add some default prefixes that will not require the namespace declaration, -but its elements will be namespaced. +but it's elements will be namespaced. ```php use Masterminds\HTML5; @@ -238,7 +243,7 @@ a list of contributors. We owe a huge debt of gratitude to the original authors of html5lib. -While not much of the original parser remains, we learned a lot from +While not much of the orignal parser remains, we learned a lot from reading the html5lib library. And some pieces remain here. In particular, much of the UTF-8 and Unicode handling is derived from the html5lib project. diff --git a/vendor/masterminds/html5/RELEASE.md b/vendor/masterminds/html5/RELEASE.md index cd43e7b8cb8f8f9c349beea303a34d30fa59cb2c..b4ddf824d7ac359aefa91a19b6025ce09d748cc8 100644 --- a/vendor/masterminds/html5/RELEASE.md +++ b/vendor/masterminds/html5/RELEASE.md @@ -1,37 +1,5 @@ # Release Notes -2.7.0 (2019-07-25) - -- #164: Drop HHVM support -- #168: Set default encoding in the DOMDocument object - -2.6.0 (2019-03-10) - -- #163: Allow to pass a charset to the Scanner - -2.5.0 (2018-12-27) - -- #162, #161, #155, #154, #153, #151: big performance improvements -- #156: fixed typos -- #160: adopt and enforce code style -- #159: remove deprecated php unit base test case -- #150: backport changes from old master branch - -2.4.0 (2018-11-17) - -- #148: Improve performance by moving sequence matching -- #147: Improve the Tokenizer performance -- #146: Improve performance by relying on a native string instead of InputStream -- #144: Add DOM extension in composer.json -- #145: Add more extensions on composer.json, improve phpdocs and remove dead code -- #143: Remove experimental comment - -2.3.1 (2018-10-18) - -- #121: Audio is not a block tag (fixed by #141) -- #136: Handle illegal self-closing according to spec (fixed by #137) -- #141: Minor fixes in the README - 2.3.0 (2017-09-04) - #129: image within inline svg breaks system (fixed by #133) diff --git a/vendor/masterminds/html5/bin/entities.php b/vendor/masterminds/html5/bin/entities.php index 56323a34112d4cd6a3ded6aa557db76b856c266a..0fbd6eca0cd1db0496e52afa5ecf783e4569b0c7 100644 --- a/vendor/masterminds/html5/bin/entities.php +++ b/vendor/masterminds/html5/bin/entities.php @@ -11,16 +11,16 @@ $table = array(); foreach ($json as $name => $obj) { - $sname = substr($name, 1, -1); - $table[$sname] = $obj->characters; + $sname = substr($name, 1, -1); + $table[$sname] = $obj->characters; } -echo '<?php +print '<?php namespace Masterminds\\HTML5; /** Entity lookup tables. This class is automatically generated. */ class Entities { public static $byName = '; var_export($table); -echo '; +print '; }' . PHP_EOL; //print serialize($table); diff --git a/vendor/masterminds/html5/composer.json b/vendor/masterminds/html5/composer.json index 65047905c977b67a0ff9e10d443f8dec2bff8cbf..f4f43d325519a710d23689ab7eb5a8473f99f019 100644 --- a/vendor/masterminds/html5/composer.json +++ b/vendor/masterminds/html5/composer.json @@ -20,14 +20,12 @@ } ], "require" : { - "ext-ctype": "*", - "ext-dom": "*", "ext-libxml" : "*", "php" : ">=5.3.0" }, "require-dev": { "satooshi/php-coveralls": "1.0.*", - "phpunit/phpunit" : "^4.8.35", + "phpunit/phpunit" : "4.*", "sami/sami": "~2.0" }, "autoload": { @@ -38,7 +36,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.2-dev" } } } diff --git a/vendor/masterminds/html5/example.php b/vendor/masterminds/html5/example.php index e4e1f22f99d13418872d8b62dd5571be4b496252..5e3b25fc00fb92130de9b939a18141b896bf4827 100644 --- a/vendor/masterminds/html5/example.php +++ b/vendor/masterminds/html5/example.php @@ -1,8 +1,9 @@ <?php -require 'vendor/autoload.php'; +require "vendor/autoload.php"; use Masterminds\HTML5; + $html = <<< 'HERE' <html> <head> @@ -27,6 +28,6 @@ $html5 = new HTML5(); $dom = $html5->loadHTML($html); -echo "Converting to HTML 5\n"; +print "Converting to HTML 5\n"; -$html5->save($dom, fopen('php://stdin', 'w')); +$html5->save($dom, fopen("php://stdin", 'w')); diff --git a/vendor/masterminds/html5/sami.php b/vendor/masterminds/html5/sami.php index e776cc1c23f359f9d172fe9e700a8d583bc98e93..d0dd80b544e9ee4e67395e90c20da97c887d1c96 100644 --- a/vendor/masterminds/html5/sami.php +++ b/vendor/masterminds/html5/sami.php @@ -2,9 +2,9 @@ use Sami\Sami; -return new Sami(__DIR__ . '/src', array( - 'title' => 'HTML5-PHP API', - 'build_dir' => __DIR__ . '/build/apidoc', - 'cache_dir' => __DIR__ . '/build/sami-cache', +return new Sami(__DIR__ . '/src' , array( + 'title' => 'HTML5-PHP API', + 'build_dir' => __DIR__.'/build/apidoc', + 'cache_dir' => __DIR__.'/build/sami-cache', 'default_opened_level' => 1, -)); +)); \ No newline at end of file diff --git a/vendor/masterminds/html5/src/HTML5.php b/vendor/masterminds/html5/src/HTML5.php index 6316e43a988049defef6b7dced4d7c0c9f5caa4e..990e8f4339dcae342d1eab05c238318e2b2a1e5c 100644 --- a/vendor/masterminds/html5/src/HTML5.php +++ b/vendor/masterminds/html5/src/HTML5.php @@ -1,7 +1,8 @@ <?php - namespace Masterminds; +use Masterminds\HTML5\Parser\FileInputStream; +use Masterminds\HTML5\Parser\StringInputStream; use Masterminds\HTML5\Parser\DOMTreeBuilder; use Masterminds\HTML5\Parser\Scanner; use Masterminds\HTML5\Parser\Tokenizer; @@ -10,38 +11,39 @@ /** * This class offers convenience methods for parsing and serializing HTML5. - * It is roughly designed to mirror the \DOMDocument native class. + * It is roughly designed to mirror the \DOMDocument class that is + * provided with most versions of PHP. + * + * EXPERIMENTAL. This may change or be completely replaced. */ class HTML5 { + /** * Global options for the parser and serializer. * * @var array */ - private $defaultOptions = array( - // Whether the serializer should aggressively encode all characters as entities. - 'encode_entities' => false, - - // Prevents the parser from automatically assigning the HTML5 namespace to the DOM document. - 'disable_html_ns' => false, + protected $options = array( + // If the serializer should encode all entities. + 'encode_entities' => false ); protected $errors = array(); - public function __construct(array $defaultOptions = array()) + public function __construct(array $options = array()) { - $this->defaultOptions = array_merge($this->defaultOptions, $defaultOptions); + $this->options = array_merge($this->options, $options); } /** - * Get the current default options. + * Get the default options. * - * @return array + * @return array The default options. */ public function getOptions() { - return $this->defaultOptions; + return $this->options; } /** @@ -54,22 +56,26 @@ public function getOptions() * * The rules governing parsing are set out in the HTML 5 spec. * - * @param string|resource $file The path to the file to parse. If this is a resource, it is - * assumed to be an open stream whose pointer is set to the first - * byte of input. - * @param array $options Configuration options when parsing the HTML. - * + * @param string $file + * The path to the file to parse. If this is a resource, it is + * assumed to be an open stream whose pointer is set to the first + * byte of input. + * @param array $options + * Configuration options when parsing the HTML * @return \DOMDocument A DOM document. These object type is defined by the libxml - * library, and should have been included with your version of PHP. + * library, and should have been included with your version of PHP. */ public function load($file, array $options = array()) { // Handle the case where file is a resource. if (is_resource($file)) { - return $this->parse(stream_get_contents($file), $options); + // FIXME: We need a StreamInputStream class. + return $this->loadHTML(stream_get_contents($file), $options); } - return $this->parse(file_get_contents($file), $options); + $input = new FileInputStream($file); + + return $this->parse($input, $options); } /** @@ -78,15 +84,18 @@ public function load($file, array $options = array()) * Take a string of HTML 5 (or earlier) and parse it into a * DOMDocument. * - * @param string $string A html5 document as a string. - * @param array $options Configuration options when parsing the HTML. - * + * @param string $string + * A html5 document as a string. + * @param array $options + * Configuration options when parsing the HTML * @return \DOMDocument A DOM document. DOM is part of libxml, which is included with - * almost all distribtions of PHP. + * almost all distribtions of PHP. */ public function loadHTML($string, array $options = array()) { - return $this->parse($string, $options); + $input = new StringInputStream($string); + + return $this->parse($input, $options); } /** @@ -95,13 +104,15 @@ public function loadHTML($string, array $options = array()) * This is here to provide backwards compatibility with the * PHP DOM implementation. It simply calls load(). * - * @param string $file The path to the file to parse. If this is a resource, it is - * assumed to be an open stream whose pointer is set to the first - * byte of input. - * @param array $options Configuration options when parsing the HTML. + * @param string $file + * The path to the file to parse. If this is a resource, it is + * assumed to be an open stream whose pointer is set to the first + * byte of input. + * @param array $options + * Configuration options when parsing the HTML * * @return \DOMDocument A DOM document. These object type is defined by the libxml - * library, and should have been included with your version of PHP. + * library, and should have been included with your version of PHP. */ public function loadHTMLFile($file, array $options = array()) { @@ -111,19 +122,23 @@ public function loadHTMLFile($file, array $options = array()) /** * Parse a HTML fragment from a string. * - * @param string $string the HTML5 fragment as a string - * @param array $options Configuration options when parsing the HTML + * @param string $string + * The html5 fragment as a string. + * @param array $options + * Configuration options when parsing the HTML * * @return \DOMDocumentFragment A DOM fragment. The DOM is part of libxml, which is included with - * almost all distributions of PHP. + * almost all distributions of PHP. */ public function loadHTMLFragment($string, array $options = array()) { - return $this->parseFragment($string, $options); + $input = new StringInputStream($string); + + return $this->parseFragment($input, $options); } /** - * Return all errors encountered into parsing phase. + * Return all errors encountered into parsing phase * * @return array */ @@ -133,7 +148,7 @@ public function getErrors() } /** - * Return true it some errors were encountered into parsing phase. + * Return true it some errors were encountered into parsing phase * * @return bool */ @@ -143,20 +158,18 @@ public function hasErrors() } /** - * Parse an input string. + * Parse an input stream. * - * @param string $input - * @param array $options - * - * @return \DOMDocument + * Lower-level loading function. This requires an input stream instead + * of a string, file, or resource. */ - public function parse($input, array $options = array()) + public function parse(\Masterminds\HTML5\Parser\InputStream $input, array $options = array()) { $this->errors = array(); - $options = array_merge($this->defaultOptions, $options); + $options = array_merge($this->getOptions(), $options); $events = new DOMTreeBuilder(false, $options); - $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8'); - $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML); + $scanner = new Scanner($input); + $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML: Tokenizer::CONFORMANT_HTML); $parser->parse(); $this->errors = $events->getErrors(); @@ -169,18 +182,13 @@ public function parse($input, array $options = array()) * * Lower-level loading function. This requires an input stream instead * of a string, file, or resource. - * - * @param string $input The input data to parse in the form of a string. - * @param array $options An array of options. - * - * @return \DOMDocumentFragment */ - public function parseFragment($input, array $options = array()) + public function parseFragment(\Masterminds\HTML5\Parser\InputStream $input, array $options = array()) { - $options = array_merge($this->defaultOptions, $options); + $options = array_merge($this->getOptions(), $options); $events = new DOMTreeBuilder(true, $options); - $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8'); - $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML); + $scanner = new Scanner($input); + $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML: Tokenizer::CONFORMANT_HTML); $parser->parse(); $this->errors = $events->getErrors(); @@ -191,12 +199,15 @@ public function parseFragment($input, array $options = array()) /** * Save a DOM into a given file as HTML5. * - * @param mixed $dom The DOM to be serialized. - * @param string|resource $file The filename to be written or resource to write to. - * @param array $options Configuration options when serializing the DOM. These include: - * - encode_entities: Text written to the output is escaped by default and not all - * entities are encoded. If this is set to true all entities will be encoded. - * Defaults to false. + * @param mixed $dom + * The DOM to be serialized. + * @param string $file + * The filename to be written. + * @param array $options + * Configuration options when serializing the DOM. These include: + * - encode_entities: Text written to the output is escaped by default and not all + * entities are encoded. If this is set to true all entities will be encoded. + * Defaults to false. */ public function save($dom, $file, $options = array()) { @@ -205,9 +216,9 @@ public function save($dom, $file, $options = array()) $stream = $file; $close = false; } else { - $stream = fopen($file, 'wb'); + $stream = fopen($file, 'w'); } - $options = array_merge($this->defaultOptions, $options); + $options = array_merge($this->getOptions(), $options); $rules = new OutputRules($stream, $options); $trav = new Traverser($dom, $stream, $rules, $options); @@ -221,19 +232,21 @@ public function save($dom, $file, $options = array()) /** * Convert a DOM into an HTML5 string. * - * @param mixed $dom The DOM to be serialized. - * @param array $options Configuration options when serializing the DOM. These include: - * - encode_entities: Text written to the output is escaped by default and not all - * entities are encoded. If this is set to true all entities will be encoded. - * Defaults to false. + * @param mixed $dom + * The DOM to be serialized. + * @param array $options + * Configuration options when serializing the DOM. These include: + * - encode_entities: Text written to the output is escaped by default and not all + * entities are encoded. If this is set to true all entities will be encoded. + * Defaults to false. * * @return string A HTML5 documented generated from the DOM. */ public function saveHTML($dom, $options = array()) { - $stream = fopen('php://temp', 'wb'); - $this->save($dom, $stream, array_merge($this->defaultOptions, $options)); + $stream = fopen('php://temp', 'w'); + $this->save($dom, $stream, array_merge($this->getOptions(), $options)); - return stream_get_contents($stream, -1, 0); + return stream_get_contents($stream, - 1, 0); } } diff --git a/vendor/masterminds/html5/src/HTML5/Elements.php b/vendor/masterminds/html5/src/HTML5/Elements.php index 8fe798789e8d2c61844e52246e03361a19915cdf..0e880e7f693507e58f555388b985476ac1268829 100644 --- a/vendor/masterminds/html5/src/HTML5/Elements.php +++ b/vendor/masterminds/html5/src/HTML5/Elements.php @@ -2,7 +2,6 @@ /** * Provide general element functions. */ - namespace Masterminds\HTML5; /** @@ -18,6 +17,7 @@ */ class Elements { + /** * Indicates an element is described in the specification. */ @@ -77,116 +77,116 @@ class Elements * @var array */ public static $html5 = array( - 'a' => 1, - 'abbr' => 1, - 'address' => 65, // NORMAL | BLOCK_TAG - 'area' => 9, // NORMAL | VOID_TAG - 'article' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'aside' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'audio' => 1, // NORMAL - 'b' => 1, - 'base' => 9, // NORMAL | VOID_TAG - 'bdi' => 1, - 'bdo' => 1, - 'blockquote' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'body' => 1, - 'br' => 9, // NORMAL | VOID_TAG - 'button' => 1, - 'canvas' => 65, // NORMAL | BLOCK_TAG - 'caption' => 1, - 'cite' => 1, - 'code' => 1, - 'col' => 9, // NORMAL | VOID_TAG - 'colgroup' => 1, - 'command' => 9, // NORMAL | VOID_TAG + "a" => 1, + "abbr" => 1, + "address" => 65, // NORMAL | BLOCK_TAG + "area" => 9, // NORMAL | VOID_TAG + "article" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "aside" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "audio" => 65, // NORMAL | BLOCK_TAG + "b" => 1, + "base" => 9, // NORMAL | VOID_TAG + "bdi" => 1, + "bdo" => 1, + "blockquote" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "body" => 1, + "br" => 9, // NORMAL | VOID_TAG + "button" => 1, + "canvas" => 65, // NORMAL | BLOCK_TAG + "caption" => 1, + "cite" => 1, + "code" => 1, + "col" => 9, // NORMAL | VOID_TAG + "colgroup" => 1, + "command" => 9, // NORMAL | VOID_TAG // "data" => 1, // This is highly experimental and only part of the whatwg spec (not w3c). See https://developer.mozilla.org/en-US/docs/HTML/Element/data - 'datalist' => 1, - 'dd' => 65, // NORMAL | BLOCK_TAG - 'del' => 1, - 'details' => 17, // NORMAL | AUTOCLOSE_P, - 'dfn' => 1, - 'dialog' => 17, // NORMAL | AUTOCLOSE_P, - 'div' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'dl' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'dt' => 1, - 'em' => 1, - 'embed' => 9, // NORMAL | VOID_TAG - 'fieldset' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'figcaption' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'figure' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'footer' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'form' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h1' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h2' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h3' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h4' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h5' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h6' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'head' => 1, - 'header' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'hgroup' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'hr' => 73, // NORMAL | VOID_TAG - 'html' => 1, - 'i' => 1, - 'iframe' => 3, // NORMAL | TEXT_RAW - 'img' => 9, // NORMAL | VOID_TAG - 'input' => 9, // NORMAL | VOID_TAG - 'kbd' => 1, - 'ins' => 1, - 'keygen' => 9, // NORMAL | VOID_TAG - 'label' => 1, - 'legend' => 1, - 'li' => 1, - 'link' => 9, // NORMAL | VOID_TAG - 'map' => 1, - 'mark' => 1, - 'menu' => 17, // NORMAL | AUTOCLOSE_P, - 'meta' => 9, // NORMAL | VOID_TAG - 'meter' => 1, - 'nav' => 17, // NORMAL | AUTOCLOSE_P, - 'noscript' => 65, // NORMAL | BLOCK_TAG - 'object' => 1, - 'ol' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'optgroup' => 1, - 'option' => 1, - 'output' => 65, // NORMAL | BLOCK_TAG - 'p' => 209, // NORMAL | AUTOCLOSE_P | BLOCK_TAG | BLOCK_ONLY_INLINE - 'param' => 9, // NORMAL | VOID_TAG - 'pre' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'progress' => 1, - 'q' => 1, - 'rp' => 1, - 'rt' => 1, - 'ruby' => 1, - 's' => 1, - 'samp' => 1, - 'script' => 3, // NORMAL | TEXT_RAW - 'section' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'select' => 1, - 'small' => 1, - 'source' => 9, // NORMAL | VOID_TAG - 'span' => 1, - 'strong' => 1, - 'style' => 3, // NORMAL | TEXT_RAW - 'sub' => 1, - 'summary' => 17, // NORMAL | AUTOCLOSE_P, - 'sup' => 1, - 'table' => 65, // NORMAL | BLOCK_TAG - 'tbody' => 1, - 'td' => 1, - 'textarea' => 5, // NORMAL | TEXT_RCDATA - 'tfoot' => 65, // NORMAL | BLOCK_TAG - 'th' => 1, - 'thead' => 1, - 'time' => 1, - 'title' => 5, // NORMAL | TEXT_RCDATA - 'tr' => 1, - 'track' => 9, // NORMAL | VOID_TAG - 'u' => 1, - 'ul' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'var' => 1, - 'video' => 65, // NORMAL | BLOCK_TAG - 'wbr' => 9, // NORMAL | VOID_TAG + "datalist" => 1, + "dd" => 65, // NORMAL | BLOCK_TAG + "del" => 1, + "details" => 17, // NORMAL | AUTOCLOSE_P, + "dfn" => 1, + "dialog" => 17, // NORMAL | AUTOCLOSE_P, + "div" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "dl" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "dt" => 1, + "em" => 1, + "embed" => 9, // NORMAL | VOID_TAG + "fieldset" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "figcaption" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "figure" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "footer" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "form" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "h1" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "h2" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "h3" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "h4" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "h5" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "h6" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "head" => 1, + "header" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "hgroup" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "hr" => 73, // NORMAL | VOID_TAG + "html" => 1, + "i" => 1, + "iframe" => 3, // NORMAL | TEXT_RAW + "img" => 9, // NORMAL | VOID_TAG + "input" => 9, // NORMAL | VOID_TAG + "kbd" => 1, + "ins" => 1, + "keygen" => 9, // NORMAL | VOID_TAG + "label" => 1, + "legend" => 1, + "li" => 1, + "link" => 9, // NORMAL | VOID_TAG + "map" => 1, + "mark" => 1, + "menu" => 17, // NORMAL | AUTOCLOSE_P, + "meta" => 9, // NORMAL | VOID_TAG + "meter" => 1, + "nav" => 17, // NORMAL | AUTOCLOSE_P, + "noscript" => 65, // NORMAL | BLOCK_TAG + "object" => 1, + "ol" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "optgroup" => 1, + "option" => 1, + "output" => 65, // NORMAL | BLOCK_TAG + "p" => 209, // NORMAL | AUTOCLOSE_P | BLOCK_TAG | BLOCK_ONLY_INLINE + "param" => 9, // NORMAL | VOID_TAG + "pre" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "progress" => 1, + "q" => 1, + "rp" => 1, + "rt" => 1, + "ruby" => 1, + "s" => 1, + "samp" => 1, + "script" => 3, // NORMAL | TEXT_RAW + "section" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "select" => 1, + "small" => 1, + "source" => 9, // NORMAL | VOID_TAG + "span" => 1, + "strong" => 1, + "style" => 3, // NORMAL | TEXT_RAW + "sub" => 1, + "summary" => 17, // NORMAL | AUTOCLOSE_P, + "sup" => 1, + "table" => 65, // NORMAL | BLOCK_TAG + "tbody" => 1, + "td" => 1, + "textarea" => 5, // NORMAL | TEXT_RCDATA + "tfoot" => 65, // NORMAL | BLOCK_TAG + "th" => 1, + "thead" => 1, + "time" => 1, + "title" => 5, // NORMAL | TEXT_RCDATA + "tr" => 1, + "track" => 9, // NORMAL | VOID_TAG + "u" => 1, + "ul" => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG + "var" => 1, + "video" => 65, // NORMAL | BLOCK_TAG + "wbr" => 9, // NORMAL | VOID_TAG // Legacy? 'basefont' => 8, // VOID_TAG @@ -202,7 +202,7 @@ class Elements 'marquee' => 0, 'isindex' => 8, // VOID_TAG 'xmp' => 20, // AUTOCLOSE_P | VOID_TAG | RAW_TEXT - 'noembed' => 2, // RAW_TEXT + 'noembed' => 2 // RAW_TEXT ); /** @@ -215,45 +215,45 @@ class Elements * @var array */ public static $mathml = array( - 'maction' => 1, - 'maligngroup' => 1, - 'malignmark' => 1, - 'math' => 1, - 'menclose' => 1, - 'merror' => 1, - 'mfenced' => 1, - 'mfrac' => 1, - 'mglyph' => 1, - 'mi' => 1, - 'mlabeledtr' => 1, - 'mlongdiv' => 1, - 'mmultiscripts' => 1, - 'mn' => 1, - 'mo' => 1, - 'mover' => 1, - 'mpadded' => 1, - 'mphantom' => 1, - 'mroot' => 1, - 'mrow' => 1, - 'ms' => 1, - 'mscarries' => 1, - 'mscarry' => 1, - 'msgroup' => 1, - 'msline' => 1, - 'mspace' => 1, - 'msqrt' => 1, - 'msrow' => 1, - 'mstack' => 1, - 'mstyle' => 1, - 'msub' => 1, - 'msup' => 1, - 'msubsup' => 1, - 'mtable' => 1, - 'mtd' => 1, - 'mtext' => 1, - 'mtr' => 1, - 'munder' => 1, - 'munderover' => 1, + "maction" => 1, + "maligngroup" => 1, + "malignmark" => 1, + "math" => 1, + "menclose" => 1, + "merror" => 1, + "mfenced" => 1, + "mfrac" => 1, + "mglyph" => 1, + "mi" => 1, + "mlabeledtr" => 1, + "mlongdiv" => 1, + "mmultiscripts" => 1, + "mn" => 1, + "mo" => 1, + "mover" => 1, + "mpadded" => 1, + "mphantom" => 1, + "mroot" => 1, + "mrow" => 1, + "ms" => 1, + "mscarries" => 1, + "mscarry" => 1, + "msgroup" => 1, + "msline" => 1, + "mspace" => 1, + "msqrt" => 1, + "msrow" => 1, + "mstack" => 1, + "mstyle" => 1, + "msub" => 1, + "msup" => 1, + "msubsup" => 1, + "mtable" => 1, + "mtd" => 1, + "mtext" => 1, + "mtr" => 1, + "munder" => 1, + "munderover" => 1 ); /** @@ -269,90 +269,90 @@ class Elements * @var array */ public static $svg = array( - 'a' => 1, - 'altGlyph' => 1, - 'altGlyphDef' => 1, - 'altGlyphItem' => 1, - 'animate' => 1, - 'animateColor' => 1, - 'animateMotion' => 1, - 'animateTransform' => 1, - 'circle' => 1, - 'clipPath' => 1, - 'color-profile' => 1, - 'cursor' => 1, - 'defs' => 1, - 'desc' => 1, - 'ellipse' => 1, - 'feBlend' => 1, - 'feColorMatrix' => 1, - 'feComponentTransfer' => 1, - 'feComposite' => 1, - 'feConvolveMatrix' => 1, - 'feDiffuseLighting' => 1, - 'feDisplacementMap' => 1, - 'feDistantLight' => 1, - 'feFlood' => 1, - 'feFuncA' => 1, - 'feFuncB' => 1, - 'feFuncG' => 1, - 'feFuncR' => 1, - 'feGaussianBlur' => 1, - 'feImage' => 1, - 'feMerge' => 1, - 'feMergeNode' => 1, - 'feMorphology' => 1, - 'feOffset' => 1, - 'fePointLight' => 1, - 'feSpecularLighting' => 1, - 'feSpotLight' => 1, - 'feTile' => 1, - 'feTurbulence' => 1, - 'filter' => 1, - 'font' => 1, - 'font-face' => 1, - 'font-face-format' => 1, - 'font-face-name' => 1, - 'font-face-src' => 1, - 'font-face-uri' => 1, - 'foreignObject' => 1, - 'g' => 1, - 'glyph' => 1, - 'glyphRef' => 1, - 'hkern' => 1, - 'image' => 1, - 'line' => 1, - 'linearGradient' => 1, - 'marker' => 1, - 'mask' => 1, - 'metadata' => 1, - 'missing-glyph' => 1, - 'mpath' => 1, - 'path' => 1, - 'pattern' => 1, - 'polygon' => 1, - 'polyline' => 1, - 'radialGradient' => 1, - 'rect' => 1, - 'script' => 3, // NORMAL | RAW_TEXT - 'set' => 1, - 'stop' => 1, - 'style' => 3, // NORMAL | RAW_TEXT - 'svg' => 1, - 'switch' => 1, - 'symbol' => 1, - 'text' => 1, - 'textPath' => 1, - 'title' => 1, - 'tref' => 1, - 'tspan' => 1, - 'use' => 1, - 'view' => 1, - 'vkern' => 1, + "a" => 1, + "altGlyph" => 1, + "altGlyphDef" => 1, + "altGlyphItem" => 1, + "animate" => 1, + "animateColor" => 1, + "animateMotion" => 1, + "animateTransform" => 1, + "circle" => 1, + "clipPath" => 1, + "color-profile" => 1, + "cursor" => 1, + "defs" => 1, + "desc" => 1, + "ellipse" => 1, + "feBlend" => 1, + "feColorMatrix" => 1, + "feComponentTransfer" => 1, + "feComposite" => 1, + "feConvolveMatrix" => 1, + "feDiffuseLighting" => 1, + "feDisplacementMap" => 1, + "feDistantLight" => 1, + "feFlood" => 1, + "feFuncA" => 1, + "feFuncB" => 1, + "feFuncG" => 1, + "feFuncR" => 1, + "feGaussianBlur" => 1, + "feImage" => 1, + "feMerge" => 1, + "feMergeNode" => 1, + "feMorphology" => 1, + "feOffset" => 1, + "fePointLight" => 1, + "feSpecularLighting" => 1, + "feSpotLight" => 1, + "feTile" => 1, + "feTurbulence" => 1, + "filter" => 1, + "font" => 1, + "font-face" => 1, + "font-face-format" => 1, + "font-face-name" => 1, + "font-face-src" => 1, + "font-face-uri" => 1, + "foreignObject" => 1, + "g" => 1, + "glyph" => 1, + "glyphRef" => 1, + "hkern" => 1, + "image" => 1, + "line" => 1, + "linearGradient" => 1, + "marker" => 1, + "mask" => 1, + "metadata" => 1, + "missing-glyph" => 1, + "mpath" => 1, + "path" => 1, + "pattern" => 1, + "polygon" => 1, + "polyline" => 1, + "radialGradient" => 1, + "rect" => 1, + "script" => 3, // NORMAL | RAW_TEXT + "set" => 1, + "stop" => 1, + "style" => 3, // NORMAL | RAW_TEXT + "svg" => 1, + "switch" => 1, + "symbol" => 1, + "text" => 1, + "textPath" => 1, + "title" => 1, + "tref" => 1, + "tspan" => 1, + "use" => 1, + "view" => 1, + "vkern" => 1 ); /** - * Some attributes in SVG are case sensitive. + * Some attributes in SVG are case sensetitive. * * This map contains key/value pairs with the key as the lowercase attribute * name and the value with the correct casing. @@ -419,11 +419,11 @@ class Elements 'viewtarget' => 'viewTarget', 'xchannelselector' => 'xChannelSelector', 'ychannelselector' => 'yChannelSelector', - 'zoomandpan' => 'zoomAndPan', + 'zoomandpan' => 'zoomAndPan' ); /** - * Some SVG elements are case sensitive. + * Some SVG elements are case sensetitive. * This map contains these. * * The map contains key/value store of the name is lowercase as the keys and @@ -465,7 +465,7 @@ class Elements 'glyphref' => 'glyphRef', 'lineargradient' => 'linearGradient', 'radialgradient' => 'radialGradient', - 'textpath' => 'textPath', + 'textpath' => 'textPath' ); /** @@ -477,26 +477,32 @@ class Elements * * Elements::isA('script', Elements::TEXT_RCDATA); // Returns false. * - * @param string $name The element name. - * @param int $mask One of the constants on this class. - * - * @return bool true if the element matches the mask, false otherwise. + * @param string $name + * The element name. + * @param int $mask + * One of the constants on this class. + * @return boolean true if the element matches the mask, false otherwise. */ public static function isA($name, $mask) { - return (static::element($name) & $mask) === $mask; + if (! static::isElement($name)) { + return false; + } + + return (static::element($name) & $mask) == $mask; } /** * Test if an element is a valid html5 element. * - * @param string $name The name of the element. + * @param string $name + * The name of the element. * - * @return bool true if a html5 element and false otherwise. + * @return bool True if a html5 element and false otherwise. */ public static function isHtml5Element($name) { - // html5 element names are case insensitive. Forcing lowercase for the check. + // html5 element names are case insensetitive. Forcing lowercase for the check. // Do we need this check or will all data passed here already be lowercase? return isset(static::$html5[strtolower($name)]); } @@ -504,37 +510,41 @@ public static function isHtml5Element($name) /** * Test if an element name is a valid MathML presentation element. * - * @param string $name The name of the element. + * @param string $name + * The name of the element. * - * @return bool true if a MathML name and false otherwise. + * @return bool True if a MathML name and false otherwise. */ public static function isMathMLElement($name) { - // MathML is case-sensitive unlike html5 elements. + // MathML is case-sensetitive unlike html5 elements. return isset(static::$mathml[$name]); } /** * Test if an element is a valid SVG element. * - * @param string $name The name of the element. + * @param string $name + * The name of the element. * - * @return bool true if a SVG element and false otherise. + * @return boolean True if a SVG element and false otherise. */ public static function isSvgElement($name) { - // SVG is case-sensitive unlike html5 elements. + // SVG is case-sensetitive unlike html5 elements. return isset(static::$svg[$name]); } /** * Is an element name valid in an html5 document. + * * This includes html5 elements along with other allowed embedded content * such as svg and mathml. * - * @param string $name The name of the element. + * @param string $name + * The name of the element. * - * @return bool true if valid and false otherwise. + * @return bool True if valid and false otherwise. */ public static function isElement($name) { @@ -544,9 +554,10 @@ public static function isElement($name) /** * Get the element mask for the given element name. * - * @param string $name The name of the element. + * @param string $name + * The name of the element. * - * @return int the element mask. + * @return int|bool The element mask or false if element does not exist. */ public static function element($name) { @@ -560,15 +571,16 @@ public static function element($name) return static::$mathml[$name]; } - return 0; + return false; } /** * Normalize a SVG element name to its proper case and form. * - * @param string $name The name of the element. + * @param string $name + * The name of the element. * - * @return string the normalized form of the element name. + * @return string The normalized form of the element name. */ public static function normalizeSvgElement($name) { @@ -583,7 +595,8 @@ public static function normalizeSvgElement($name) /** * Normalize a SVG attribute name to its proper case and form. * - * @param string $name The name of the attribute. + * @param string $name + * The name of the attribute. * * @return string The normalized form of the attribute name. */ @@ -599,9 +612,11 @@ public static function normalizeSvgAttribute($name) /** * Normalize a MathML attribute name to its proper case and form. + * * Note, all MathML element names are lowercase. * - * @param string $name The name of the attribute. + * @param string $name + * The name of the attribute. * * @return string The normalized form of the attribute name. */ @@ -610,7 +625,7 @@ public static function normalizeMathMlAttribute($name) $name = strtolower($name); // Only one attribute has a mixed case form for MathML. - if ('definitionurl' === $name) { + if ($name == 'definitionurl') { $name = 'definitionURL'; } diff --git a/vendor/masterminds/html5/src/HTML5/Entities.php b/vendor/masterminds/html5/src/HTML5/Entities.php index 0e7227dc1d605385ada8bd6859b826ad20078842..2e605d652b8f96e95e46cea88f912ff594cdbfa6 100644 --- a/vendor/masterminds/html5/src/HTML5/Entities.php +++ b/vendor/masterminds/html5/src/HTML5/Entities.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5; /** @@ -8,6 +7,7 @@ */ class Entities { + public static $byName = array( 'Aacute' => 'Á', 'Aacut' => 'Á', @@ -2231,6 +2231,6 @@ class Entities 'Zscr' => '𝒵', 'zscr' => '𝓏', 'zwj' => '', - 'zwnj' => '', + 'zwnj' => '' ); } diff --git a/vendor/masterminds/html5/src/HTML5/Exception.php b/vendor/masterminds/html5/src/HTML5/Exception.php index 64e97e6ff1ea5dd7b49e7603fe130cbb7abf2443..8f33126bd49a5e5f78cd515980d008b56eb63269 100644 --- a/vendor/masterminds/html5/src/HTML5/Exception.php +++ b/vendor/masterminds/html5/src/HTML5/Exception.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5; /** diff --git a/vendor/masterminds/html5/src/HTML5/InstructionProcessor.php b/vendor/masterminds/html5/src/HTML5/InstructionProcessor.php index 33a73fcfbce510250a693880dbd17a37213a9dfe..ac6a23c54fe184dca8b3636c01c47909ff77c48f 100644 --- a/vendor/masterminds/html5/src/HTML5/InstructionProcessor.php +++ b/vendor/masterminds/html5/src/HTML5/InstructionProcessor.php @@ -2,7 +2,6 @@ /** * A handler for processor instructions. */ - namespace Masterminds\HTML5; /** @@ -19,6 +18,7 @@ */ interface InstructionProcessor { + /** * Process an individual processing instruction. * @@ -28,14 +28,16 @@ interface InstructionProcessor * - Making any subsequent modifications to the DOM by modifying the * DOMElement or its attached DOM tree. * - * @param \DOMElement $element The parent element for the current processing instruction. - * @param string $name The instruction's name. E.g. `<?php` has the name `php`. - * @param string $data All of the data between the opening and closing PI marks. - * - * @return \DOMElement The element that should be considered "Current". This may just be - * the element passed in, but if the processor added more elements, - * it may choose to reset the current element to one of the elements - * it created. (When in doubt, return the element passed in.) + * @param DOMElement $element + * The parent element for the current processing instruction. + * @param string $name + * The instruction's name. E.g. `<?php` has the name `php`. + * @param string $data + * All of the data between the opening and closing PI marks. + * @return DOMElement The element that should be considered "Current". This may just be + * the element passed in, but if the processor added more elements, + * it may choose to reset the current element to one of the elements + * it created. (When in doubt, return the element passed in.) */ public function process(\DOMElement $element, $name, $data); } diff --git a/vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php b/vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php index 490b5487bf6552e6f550de964076daff33318dd3..c1617e712571be5f6b12153c31634b40b3331308 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; use Masterminds\HTML5\Entities; @@ -7,22 +6,25 @@ /** * Manage entity references. * - * This is a simple resolver for HTML5 character reference entitites. See Entities for the list of supported entities. + * This is a simple resolver for HTML5 character reference entitites. + * See \Masterminds\HTML5\Entities for the list of supported entities. */ class CharacterReference { + protected static $numeric_mask = array( 0x0, 0x2FFFF, 0, - 0xFFFF, + 0xFFFF ); /** - * Given a name (e.g. 'amp'), lookup the UTF-8 character ('&'). - * - * @param string $name The name to look up. + * Given a name (e.g. + * 'amp'), lookup the UTF-8 character ('&') * + * @param string $name + * The name to look up. * @return string The character sequence. In UTF-8 this may be more than one byte. */ public static function lookupName($name) @@ -32,16 +34,20 @@ public static function lookupName($name) } /** - * Given a decimal number, return the UTF-8 character. + * Given a Unicode codepoint, return the UTF-8 character. * - * @param $int - * - * @return false|string|string[]|null + * (NOT USED ANYWHERE) + */ + /* + * public static function lookupCode($codePoint) { return 'POINT'; } + */ + + /** + * Given a decimal number, return the UTF-8 character. */ public static function lookupDecimal($int) { $entity = '&#' . $int . ';'; - // UNTESTED: This may fail on some planes. Couldn't find full documentation // on the value of the mask array. return mb_decode_numericentity($entity, static::$numeric_mask, 'utf-8'); @@ -49,10 +55,6 @@ public static function lookupDecimal($int) /** * Given a hexidecimal number, return the UTF-8 character. - * - * @param $hexdec - * - * @return false|string|string[]|null */ public static function lookupHex($hexdec) { diff --git a/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php b/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php index e9bca4e160cad61eea51a0dff8ebaf5836bb8572..b26860da9c1bb1f3e1c851c6e2a5db95377f389b 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php @@ -1,9 +1,7 @@ <?php - namespace Masterminds\HTML5\Parser; use Masterminds\HTML5\Elements; -use Masterminds\HTML5\InstructionProcessor; /** * Create an HTML5 DOM tree from events. @@ -26,7 +24,7 @@ class DOMTreeBuilder implements EventHandler { /** - * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0. + * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0 */ const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml'; @@ -47,14 +45,14 @@ class DOMTreeBuilder implements EventHandler const OPT_IMPLICIT_NS = 'implicit_namespaces'; /** - * Holds the HTML5 element names that causes a namespace switch. + * Holds the HTML5 element names that causes a namespace switch * * @var array */ protected $nsRoots = array( 'html' => self::NAMESPACE_HTML, 'svg' => self::NAMESPACE_SVG, - 'math' => self::NAMESPACE_MATHML, + 'math' => self::NAMESPACE_MATHML ); /** @@ -65,7 +63,7 @@ class DOMTreeBuilder implements EventHandler protected $implicitNamespaces = array( 'xml' => self::NAMESPACE_XML, 'xmlns' => self::NAMESPACE_XMLNS, - 'xlink' => self::NAMESPACE_XLINK, + 'xlink' => self::NAMESPACE_XLINK ); /** @@ -138,7 +136,6 @@ class DOMTreeBuilder implements EventHandler protected $stack = array(); protected $current; // Pointer in the tag hierarchy. - protected $rules; protected $doc; protected $frag; @@ -148,15 +145,15 @@ class DOMTreeBuilder implements EventHandler protected $insertMode = 0; /** - * Track if we are in an element that allows only inline child nodes. - * + * Track if we are in an element that allows only inline child nodes * @var string|null */ protected $onlyInline; /** * Quirks mode is enabled by default. - * Any document that is missing the DT will be considered to be in quirks mode. + * Any document that is missing the + * DT will be considered to be in quirks mode. */ protected $quirks = true; @@ -176,25 +173,25 @@ public function __construct($isFragment = false, array $options = array()) $dt = $impl->createDocumentType('html'); // $this->doc = \DOMImplementation::createDocument(NULL, 'html', $dt); $this->doc = $impl->createDocument(null, null, $dt); - $this->doc->encoding = !empty($options['encoding']) ? $options['encoding'] : 'UTF-8'; } - $this->errors = array(); $this->current = $this->doc; // ->documentElement; // Create a rules engine for tags. - $this->rules = new TreeBuildingRules(); + $this->rules = new TreeBuildingRules($this->doc); $implicitNS = array(); if (isset($this->options[self::OPT_IMPLICIT_NS])) { $implicitNS = $this->options[self::OPT_IMPLICIT_NS]; - } elseif (isset($this->options['implicitNamespaces'])) { - $implicitNS = $this->options['implicitNamespaces']; + } elseif (isset($this->options["implicitNamespaces"])) { + $implicitNS = $this->options["implicitNamespaces"]; } // Fill $nsStack with the defalut HTML5 namespaces, plus the "implicitNamespaces" array taken form $options - array_unshift($this->nsStack, $implicitNS + array('' => self::NAMESPACE_HTML) + $this->implicitNamespaces); + array_unshift($this->nsStack, $implicitNS + array( + '' => self::NAMESPACE_HTML + ) + $this->implicitNamespaces); if ($isFragment) { $this->insertMode = static::IM_IN_BODY; @@ -219,7 +216,7 @@ public function document() * * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#concept-frag-parse-context * - * @return \DOMDocumentFragment + * @return \DOMFragmentDocumentFragment */ public function fragment() { @@ -231,10 +228,8 @@ public function fragment() * * This is used for handling Processor Instructions as they are * inserted. If omitted, PI's are inserted directly into the DOM tree. - * - * @param InstructionProcessor $proc */ - public function setInstructionProcessor(InstructionProcessor $proc) + public function setInstructionProcessor(\Masterminds\HTML5\InstructionProcessor $proc) { $this->processor = $proc; } @@ -246,7 +241,7 @@ public function doctype($name, $idType = 0, $id = null, $quirks = false) $this->quirks = $quirks; if ($this->insertMode > static::IM_INITIAL) { - $this->parseError('Illegal placement of DOCTYPE tag. Ignoring: ' . $name); + $this->parseError("Illegal placement of DOCTYPE tag. Ignoring: " . $name); return; } @@ -260,32 +255,27 @@ public function doctype($name, $idType = 0, $id = null, $quirks = false) * @todo - XMLNS namespace handling (we need to parse, even if it's not valid) * - XLink, MathML and SVG namespace handling * - Omission rules: 8.1.2.4 Optional tags - * - * @param string $name - * @param array $attributes - * @param bool $selfClosing - * - * @return int */ public function startTag($name, $attributes = array(), $selfClosing = false) { + // fprintf(STDOUT, $name); $lname = $this->normalizeTagName($name); // Make sure we have an html element. - if (!$this->doc->documentElement && 'html' !== $name && !$this->frag) { + if (! $this->doc->documentElement && $name !== 'html' && ! $this->frag) { $this->startTag('html'); } // Set quirks mode if we're at IM_INITIAL with no doctype. - if ($this->insertMode === static::IM_INITIAL) { + if ($this->insertMode == static::IM_INITIAL) { $this->quirks = true; - $this->parseError('No DOCTYPE specified.'); + $this->parseError("No DOCTYPE specified."); } // SPECIAL TAG HANDLING: // Spec says do this, and "don't ask." // find the spec where this is defined... looks problematic - if ('image' === $name && !($this->insertMode === static::IM_IN_SVG || $this->insertMode === static::IM_IN_MATHML)) { + if ($name == 'image' && !($this->insertMode === static::IM_IN_SVG || $this->insertMode === static::IM_IN_MATHML)) { $name = 'img'; } @@ -301,7 +291,7 @@ public function startTag($name, $attributes = array(), $selfClosing = false) break; case 'head': if ($this->insertMode > static::IM_BEFORE_HEAD) { - $this->parseError('Unexpected head tag outside of head context.'); + $this->parseError("Unexpected head tag outside of head context."); } else { $this->insertMode = static::IM_IN_HEAD; } @@ -316,14 +306,14 @@ public function startTag($name, $attributes = array(), $selfClosing = false) $this->insertMode = static::IM_IN_MATHML; break; case 'noscript': - if ($this->insertMode === static::IM_IN_HEAD) { + if ($this->insertMode == static::IM_IN_HEAD) { $this->insertMode = static::IM_IN_HEAD_NOSCRIPT; } break; } // Special case handling for SVG. - if ($this->insertMode === static::IM_IN_SVG) { + if ($this->insertMode == static::IM_IN_SVG) { $lname = Elements::normalizeSvgElement($lname); } @@ -331,58 +321,62 @@ public function startTag($name, $attributes = array(), $selfClosing = false) // when we found a tag thats appears inside $nsRoots, we have to switch the defalut namespace if (isset($this->nsRoots[$lname]) && $this->nsStack[0][''] !== $this->nsRoots[$lname]) { array_unshift($this->nsStack, array( - '' => $this->nsRoots[$lname], + '' => $this->nsRoots[$lname] ) + $this->nsStack[0]); - ++$pushes; + $pushes ++; } $needsWorkaround = false; - if (isset($this->options['xmlNamespaces']) && $this->options['xmlNamespaces']) { + if (isset($this->options["xmlNamespaces"]) && $this->options["xmlNamespaces"]) { // when xmlNamespaces is true a and we found a 'xmlns' or 'xmlns:*' attribute, we should add a new item to the $nsStack foreach ($attributes as $aName => $aVal) { - if ('xmlns' === $aName) { + if ($aName === 'xmlns') { $needsWorkaround = $aVal; array_unshift($this->nsStack, array( - '' => $aVal, + '' => $aVal ) + $this->nsStack[0]); - ++$pushes; - } elseif ('xmlns' === (($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : '')) { + $pushes ++; + } elseif ((($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : '') === 'xmlns') { array_unshift($this->nsStack, array( - substr($aName, $pos + 1) => $aVal, + substr($aName, $pos + 1) => $aVal ) + $this->nsStack[0]); - ++$pushes; + $pushes ++; } } } if ($this->onlyInline && Elements::isA($lname, Elements::BLOCK_TAG)) { - $this->autoclose($this->onlyInline); - $this->onlyInline = null; + $this->autoclose($this->onlyInline); + $this->onlyInline = null; } try { $prefix = ($pos = strpos($lname, ':')) ? substr($lname, 0, $pos) : ''; - if (false !== $needsWorkaround) { - $xml = "<$lname xmlns=\"$needsWorkaround\" " . (strlen($prefix) && isset($this->nsStack[0][$prefix]) ? ("xmlns:$prefix=\"" . $this->nsStack[0][$prefix] . '"') : '') . '/>'; + + if ($needsWorkaround!==false) { + + $xml = "<$lname xmlns=\"$needsWorkaround\" ".(strlen($prefix) && isset($this->nsStack[0][$prefix])?("xmlns:$prefix=\"".$this->nsStack[0][$prefix]."\""):"")."/>"; $frag = new \DOMDocument('1.0', 'UTF-8'); $frag->loadXML($xml); $ele = $this->doc->importNode($frag->documentElement, true); + } else { - if (!isset($this->nsStack[0][$prefix]) || ('' === $prefix && isset($this->options[self::OPT_DISABLE_HTML_NS]) && $this->options[self::OPT_DISABLE_HTML_NS])) { + if (!isset($this->nsStack[0][$prefix]) || ($prefix === "" && isset($this->options[self::OPT_DISABLE_HTML_NS]) && $this->options[self::OPT_DISABLE_HTML_NS])) { $ele = $this->doc->createElement($lname); } else { $ele = $this->doc->createElementNS($this->nsStack[0][$prefix], $lname); } } + } catch (\DOMException $e) { $this->parseError("Illegal tag name: <$lname>. Replaced with <invalid>."); $ele = $this->doc->createElement('invalid'); } if (Elements::isA($lname, Elements::BLOCK_ONLY_INLINE)) { - $this->onlyInline = $lname; + $this->onlyInline = $lname; } // When we add some namespacess, we have to track them. Later, when "endElement" is invoked, we have to remove them. @@ -392,27 +386,32 @@ public function startTag($name, $attributes = array(), $selfClosing = false) // to avoid spl_object_hash collisions whe have to avoid garbage collection of $ele storing it into $pushes // see https://bugs.php.net/bug.php?id=67459 $this->pushes[spl_object_hash($ele)] = array($pushes, $ele); + + // SEE https://github.com/facebook/hhvm/issues/2962 + if (defined('HHVM_VERSION')) { + $ele->setAttribute('html5-php-fake-id-attribute', spl_object_hash($ele)); + } } foreach ($attributes as $aName => $aVal) { // xmlns attributes can't be set - if ('xmlns' === $aName) { + if ($aName === 'xmlns') { continue; } - if ($this->insertMode === static::IM_IN_SVG) { + if ($this->insertMode == static::IM_IN_SVG) { $aName = Elements::normalizeSvgAttribute($aName); - } elseif ($this->insertMode === static::IM_IN_MATHML) { + } elseif ($this->insertMode == static::IM_IN_MATHML) { $aName = Elements::normalizeMathMlAttribute($aName); } try { $prefix = ($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : false; - if ('xmlns' === $prefix) { - $ele->setAttributeNS(self::NAMESPACE_XMLNS, $aName, $aVal); - } elseif (false !== $prefix && isset($this->nsStack[0][$prefix])) { - $ele->setAttributeNS($this->nsStack[0][$prefix], $aName, $aVal); + if ($prefix==='xmlns') { + $ele->setAttributeNs(self::NAMESPACE_XMLNS, $aName, $aVal); + } elseif ($prefix!==false && isset($this->nsStack[0][$prefix])) { + $ele->setAttributeNs($this->nsStack[0][$prefix], $aName, $aVal); } else { $ele->setAttribute($aName, $aVal); } @@ -422,33 +421,27 @@ public function startTag($name, $attributes = array(), $selfClosing = false) } // This is necessary on a non-DTD schema, like HTML5. - if ('id' === $aName) { + if ($aName == 'id') { $ele->setIdAttribute('id', true); } } - if ($this->frag !== $this->current && $this->rules->hasRules($name)) { - // Some elements have special processing rules. Handle those separately. + // Some elements have special processing rules. Handle those separately. + if ($this->rules->hasRules($name) && $this->frag !== $this->current) { $this->current = $this->rules->evaluate($ele, $this->current); - } else { - // Otherwise, it's a standard element. + } // Otherwise, it's a standard element. + else { $this->current->appendChild($ele); - if (!Elements::isA($name, Elements::VOID_TAG)) { + // XXX: Need to handle self-closing tags and unary tags. + if (! Elements::isA($name, Elements::VOID_TAG)) { $this->current = $ele; } - - // Self-closing tags should only be respected on foreign elements - // (and are implied on void elements) - // See: https://www.w3.org/TR/html5/syntax.html#start-tags - if (Elements::isHtml5Element($name)) { - $selfClosing = false; - } } // This is sort of a last-ditch attempt to correct for cases where no head/body // elements are provided. - if ($this->insertMode <= static::IM_BEFORE_HEAD && 'head' !== $name && 'html' !== $name) { + if ($this->insertMode <= static::IM_BEFORE_HEAD && $name != 'head' && $name != 'html') { $this->insertMode = static::IM_IN_BODY; } @@ -456,15 +449,10 @@ public function startTag($name, $attributes = array(), $selfClosing = false) // but we have to remove the namespaces pushed to $nsStack. if ($pushes > 0 && Elements::isA($name, Elements::VOID_TAG)) { // remove the namespaced definded by current node - for ($i = 0; $i < $pushes; ++$i) { + for ($i = 0; $i < $pushes; $i ++) { array_shift($this->nsStack); } } - - if ($selfClosing) { - $this->endTag($name); - } - // Return the element mask, which the tokenizer can then use to set // various processing rules. return Elements::element($name); @@ -485,7 +473,7 @@ public function endTag($name) 'html', 'br', 'head', - 'title', + 'title' ))) { $this->startTag('html'); $this->endTag($name); @@ -495,45 +483,56 @@ public function endTag($name) } // Ignore the tag. - $this->parseError('Illegal closing tag at global scope.'); + $this->parseError("Illegal closing tag at global scope."); return; } // Special case handling for SVG. - if ($this->insertMode === static::IM_IN_SVG) { + if ($this->insertMode == static::IM_IN_SVG) { $lname = Elements::normalizeSvgElement($lname); } - $cid = spl_object_hash($this->current); + // See https://github.com/facebook/hhvm/issues/2962 + if (defined('HHVM_VERSION') && ($cid = $this->current->getAttribute('html5-php-fake-id-attribute'))) { + $this->current->removeAttribute('html5-php-fake-id-attribute'); + } else { + $cid = spl_object_hash($this->current); + } + + // XXX: Not sure whether we need this anymore. + // if ($name != $lname) { + // return $this->quirksTreeResolver($lname); + // } // XXX: HTML has no parent. What do we do, though, // if this element appears in the wrong place? - if ('html' === $lname) { + if ($lname == 'html') { return; } // remove the namespaced definded by current node if (isset($this->pushes[$cid])) { - for ($i = 0; $i < $this->pushes[$cid][0]; ++$i) { + for ($i = 0; $i < $this->pushes[$cid][0]; $i ++) { array_shift($this->nsStack); } unset($this->pushes[$cid]); } - if (!$this->autoclose($lname)) { + if (! $this->autoclose($lname)) { $this->parseError('Could not find closing tag for ' . $lname); } + // switch ($this->insertMode) { switch ($lname) { - case 'head': + case "head": $this->insertMode = static::IM_AFTER_HEAD; break; - case 'body': + case "body": $this->insertMode = static::IM_AFTER_BODY; break; - case 'svg': - case 'mathml': + case "svg": + case "mathml": $this->insertMode = static::IM_IN_BODY; break; } @@ -555,9 +554,9 @@ public function text($data) // practical as most documents contain these characters. Other text is not // expected here so recording a parse error is necessary. $dataTmp = trim($data, " \t\n\r\f"); - if (!empty($dataTmp)) { + if (! empty($dataTmp)) { // fprintf(STDOUT, "Unexpected insert mode: %d", $this->insertMode); - $this->parseError('Unexpected text. Ignoring: ' . $dataTmp); + $this->parseError("Unexpected text. Ignoring: " . $dataTmp); } return; @@ -574,7 +573,7 @@ public function eof() public function parseError($msg, $line = 0, $col = 0) { - $this->errors[] = sprintf('Line %d, Col %d: %s', $line, $col, $msg); + $this->errors[] = sprintf("Line %d, Col %d: %s", $line, $col, $msg); } public function getErrors() @@ -591,14 +590,15 @@ public function cdata($data) public function processingInstruction($name, $data = null) { // XXX: Ignore initial XML declaration, per the spec. - if ($this->insertMode === static::IM_INITIAL && 'xml' === strtolower($name)) { + if ($this->insertMode == static::IM_INITIAL && 'xml' == strtolower($name)) { return; } - // Important: The processor may modify the current DOM tree however it sees fit. - if ($this->processor instanceof InstructionProcessor) { + // Important: The processor may modify the current DOM tree however + // it sees fit. + if (isset($this->processor)) { $res = $this->processor->process($this->current, $name, $data); - if (!empty($res)) { + if (! empty($res)) { $this->current = $res; } @@ -617,46 +617,42 @@ public function processingInstruction($name, $data = null) /** * Apply normalization rules to a tag name. - * See sections 2.9 and 8.1.2. * - * @param string $tagName + * See sections 2.9 and 8.1.2. * + * @param string $name + * The tag name. * @return string The normalized tag name. */ - protected function normalizeTagName($tagName) + protected function normalizeTagName($name) { /* * Section 2.9 suggests that we should not do this. if (strpos($name, ':') !== false) { // We know from the grammar that there must be at least one other // char besides :, since : is not a legal tag start. $parts = explode(':', $name); return array_pop($parts); } */ - return $tagName; + return $name; } protected function quirksTreeResolver($name) { - throw new \Exception('Not implemented.'); + throw new \Exception("Not implemented."); } /** * Automatically climb the tree and close the closest node with the matching $tag. - * - * @param string $tagName - * - * @return bool */ - protected function autoclose($tagName) + protected function autoclose($tag) { $working = $this->current; do { - if (XML_ELEMENT_NODE !== $working->nodeType) { + if ($working->nodeType != XML_ELEMENT_NODE) { return false; } - if ($working->tagName === $tagName) { + if ($working->tagName == $tag) { $this->current = $working->parentNode; return true; } } while ($working = $working->parentNode); - return false; } @@ -665,16 +661,12 @@ protected function autoclose($tagName) * * If $this->current or anything above $this->current matches the given tag * name, this returns true. - * - * @param string $tagName - * - * @return bool */ - protected function isAncestor($tagName) + protected function isAncestor($tagname) { $candidate = $this->current; - while (XML_ELEMENT_NODE === $candidate->nodeType) { - if ($candidate->tagName === $tagName) { + while ($candidate->nodeType === XML_ELEMENT_NODE) { + if ($candidate->tagName == $tagname) { return true; } $candidate = $candidate->parentNode; @@ -685,13 +677,9 @@ protected function isAncestor($tagName) /** * Returns true if the immediate parent element is of the given tagname. - * - * @param string $tagName - * - * @return bool */ - protected function isParent($tagName) + protected function isParent($tagname) { - return $this->current->tagName === $tagName; + return $this->current->tagName == $tagname; } } diff --git a/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php b/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php index 9893a718b985e54bece2a9b2f316ff0a26d1c5a2..3da71a3fd6f3a4a1c796d3efaef3cd4379e776ca 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; /** @@ -21,6 +20,7 @@ */ interface EventHandler { + const DOCTYPE_NONE = 0; const DOCTYPE_PUBLIC = 1; @@ -30,11 +30,15 @@ interface EventHandler /** * A doctype declaration. * - * @param string $name The name of the root element. - * @param int $idType One of DOCTYPE_NONE, DOCTYPE_PUBLIC, or DOCTYPE_SYSTEM - * @param string $id The identifier. For DOCTYPE_PUBLIC, this is the public ID. If DOCTYPE_SYSTEM, - * then this is a system ID. - * @param bool $quirks Indicates whether the builder should enter quirks mode. + * @param string $name + * The name of the root element. + * @param int $idType + * One of DOCTYPE_NONE, DOCTYPE_PUBLIC, or DOCTYPE_SYSTEM. + * @param string $id + * The identifier. For DOCTYPE_PUBLIC, this is the public ID. If DOCTYPE_SYSTEM, + * then this is a system ID. + * @param boolean $quirks + * Indicates whether the builder should enter quirks mode. */ public function doctype($name, $idType = 0, $id = null, $quirks = false); @@ -59,11 +63,13 @@ public function doctype($name, $idType = 0, $id = null, $quirks = false); * The textmode is automatically reset to Tokenizer::TEXTMODE_NORMAL when the * closing tag is encounter. **This behavior may change.** * - * @param string $name The tag name. - * @param array $attributes An array with all of the tag's attributes. - * @param bool $selfClosing An indicator of whether or not this tag is self-closing (<foo/>). - * - * @return int one of the Tokenizer::TEXTMODE_* constants + * @param string $name + * The tag name. + * @param array $attributes + * An array with all of the tag's attributes. + * @param boolean $selfClosing + * An indicator of whether or not this tag is self-closing (<foo/>) + * @return int One of the Tokenizer::TEXTMODE_* constants. */ public function startTag($name, $attributes = array(), $selfClosing = false); @@ -98,7 +104,7 @@ public function parseError($msg, $line, $col); * A CDATA section. * * @param string $data - * The unparsed character data + * The unparsed character data. */ public function cdata($data); @@ -107,8 +113,10 @@ public function cdata($data); * * While user agents don't get PIs, server-side does. * - * @param string $name The name of the processor (e.g. 'php'). - * @param string $data The unparsed data. + * @param string $name + * The name of the processor (e.g. 'php'). + * @param string $data + * The unparsed data. */ public function processingInstruction($name, $data = null); } diff --git a/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php b/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php index b081ed96b0eafd5fe899b4f9c4bb3fc7e2f639fb..e58006a16416f07bf30cb52ecb4835e2abee2758 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; /** @@ -12,16 +11,16 @@ * really like to rewrite this class to efficiently handle lower level * stream reads (and thus efficiently handle large documents). * - * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead. + * @todo A buffered input stream would be useful. */ class FileInputStream extends StringInputStream implements InputStream { + /** * Load a file input stream. * - * @param string $data The file or url path to load. - * @param string $encoding The encoding to use for the data. - * @param string $debug A fprintf format to use to echo the data on stdout. + * @param string $data + * The file or url path to load. */ public function __construct($data, $encoding = 'UTF-8', $debug = '') { diff --git a/vendor/masterminds/html5/src/HTML5/Parser/InputStream.php b/vendor/masterminds/html5/src/HTML5/Parser/InputStream.php index ff4ef22668e38be97402bf1035f13a868780c566..0bdc803b242315839b6819891c78cc406509a17f 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/InputStream.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/InputStream.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; /** @@ -10,11 +9,10 @@ * * Currently provided InputStream implementations include * FileInputStream and StringInputStream. - * - * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead. */ interface InputStream extends \Iterator { + /** * Returns the current line that is being consumed. * @@ -49,12 +47,12 @@ public function remainingChars(); * and returns the matched substring. * * @see strcspn - * - * @param string $bytes Bytes to match. - * @param int $max Maximum number of bytes to scan. - * + * @param string $bytes + * Bytes to match. + * @param int $max + * Maximum number of bytes to scan. * @return mixed Index or false if no match is found. You should use strong - * equality when checking the result, since index could be 0. + * equality when checking the result, since index could be 0. */ public function charsUntil($bytes, $max = null); @@ -65,18 +63,20 @@ public function charsUntil($bytes, $max = null); * and returns the matched substring. * * @see strspn - * - * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the - * current char, the pointer advances and the char is part of the - * substring. - * @param int $max The max number of chars to read. + * @param string $bytes + * A mask of bytes to match. If ANY byte in this mask matches the + * current char, the pointer advances and the char is part of the + * substring. + * @param int $max + * The max number of chars to read. */ public function charsWhile($bytes, $max = null); /** * Unconsume one character. * - * @param int $howMany The number of characters to move the pointer back. + * @param int $howMany + * The number of characters to move the pointer back. */ public function unconsume($howMany = 1); diff --git a/vendor/masterminds/html5/src/HTML5/Parser/ParseError.php b/vendor/masterminds/html5/src/HTML5/Parser/ParseError.php index 640e516c89e5beeb4cc949c3b3dd1b94d369b7a7..86498a13b78b5951c1cc9ab5d818e48ea90929cd 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/ParseError.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/ParseError.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; /** diff --git a/vendor/masterminds/html5/src/HTML5/Parser/Scanner.php b/vendor/masterminds/html5/src/HTML5/Parser/Scanner.php index 1b52983e73db1ddbdcee4b2af4e591dd5354b92d..f605c69b3b18c6fee251089b9715d93c0b7746ce 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/Scanner.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/Scanner.php @@ -1,90 +1,34 @@ <?php - namespace Masterminds\HTML5\Parser; -use Masterminds\HTML5\Exception; - /** - * The scanner scans over a given data input to react appropriately to characters. + * The scanner. + * + * This scans over an input stream. */ class Scanner { + const CHARS_HEX = 'abcdefABCDEF01234567890'; + const CHARS_ALNUM = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890'; - const CHARS_ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; - /** - * The string data we're parsing. - */ - private $data; + const CHARS_ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; - /** - * The current integer byte position we are in $data. - */ - private $char; + protected $is; - /** - * Length of $data; when $char === $data, we are at the end-of-file. - */ - private $EOF; - - /** - * Parse errors. - */ - public $errors = array(); + // Flipping this to true will give minisculely more debugging info. + public $debug = false; /** * Create a new Scanner. * - * @param string $data Data to parse. - * @param string $encoding The encoding to use for the data. - * - * @throws Exception If the given data cannot be encoded to UTF-8. - */ - public function __construct($data, $encoding = 'UTF-8') - { - if ($data instanceof InputStream) { - @trigger_error('InputStream objects are deprecated since version 2.4 and will be removed in 3.0. Use strings instead.', E_USER_DEPRECATED); - $data = (string) $data; - } - - $data = UTF8Utils::convertToUTF8($data, $encoding); - - // There is good reason to question whether it makes sense to - // do this here, since most of these checks are done during - // parsing, and since this check doesn't actually *do* anything. - $this->errors = UTF8Utils::checkForIllegalCodepoints($data); - - $data = $this->replaceLinefeeds($data); - - $this->data = $data; - $this->char = 0; - $this->EOF = strlen($data); - } - - /** - * Check if upcomming chars match the given sequence. - * - * This will read the stream for the $sequence. If it's - * found, this will return true. If not, return false. - * Since this unconsumes any chars it reads, the caller - * will still need to read the next sequence, even if - * this returns true. - * - * Example: $this->scanner->sequenceMatches('</script>') will - * see if the input stream is at the start of a - * '</script>' string. - * - * @param string $sequence - * @param bool $caseSensitive - * - * @return bool + * @param \Masterminds\HTML5\Parser\InputStream $input + * An InputStream to be scanned. */ - public function sequenceMatches($sequence, $caseSensitive = true) + public function __construct($input) { - $portion = substr($this->data, $this->char, strlen($sequence)); - - return $caseSensitive ? $portion === $sequence : 0 === strcasecmp($portion, $sequence); + $this->is = $input; } /** @@ -94,7 +38,7 @@ public function sequenceMatches($sequence, $caseSensitive = true) */ public function position() { - return $this->char; + return $this->is->key(); } /** @@ -104,25 +48,23 @@ public function position() */ public function peek() { - if (($this->char + 1) <= $this->EOF) { - return $this->data[$this->char + 1]; - } - - return false; + return $this->is->peek(); } /** * Get the next character. + * * Note: This advances the pointer. * * @return string The next character. */ public function next() { - ++$this->char; - - if ($this->char < $this->EOF) { - return $this->data[$this->char]; + $this->is->next(); + if ($this->is->valid()) { + if ($this->debug) + fprintf(STDOUT, "> %s\n", $this->is->current()); + return $this->is->current(); } return false; @@ -130,14 +72,15 @@ public function next() /** * Get the current character. + * * Note, this does not advance the pointer. * * @return string The current character. */ public function current() { - if ($this->char < $this->EOF) { - return $this->data[$this->char]; + if ($this->is->valid()) { + return $this->is->current(); } return false; @@ -145,29 +88,29 @@ public function current() /** * Silently consume N chars. - * - * @param int $count */ public function consume($count = 1) { - $this->char += $count; + for ($i = 0; $i < $count; ++ $i) { + $this->next(); + } } /** * Unconsume some of the data. * This moves the data pointer backwards. * - * @param int $howMany The number of characters to move the pointer back. + * @param int $howMany + * The number of characters to move the pointer back. */ public function unconsume($howMany = 1) { - if (($this->char - $howMany) >= 0) { - $this->char -= $howMany; - } + $this->is->unconsume($howMany); } /** * Get the next group of that contains hex characters. + * * Note, along with getting the characters the pointer in the data will be * moved as well. * @@ -175,11 +118,12 @@ public function unconsume($howMany = 1) */ public function getHex() { - return $this->doCharsWhile(static::CHARS_HEX); + return $this->is->charsWhile(static::CHARS_HEX); } /** * Get the next group of characters that are ASCII Alpha characters. + * * Note, along with getting the characters the pointer in the data will be * moved as well. * @@ -187,11 +131,12 @@ public function getHex() */ public function getAsciiAlpha() { - return $this->doCharsWhile(static::CHARS_ALPHA); + return $this->is->charsWhile(static::CHARS_ALPHA); } /** * Get the next group of characters that are ASCII Alpha characters and numbers. + * * Note, along with getting the characters the pointer in the data will be * moved as well. * @@ -199,11 +144,12 @@ public function getAsciiAlpha() */ public function getAsciiAlphaNum() { - return $this->doCharsWhile(static::CHARS_ALNUM); + return $this->is->charsWhile(static::CHARS_ALNUM); } /** * Get the next group of numbers. + * * Note, along with getting the characters the pointer in the data will be * moved as well. * @@ -211,26 +157,17 @@ public function getAsciiAlphaNum() */ public function getNumeric() { - return $this->doCharsWhile('0123456789'); + return $this->is->charsWhile('0123456789'); } /** * Consume whitespace. - * Whitespace in HTML5 is: formfeed, tab, newline, space. * - * @return int The length of the matched whitespaces. + * Whitespace in HTML5 is: formfeed, tab, newline, space. */ public function whitespace() { - if ($this->char >= $this->EOF) { - return false; - } - - $len = strspn($this->data, "\n\t\f ", $this->char); - - $this->char += $len; - - return $len; + return $this->is->charsWhile("\n\t\f "); } /** @@ -240,37 +177,23 @@ public function whitespace() */ public function currentLine() { - if (empty($this->EOF) || 0 === $this->char) { - return 1; - } - - // Add one to $this->char because we want the number for the next - // byte to be processed. - return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1; + return $this->is->currentLine(); } /** * Read chars until something in the mask is encountered. - * - * @param string $mask - * - * @return mixed */ public function charsUntil($mask) { - return $this->doCharsUntil($mask); + return $this->is->charsUntil($mask); } /** * Read chars as long as the mask matches. - * - * @param string $mask - * - * @return int */ public function charsWhile($mask) { - return $this->doCharsWhile($mask); + return $this->is->charsWhile($mask); } /** @@ -282,29 +205,7 @@ public function charsWhile($mask) */ public function columnOffset() { - // Short circuit for the first char. - if (0 === $this->char) { - return 0; - } - - // strrpos is weird, and the offset needs to be negative for what we - // want (i.e., the last \n before $this->char). This needs to not have - // one (to make it point to the next character, the one we want the - // position of) added to it because strrpos's behaviour includes the - // final offset byte. - $backwardFrom = $this->char - 1 - strlen($this->data); - $lastLine = strrpos($this->data, "\n", $backwardFrom); - - // However, for here we want the length up until the next byte to be - // processed, so add one to the current byte ($this->char). - if (false !== $lastLine) { - $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine); - } else { - // After a newline. - $findLengthOf = substr($this->data, 0, $this->char); - } - - return UTF8Utils::countChars($findLengthOf); + return $this->is->columnOffset(); } /** @@ -316,101 +217,6 @@ public function columnOffset() */ public function remainingChars() { - if ($this->char < $this->EOF) { - $data = substr($this->data, $this->char); - $this->char = $this->EOF; - - return $data; - } - - return ''; // false; - } - - /** - * Replace linefeed characters according to the spec. - * - * @param $data - * - * @return string - */ - private function replaceLinefeeds($data) - { - /* - * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially. - * Any CR characters that are followed by LF characters must be removed, and any CR characters not - * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are - * represented by LF characters, and there are never any CR characters in the input to the tokenization - * stage. - */ - $crlfTable = array( - "\0" => "\xEF\xBF\xBD", - "\r\n" => "\n", - "\r" => "\n", - ); - - return strtr($data, $crlfTable); - } - - /** - * Read to a particular match (or until $max bytes are consumed). - * - * This operates on byte sequences, not characters. - * - * Matches as far as possible until we reach a certain set of bytes - * and returns the matched substring. - * - * @param string $bytes Bytes to match. - * @param int $max Maximum number of bytes to scan. - * - * @return mixed Index or false if no match is found. You should use strong - * equality when checking the result, since index could be 0. - */ - private function doCharsUntil($bytes, $max = null) - { - if ($this->char >= $this->EOF) { - return false; - } - - if (0 === $max || $max) { - $len = strcspn($this->data, $bytes, $this->char, $max); - } else { - $len = strcspn($this->data, $bytes, $this->char); - } - - $string = (string) substr($this->data, $this->char, $len); - $this->char += $len; - - return $string; - } - - /** - * Returns the string so long as $bytes matches. - * - * Matches as far as possible with a certain set of bytes - * and returns the matched substring. - * - * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the - * current char, the pointer advances and the char is part of the - * substring. - * @param int $max The max number of chars to read. - * - * @return string - */ - private function doCharsWhile($bytes, $max = null) - { - if ($this->char >= $this->EOF) { - return false; - } - - if (0 === $max || $max) { - $len = strspn($this->data, $bytes, $this->char, $max); - } else { - $len = strspn($this->data, $bytes, $this->char); - } - - $string = (string) substr($this->data, $this->char, $len); - $this->char += $len; - - return $string; + return $this->is->remainingChars(); } } diff --git a/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php b/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php index 0c213feb6cef9717680b369e9a77c9de51b1dec5..4cac3c2330a9ded61902a819f56b35a788afade7 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php @@ -2,7 +2,6 @@ /** * Loads a string to be parsed. */ - namespace Masterminds\HTML5\Parser; /* @@ -40,18 +39,16 @@ // // - // indicates regular comments -/** - * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead. - */ class StringInputStream implements InputStream { + /** * The string data we're parsing. */ private $data; /** - * The current integer byte position we are in $data. + * The current integer byte position we are in $data */ private $char; @@ -68,21 +65,22 @@ class StringInputStream implements InputStream /** * Create a new InputStream wrapper. * - * @param string $data Data to parse. - * @param string $encoding The encoding to use for the data. - * @param string $debug A fprintf format to use to echo the data on stdout. + * @param $data Data + * to parse */ public function __construct($data, $encoding = 'UTF-8', $debug = '') { $data = UTF8Utils::convertToUTF8($data, $encoding); - if ($debug) { + if ($debug) fprintf(STDOUT, $debug, $data, strlen($data)); - } - // There is good reason to question whether it makes sense to - // do this here, since most of these checks are done during - // parsing, and since this check doesn't actually *do* anything. + // There is good reason to question whether it makes sense to + // do this here, since most of these checks are done during + // parsing, and since this check doesn't actually *do* anything. $this->errors = UTF8Utils::checkForIllegalCodepoints($data); + // if (!empty($e)) { + // throw new ParseError("UTF-8 encoding issues: " . implode(', ', $e)); + // } $data = $this->replaceLinefeeds($data); @@ -91,27 +89,18 @@ public function __construct($data, $encoding = 'UTF-8', $debug = '') $this->EOF = strlen($data); } - public function __toString() - { - return $this->data; - } - /** * Replace linefeed characters according to the spec. */ protected function replaceLinefeeds($data) { /* - * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially. - * Any CR characters that are followed by LF characters must be removed, and any CR characters not - * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are - * represented by LF characters, and there are never any CR characters in the input to the tokenization - * stage. + * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially. Any CR characters that are followed by LF characters must be removed, and any CR characters not followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are represented by LF characters, and there are never any CR characters in the input to the tokenization stage. */ $crlfTable = array( "\0" => "\xEF\xBF\xBD", "\r\n" => "\n", - "\r" => "\n", + "\r" => "\n" ); return strtr($data, $crlfTable); @@ -122,7 +111,7 @@ protected function replaceLinefeeds($data) */ public function currentLine() { - if (empty($this->EOF) || 0 === $this->char) { + if (empty($this->EOF) || $this->char == 0) { return 1; } // Add one to $this->char because we want the number for the next @@ -131,15 +120,18 @@ public function currentLine() } /** + * * @deprecated + * */ public function getCurrentLine() { - return $this->currentLine(); + return currentLine(); } /** * Returns the current column of the current line that the tokenizer is at. + * * Newlines are column 0. The first char after a newline is column 1. * * @return int The column number. @@ -147,7 +139,7 @@ public function getCurrentLine() public function columnOffset() { // Short circuit for the first char. - if (0 === $this->char) { + if ($this->char == 0) { return 0; } // strrpos is weird, and the offset needs to be negative for what we @@ -160,7 +152,7 @@ public function columnOffset() // However, for here we want the length up until the next byte to be // processed, so add one to the current byte ($this->char). - if (false !== $lastLine) { + if ($lastLine !== false) { $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine); } else { // After a newline. @@ -171,7 +163,9 @@ public function columnOffset() } /** + * * @deprecated + * */ public function getColumnOffset() { @@ -194,7 +188,7 @@ public function current() */ public function next() { - ++$this->char; + $this->char ++; } /** @@ -208,11 +202,15 @@ public function rewind() /** * Is the current pointer location valid. * - * @return bool Whether the current pointer location is valid. + * @return bool Is the current pointer location valid. */ public function valid() { - return $this->char < $this->EOF; + if ($this->char < $this->EOF) { + return true; + } + + return false; } /** @@ -221,10 +219,10 @@ public function valid() * This reads to the end of the file, and sets the read marker at the * end of the file. * - * Note this performs bounds checking. + * @note This performs bounds checking * * @return string Returns the remaining text. If called when the InputStream is - * already exhausted, it returns an empty string. + * already exhausted, it returns an empty string. */ public function remainingChars() { @@ -246,11 +244,12 @@ public function remainingChars() * Matches as far as possible until we reach a certain set of bytes * and returns the matched substring. * - * @param string $bytes Bytes to match. - * @param int $max Maximum number of bytes to scan. - * + * @param string $bytes + * Bytes to match. + * @param int $max + * Maximum number of bytes to scan. * @return mixed Index or false if no match is found. You should use strong - * equality when checking the result, since index could be 0. + * equality when checking the result, since index could be 0. */ public function charsUntil($bytes, $max = null) { @@ -258,7 +257,7 @@ public function charsUntil($bytes, $max = null) return false; } - if (0 === $max || $max) { + if ($max === 0 || $max) { $len = strcspn($this->data, $bytes, $this->char, $max); } else { $len = strcspn($this->data, $bytes, $this->char); @@ -276,12 +275,12 @@ public function charsUntil($bytes, $max = null) * Matches as far as possible with a certain set of bytes * and returns the matched substring. * - * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the - * current char, the pointer advances and the char is part of the - * substring. - * @param int $max The max number of chars to read. - * - * @return string + * @param string $bytes + * A mask of bytes to match. If ANY byte in this mask matches the + * current char, the pointer advances and the char is part of the + * substring. + * @param int $max + * The max number of chars to read. */ public function charsWhile($bytes, $max = null) { @@ -289,7 +288,7 @@ public function charsWhile($bytes, $max = null) return false; } - if (0 === $max || $max) { + if ($max === 0 || $max) { $len = strspn($this->data, $bytes, $this->char, $max); } else { $len = strspn($this->data, $bytes, $this->char); @@ -303,12 +302,13 @@ public function charsWhile($bytes, $max = null) /** * Unconsume characters. * - * @param int $howMany The number of characters to unconsume. + * @param int $howMany + * The number of characters to unconsume. */ public function unconsume($howMany = 1) { if (($this->char - $howMany) >= 0) { - $this->char -= $howMany; + $this->char = $this->char - $howMany; } } diff --git a/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php b/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php index f4e96524bd940b7bd68143352ecbe6e03adb0307..c42bc3d86ed968f6301adeaca72e2a93f82afe86 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; use Masterminds\HTML5\Elements; @@ -26,6 +25,7 @@ */ class Tokenizer { + protected $scanner; protected $events; @@ -47,6 +47,8 @@ class Tokenizer const CONFORMANT_HTML = 'html'; protected $mode = self::CONFORMANT_HTML; + const WHITE = "\t\n\f "; + /** * Create a new tokenizer. * @@ -54,9 +56,12 @@ class Tokenizer * it a scanner (input) and an event handler (output), and then calling * the Tokenizer::parse() method.` * - * @param Scanner $scanner A scanner initialized with an input stream. - * @param EventHandler $eventHandler An event handler, initialized and ready to receive events. - * @param string $mode + * @param \Masterminds\HTML5\Parser\Scanner $scanner + * A scanner initialized with an input stream. + * @param \Masterminds\HTML5\Parser\EventHandler $eventHandler + * An event handler, initialized and ready to receive + * events. + * @param string $mode */ public function __construct($scanner, $eventHandler, $mode = self::CONFORMANT_HTML) { @@ -98,9 +103,11 @@ public function parse() * Normally, setting is done by the event handler via a special return code on * startTag(), but it can also be set manually using this function. * - * @param int $textmode One of Elements::TEXT_*. - * @param string $untilTag The tag that should stop RAW or RCDATA mode. Normal mode does not - * use this indicator. + * @param integer $textmode + * One of Elements::TEXT_* + * @param string $untilTag + * The tag that should stop RAW or RCDATA mode. Normal mode does not + * use this indicator. */ public function setTextMode($textmode, $untilTag = null) { @@ -110,76 +117,18 @@ public function setTextMode($textmode, $untilTag = null) /** * Consume a character and make a move. - * HTML5 8.2.4.1. + * HTML5 8.2.4.1 */ protected function consumeData() { - $tok = $this->scanner->current(); - - if ('&' === $tok) { - // Character reference - $ref = $this->decodeCharacterReference(); - $this->buffer($ref); - - $tok = $this->scanner->current(); - } - - // Parse tag - if ('<' === $tok) { - // Any buffered text data can go out now. - $this->flushBuffer(); - - $tok = $this->scanner->next(); - - if ('!' === $tok) { - $this->markupDeclaration(); - } elseif ('/' === $tok) { - $this->endTag(); - } elseif ('?' === $tok) { - $this->processingInstruction(); - } elseif (ctype_alpha($tok)) { - $this->tagName(); - } else { - $this->parseError('Illegal tag opening'); - // TODO is this necessary ? - $this->characterData(); - } - - $tok = $this->scanner->current(); - } - - if (false === $tok) { - // Handle end of document - $this->eof(); - } else { - // Parse character - switch ($this->textMode) { - case Elements::TEXT_RAW: - $this->rawText($tok); - break; - - case Elements::TEXT_RCDATA: - $this->rcdata($tok); - break; - - default: - if ('<' === $tok || '&' === $tok) { - break; - } - - // NULL character - if ("\00" === $tok) { - $this->parseError('Received null character.'); - - $this->text .= $tok; - $this->scanner->consume(); - - break; - } - - $this->text .= $this->scanner->charsUntil("<&\0"); - } - } + // Character Ref + /* + * $this->characterReference() || $this->tagOpen() || $this->eof() || $this->characterData(); + */ + $this->characterReference(); + $this->tagOpen(); + $this->eof(); + $this->characterData(); return $this->carryOn; } @@ -194,88 +143,73 @@ protected function consumeData() protected function characterData() { $tok = $this->scanner->current(); - if (false === $tok) { + if ($tok === false) { return false; } switch ($this->textMode) { case Elements::TEXT_RAW: - return $this->rawText($tok); + return $this->rawText(); case Elements::TEXT_RCDATA: - return $this->rcdata($tok); + return $this->rcdata(); default: - if ('<' === $tok || '&' === $tok) { + if (strspn($tok, "<&")) { return false; } - - return $this->text($tok); + return $this->text(); } } /** * This buffers the current token as character data. - * - * @param string $tok The current token. - * - * @return bool */ - protected function text($tok) + protected function text() { + $tok = $this->scanner->current(); + // This should never happen... - if (false === $tok) { + if ($tok === false) { return false; } - - // NULL character - if ("\00" === $tok) { - $this->parseError('Received null character.'); + // Null + if ($tok === "\00") { + $this->parseError("Received null character."); } - + // fprintf(STDOUT, "Writing '%s'", $tok); $this->buffer($tok); - $this->scanner->consume(); - + $this->scanner->next(); return true; } /** * Read text in RAW mode. - * - * @param string $tok The current token. - * - * @return bool */ - protected function rawText($tok) + protected function rawText() { if (is_null($this->untilTag)) { - return $this->text($tok); + return $this->text(); } - $sequence = '</' . $this->untilTag . '>'; $txt = $this->readUntilSequence($sequence); $this->events->text($txt); $this->setTextMode(0); - return $this->endTag(); } /** * Read text in RCDATA mode. - * - * @param string $tok The current token. - * - * @return bool */ - protected function rcdata($tok) + protected function rcdata() { if (is_null($this->untilTag)) { - return $this->text($tok); + return $this->text(); } - $sequence = '</' . $this->untilTag; $txt = ''; + $tok = $this->scanner->current(); $caseSensitive = !Elements::isHtml5Element($this->untilTag); - while (false !== $tok && !('<' == $tok && ($this->scanner->sequenceMatches($sequence, $caseSensitive)))) { - if ('&' == $tok) { + while ($tok !== false && ! ($tok == '<' && ($this->sequenceMatches($sequence, $caseSensitive)))) { + if ($tok == '&') { $txt .= $this->decodeCharacterReference(); $tok = $this->scanner->current(); } else { @@ -285,15 +219,13 @@ protected function rcdata($tok) } $len = strlen($sequence); $this->scanner->consume($len); - $len += $this->scanner->whitespace(); - if ('>' !== $this->scanner->current()) { - $this->parseError('Unclosed RCDATA end tag'); + $len += strlen($this->scanner->whitespace()); + if ($this->scanner->current() !== '>') { + $this->parseError("Unclosed RCDATA end tag"); } - $this->scanner->unconsume($len); $this->events->text($txt); $this->setTextMode(0); - return $this->endTag(); } @@ -302,10 +234,53 @@ protected function rcdata($tok) */ protected function eof() { - // fprintf(STDOUT, "EOF"); + if ($this->scanner->current() === false) { + // fprintf(STDOUT, "EOF"); + $this->flushBuffer(); + $this->events->eof(); + $this->carryOn = false; + return true; + } + return false; + } + + /** + * Handle character references (aka entities). + * + * This version is specific to PCDATA, as it buffers data into the + * text buffer. For a generic version, see decodeCharacterReference(). + * + * HTML5 8.2.4.2 + */ + protected function characterReference() + { + $ref = $this->decodeCharacterReference(); + if ($ref !== false) { + $this->buffer($ref); + return true; + } + return false; + } + + /** + * Emit a tagStart event on encountering a tag. + * + * 8.2.4.8 + */ + protected function tagOpen() + { + if ($this->scanner->current() != '<') { + return false; + } + + // Any buffered text data can go out now. $this->flushBuffer(); - $this->events->eof(); - $this->carryOn = false; + + $this->scanner->next(); + + return $this->markupDeclaration() || $this->endTag() || $this->processingInstruction() || $this->tagName() || + /* This always returns false. */ + $this->parseError("Illegal tag opening") || $this->characterData(); } /** @@ -313,32 +288,40 @@ protected function eof() */ protected function markupDeclaration() { + if ($this->scanner->current() != '!') { + return false; + } + $tok = $this->scanner->next(); // Comment: - if ('-' == $tok && '-' == $this->scanner->peek()) { - $this->scanner->consume(2); - + if ($tok == '-' && $this->scanner->peek() == '-') { + $this->scanner->next(); // Consume the other '-' + $this->scanner->next(); // Next char. return $this->comment(); - } elseif ('D' == $tok || 'd' == $tok) { // Doctype + } + + elseif ($tok == 'D' || $tok == 'd') { // Doctype return $this->doctype(); - } elseif ('[' == $tok) { // CDATA section + } + + elseif ($tok == '[') { // CDATA section return $this->cdataSection(); } // FINISH - $this->parseError('Expected <!--, <![CDATA[, or <!DOCTYPE. Got <!%s', $tok); + $this->parseError("Expected <!--, <![CDATA[, or <!DOCTYPE. Got <!%s", $tok); $this->bogusComment('<!'); - return true; } /** - * Consume an end tag. See section 8.2.4.9. + * Consume an end tag. + * 8.2.4.9 */ protected function endTag() { - if ('/' != $this->scanner->current()) { + if ($this->scanner->current() != '/') { return false; } $tok = $this->scanner->next(); @@ -347,41 +330,44 @@ protected function endTag() // > -> parse error // EOF -> parse error // -> parse error - if (!ctype_alpha($tok)) { + if (! ctype_alpha($tok)) { $this->parseError("Expected tag name, got '%s'", $tok); - if ("\0" == $tok || false === $tok) { + if ($tok == "\0" || $tok === false) { return false; } - return $this->bogusComment('</'); } $name = $this->scanner->charsUntil("\n\f \t>"); - $name = self::CONFORMANT_XML === $this->mode ? $name : strtolower($name); + $name = $this->mode === self::CONFORMANT_XML ? $name: strtolower($name); // Trash whitespace. $this->scanner->whitespace(); - $tok = $this->scanner->current(); - if ('>' != $tok) { - $this->parseError("Expected >, got '%s'", $tok); + if ($this->scanner->current() != '>') { + $this->parseError("Expected >, got '%s'", $this->scanner->current()); // We just trash stuff until we get to the next tag close. $this->scanner->charsUntil('>'); } $this->events->endTag($name); - $this->scanner->consume(); - + $this->scanner->next(); return true; } /** - * Consume a tag name and body. See section 8.2.4.10. + * Consume a tag name and body. + * 8.2.4.10 */ protected function tagName() { + $tok = $this->scanner->current(); + if (! ctype_alpha($tok)) { + return false; + } + // We know this is at least one char. - $name = $this->scanner->charsWhile(':_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'); - $name = self::CONFORMANT_XML === $this->mode ? $name : strtolower($name); + $name = $this->scanner->charsWhile(":_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); + $name = $this->mode === self::CONFORMANT_XML ? $name : strtolower($name); $attributes = array(); $selfClose = false; @@ -391,18 +377,21 @@ protected function tagName() do { $this->scanner->whitespace(); $this->attribute($attributes); - } while (!$this->isTagEnd($selfClose)); + } while (! $this->isTagEnd($selfClose)); } catch (ParseError $e) { $selfClose = false; } $mode = $this->events->startTag($name, $attributes, $selfClose); - - if (is_int($mode)) { + // Should we do this? What does this buy that selfClose doesn't? + if ($selfClose) { + $this->events->endTag($name); + } elseif (is_int($mode)) { + // fprintf(STDOUT, "Event response says move into mode %d for tag %s", $mode, $name); $this->setTextMode($mode, $name); } - $this->scanner->consume(); + $this->scanner->next(); return true; } @@ -413,34 +402,30 @@ protected function tagName() protected function isTagEnd(&$selfClose) { $tok = $this->scanner->current(); - if ('/' == $tok) { - $this->scanner->consume(); + if ($tok == '/') { + $this->scanner->next(); $this->scanner->whitespace(); $tok = $this->scanner->current(); - if ('>' == $tok) { + if ($tok == '>') { $selfClose = true; - return true; } - if (false === $tok) { - $this->parseError('Unexpected EOF inside of tag.'); - + if ($tok === false) { + $this->parseError("Unexpected EOF inside of tag."); return true; } // Basically, we skip the / token and go on. // See 8.2.4.43. $this->parseError("Unexpected '%s' inside of a tag.", $tok); - return false; } - if ('>' == $tok) { + if ($tok == '>') { return true; } - if (false === $tok) { - $this->parseError('Unexpected EOF inside of tag.'); - + if ($tok === false) { + $this->parseError("Unexpected EOF inside of tag."); return true; } @@ -449,37 +434,30 @@ protected function isTagEnd(&$selfClose) /** * Parse attributes from inside of a tag. - * - * @param string[] $attributes - * - * @return bool - * - * @throws ParseError */ protected function attribute(&$attributes) { $tok = $this->scanner->current(); - if ('/' == $tok || '>' == $tok || false === $tok) { + if ($tok == '/' || $tok == '>' || $tok === false) { return false; } - if ('<' == $tok) { - $this->parseError("Unexpected '<' inside of attributes list."); + if ($tok == '<') { + $this->parseError("Unexepcted '<' inside of attributes list."); // Push the < back onto the stack. $this->scanner->unconsume(); // Let the caller figure out how to handle this. - throw new ParseError('Start tag inside of attribute.'); + throw new ParseError("Start tag inside of attribute."); } $name = strtolower($this->scanner->charsUntil("/>=\n\f\t ")); - if (0 == strlen($name)) { - $tok = $this->scanner->current(); - $this->parseError('Expected an attribute name, got %s.', $tok); + if (strlen($name) == 0) { + $this->parseError("Expected an attribute name, got %s.", $this->scanner->current()); // Really, only '=' can be the char here. Everything else gets absorbed // under one rule or another. - $name = $tok; - $this->scanner->consume(); + $name = $this->scanner->current(); + $this->scanner->next(); } $isValidAttribute = true; @@ -489,17 +467,18 @@ protected function attribute(&$attributes) // see issue #23: https://github.com/Masterminds/html5-php/issues/23 // and http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#syntax-attribute-name if (preg_match("/[\x1-\x2C\\/\x3B-\x40\x5B-\x5E\x60\x7B-\x7F]/u", $name)) { - $this->parseError('Unexpected characters in attribute name: %s', $name); + $this->parseError("Unexpected characters in attribute name: %s", $name); $isValidAttribute = false; } // There is no limitation for 1st character in HTML5. // But method "DOMElement::setAttribute" is throwing exception for the // characters below so they have to be filtered. // see issue #23: https://github.com/Masterminds/html5-php/issues/23 // and http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#syntax-attribute-name - elseif (preg_match('/^[0-9.-]/u', $name)) { - $this->parseError('Unexpected character at the begining of attribute name: %s', $name); - $isValidAttribute = false; - } + else + if (preg_match("/^[0-9.-]/u", $name)) { + $this->parseError("Unexpected character at the begining of attribute name: %s", $name); + $isValidAttribute = false; + } // 8.1.2.3 $this->scanner->whitespace(); @@ -507,21 +486,19 @@ protected function attribute(&$attributes) if ($isValidAttribute) { $attributes[$name] = $val; } - return true; } /** - * Consume an attribute value. See section 8.2.4.37 and after. - * - * @return string|null + * Consume an attribute value. + * 8.2.4.37 and after. */ protected function attributeValue() { - if ('=' != $this->scanner->current()) { + if ($this->scanner->current() != '=') { return null; } - $this->scanner->consume(); + $this->scanner->next(); // 8.1.2.3 $this->scanner->whitespace(); @@ -529,24 +506,21 @@ protected function attributeValue() switch ($tok) { case "\n": case "\f": - case ' ': + case " ": case "\t": // Whitespace here indicates an empty value. return null; case '"': case "'": - $this->scanner->consume(); - + $this->scanner->next(); return $this->quotedAttributeValue($tok); case '>': // case '/': // 8.2.4.37 seems to allow foo=/ as a valid attr. - $this->parseError('Expected attribute value, got tag end.'); - + $this->parseError("Expected attribute value, got tag end."); return null; case '=': case '`': - $this->parseError('Expecting quotes, got %s.', $tok); - + $this->parseError("Expecting quotes, got %s.", $tok); return $this->unquotedAttributeValue(); default: return $this->unquotedAttributeValue(); @@ -556,10 +530,10 @@ protected function attributeValue() /** * Get an attribute value string. * - * @param string $quote IMPORTANT: This is a series of chars! Any one of which will be considered - * termination of an attribute's value. E.g. "\"'" will stop at either - * ' or ". - * + * @param string $quote + * IMPORTANT: This is a series of chars! Any one of which will be considered + * termination of an attribute's value. E.g. "\"'" will stop at either + * ' or ". * @return string The attribute value. */ protected function quotedAttributeValue($quote) @@ -568,102 +542,81 @@ protected function quotedAttributeValue($quote) $val = ''; while (true) { - $tokens = $this->scanner->charsUntil($stoplist . '&'); - if (false !== $tokens) { + $tokens = $this->scanner->charsUntil($stoplist.'&'); + if ($tokens !== false) { $val .= $tokens; } else { break; } $tok = $this->scanner->current(); - if ('&' == $tok) { - $val .= $this->decodeCharacterReference(true); + if ($tok == '&') { + $val .= $this->decodeCharacterReference(true, $tok); continue; } break; } - $this->scanner->consume(); - + $this->scanner->next(); return $val; } protected function unquotedAttributeValue() { + $stoplist = "\t\n\f >"; $val = ''; $tok = $this->scanner->current(); - while (false !== $tok) { - switch ($tok) { - case "\n": - case "\f": - case ' ': - case "\t": - case '>': - break 2; - - case '&': - $val .= $this->decodeCharacterReference(true); - $tok = $this->scanner->current(); - - break; - - case "'": - case '"': - case '<': - case '=': - case '`': - $this->parseError('Unexpected chars in unquoted attribute value %s', $tok); - $val .= $tok; - $tok = $this->scanner->next(); - break; - - default: - $val .= $this->scanner->charsUntil("\t\n\f >&\"'<=`"); - - $tok = $this->scanner->current(); + while (strspn($tok, $stoplist) == 0 && $tok !== false) { + if ($tok == '&') { + $val .= $this->decodeCharacterReference(true); + $tok = $this->scanner->current(); + } else { + if (strspn($tok, "\"'<=`") > 0) { + $this->parseError("Unexpected chars in unquoted attribute value %s", $tok); + } + $val .= $tok; + $tok = $this->scanner->next(); } } - return $val; } /** * Consume malformed markup as if it were a comment. - * 8.2.4.44. + * 8.2.4.44 * * The spec requires that the ENTIRE tag-like thing be enclosed inside of * the comment. So this will generate comments like: * * <!--</+foo>--> * - * @param string $leading Prepend any leading characters. This essentially - * negates the need to backtrack, but it's sort of a hack. - * - * @return bool + * @param string $leading + * Prepend any leading characters. This essentially + * negates the need to backtrack, but it's sort of + * a hack. */ protected function bogusComment($leading = '') { $comment = $leading; $tokens = $this->scanner->charsUntil('>'); - if (false !== $tokens) { + if ($tokens !== false) { $comment .= $tokens; } $tok = $this->scanner->current(); - if (false !== $tok) { + if ($tok !== false) { $comment .= $tok; } $this->flushBuffer(); $this->events->comment($comment); - $this->scanner->consume(); + $this->scanner->next(); return true; } /** * Read a comment. - * Expects the first tok to be inside of the comment. * - * @return bool + * Expects the first tok to be inside of the comment. */ protected function comment() { @@ -671,60 +624,54 @@ protected function comment() $comment = ''; // <!-->. Emit an empty comment because 8.2.4.46 says to. - if ('>' == $tok) { + if ($tok == '>') { // Parse error. Emit the comment token. $this->parseError("Expected comment data, got '>'"); $this->events->comment(''); - $this->scanner->consume(); - + $this->scanner->next(); return true; } // Replace NULL with the replacement char. - if ("\0" == $tok) { + if ($tok == "\0") { $tok = UTF8Utils::FFFD; } - while (!$this->isCommentEnd()) { + while (! $this->isCommentEnd()) { $comment .= $tok; $tok = $this->scanner->next(); } $this->events->comment($comment); - $this->scanner->consume(); - + $this->scanner->next(); return true; } /** * Check if the scanner has reached the end of a comment. - * - * @return bool */ protected function isCommentEnd() { $tok = $this->scanner->current(); // EOF - if (false === $tok) { + if ($tok === false) { // Hit the end. - $this->parseError('Unexpected EOF in a comment.'); - + $this->parseError("Unexpected EOF in a comment."); return true; } // If it doesn't start with -, not the end. - if ('-' != $tok) { + if ($tok != '-') { return false; } // Advance one, and test for '->' - if ('-' == $this->scanner->next() && '>' == $this->scanner->peek()) { - $this->scanner->consume(); // Consume the last '>' + if ($this->scanner->next() == '-' && $this->scanner->peek() == '>') { + $this->scanner->next(); // Consume the last '>' return true; } // Unread '-'; $this->scanner->unconsume(1); - return false; } @@ -735,18 +682,16 @@ protected function isCommentEnd() * not Quirksmode is enabled on the event handler. * * @todo This method is a little long. Should probably refactor. - * - * @return bool */ protected function doctype() { + if (strcasecmp($this->scanner->current(), 'D')) { + return false; + } // Check that string is DOCTYPE. - if ($this->scanner->sequenceMatches('DOCTYPE', false)) { - $this->scanner->consume(7); - } else { - $chars = $this->scanner->charsWhile('DOCTYPEdoctype'); + $chars = $this->scanner->charsWhile("DOCTYPEdoctype"); + if (strcasecmp($chars, 'DOCTYPE')) { $this->parseError('Expected DOCTYPE, got %s', $chars); - return $this->bogusComment('<!' . $chars); } @@ -754,16 +699,18 @@ protected function doctype() $tok = $this->scanner->current(); // EOF: die. - if (false === $tok) { + if ($tok === false) { $this->events->doctype('html5', EventHandler::DOCTYPE_NONE, '', true); - $this->eof(); - - return true; + return $this->eof(); } + $doctypeName = ''; + // NULL char: convert. - if ("\0" === $tok) { - $this->parseError('Unexpected null character in DOCTYPE.'); + if ($tok === "\0") { + $this->parseError("Unexpected null character in DOCTYPE."); + $doctypeName .= UTF8::FFFD; + $tok = $this->scanner->next(); } $stop = " \n\f>"; @@ -774,68 +721,61 @@ protected function doctype() $tok = $this->scanner->current(); // If false, emit a parse error, DOCTYPE, and return. - if (false === $tok) { + if ($tok === false) { $this->parseError('Unexpected EOF in DOCTYPE declaration.'); $this->events->doctype($doctypeName, EventHandler::DOCTYPE_NONE, null, true); - return true; } // Short DOCTYPE, like <!DOCTYPE html> - if ('>' == $tok) { + if ($tok == '>') { // DOCTYPE without a name. - if (0 == strlen($doctypeName)) { - $this->parseError('Expected a DOCTYPE name. Got nothing.'); + if (strlen($doctypeName) == 0) { + $this->parseError("Expected a DOCTYPE name. Got nothing."); $this->events->doctype($doctypeName, 0, null, true); - $this->scanner->consume(); - + $this->scanner->next(); return true; } $this->events->doctype($doctypeName); - $this->scanner->consume(); - + $this->scanner->next(); return true; } $this->scanner->whitespace(); $pub = strtoupper($this->scanner->getAsciiAlpha()); - $white = $this->scanner->whitespace(); + $white = strlen($this->scanner->whitespace()); // Get ID, and flag it as pub or system. - if (('PUBLIC' == $pub || 'SYSTEM' == $pub) && $white > 0) { + if (($pub == 'PUBLIC' || $pub == 'SYSTEM') && $white > 0) { // Get the sys ID. - $type = 'PUBLIC' == $pub ? EventHandler::DOCTYPE_PUBLIC : EventHandler::DOCTYPE_SYSTEM; + $type = $pub == 'PUBLIC' ? EventHandler::DOCTYPE_PUBLIC : EventHandler::DOCTYPE_SYSTEM; $id = $this->quotedString("\0>"); - if (false === $id) { + if ($id === false) { $this->events->doctype($doctypeName, $type, $pub, false); - - return true; + return false; } // Premature EOF. - if (false === $this->scanner->current()) { - $this->parseError('Unexpected EOF in DOCTYPE'); + if ($this->scanner->current() === false) { + $this->parseError("Unexpected EOF in DOCTYPE"); $this->events->doctype($doctypeName, $type, $id, true); - return true; } // Well-formed complete DOCTYPE. $this->scanner->whitespace(); - if ('>' == $this->scanner->current()) { + if ($this->scanner->current() == '>') { $this->events->doctype($doctypeName, $type, $id, false); - $this->scanner->consume(); - + $this->scanner->next(); return true; } // If we get here, we have <!DOCTYPE foo PUBLIC "bar" SOME_JUNK // Throw away the junk, parse error, quirks mode, return true. - $this->scanner->charsUntil('>'); - $this->parseError('Malformed DOCTYPE.'); + $this->scanner->charsUntil(">"); + $this->parseError("Malformed DOCTYPE."); $this->events->doctype($doctypeName, $type, $id, true); - $this->scanner->consume(); - + $this->scanner->next(); return true; } @@ -843,81 +783,75 @@ protected function doctype() // Consume to > and trash. $this->scanner->charsUntil('>'); - $this->parseError('Expected PUBLIC or SYSTEM. Got %s.', $pub); + $this->parseError("Expected PUBLIC or SYSTEM. Got %s.", $pub); $this->events->doctype($doctypeName, 0, null, true); - $this->scanner->consume(); - + $this->scanner->next(); return true; } /** * Utility for reading a quoted string. * - * @param string $stopchars Characters (in addition to a close-quote) that should stop the string. - * E.g. sometimes '>' is higher precedence than '"' or "'". - * - * @return mixed String if one is found (quotations omitted). + * @param string $stopchars + * Characters (in addition to a close-quote) that should stop the string. + * E.g. sometimes '>' is higher precedence than '"' or "'". + * @return mixed String if one is found (quotations omitted) */ protected function quotedString($stopchars) { $tok = $this->scanner->current(); - if ('"' == $tok || "'" == $tok) { - $this->scanner->consume(); + if ($tok == '"' || $tok == "'") { + $this->scanner->next(); $ret = $this->scanner->charsUntil($tok . $stopchars); if ($this->scanner->current() == $tok) { - $this->scanner->consume(); + $this->scanner->next(); } else { // Parse error because no close quote. - $this->parseError('Expected %s, got %s', $tok, $this->scanner->current()); + $this->parseError("Expected %s, got %s", $tok, $this->scanner->current()); } - return $ret; } - return false; } /** * Handle a CDATA section. - * - * @return bool */ protected function cdataSection() { + if ($this->scanner->current() != '[') { + return false; + } $cdata = ''; - $this->scanner->consume(); + $this->scanner->next(); $chars = $this->scanner->charsWhile('CDAT'); - if ('CDATA' != $chars || '[' != $this->scanner->current()) { + if ($chars != 'CDATA' || $this->scanner->current() != '[') { $this->parseError('Expected [CDATA[, got %s', $chars); - return $this->bogusComment('<![' . $chars); } $tok = $this->scanner->next(); do { - if (false === $tok) { + if ($tok === false) { $this->parseError('Unexpected EOF inside CDATA.'); $this->bogusComment('<![CDATA[' . $cdata); - return true; } $cdata .= $tok; $tok = $this->scanner->next(); - } while (!$this->scanner->sequenceMatches(']]>')); + } while (! $this->sequenceMatches(']]>')); // Consume ]]> $this->scanner->consume(3); $this->events->cdata($cdata); - return true; } // ================================================================ // Non-HTML5 // ================================================================ - /** * Handle a processing instruction. * @@ -925,44 +859,40 @@ protected function cdataSection() * treated as "bogus comments". However, since we're not a user * agent, we allow them. We consume until ?> and then issue a * EventListener::processingInstruction() event. - * - * @return bool */ protected function processingInstruction() { - if ('?' != $this->scanner->current()) { + if ($this->scanner->current() != '?') { return false; } $tok = $this->scanner->next(); $procName = $this->scanner->getAsciiAlpha(); - $white = $this->scanner->whitespace(); + $white = strlen($this->scanner->whitespace()); // If not a PI, send to bogusComment. - if (0 == strlen($procName) || 0 == $white || false == $this->scanner->current()) { + if (strlen($procName) == 0 || $white == 0 || $this->scanner->current() == false) { $this->parseError("Expected processing instruction name, got $tok"); $this->bogusComment('<?' . $tok . $procName); - return true; } $data = ''; // As long as it's not the case that the next two chars are ? and >. - while (!('?' == $this->scanner->current() && '>' == $this->scanner->peek())) { + while (! ($this->scanner->current() == '?' && $this->scanner->peek() == '>')) { $data .= $this->scanner->current(); $tok = $this->scanner->next(); - if (false === $tok) { - $this->parseError('Unexpected EOF in processing instruction.'); + if ($tok === false) { + $this->parseError("Unexpected EOF in processing instruction."); $this->events->processingInstruction($procName, $data); - return true; } } - $this->scanner->consume(2); // Consume the closing tag + $this->scanner->next(); // > + $this->scanner->next(); // Next token. $this->events->processingInstruction($procName, $data); - return true; } @@ -973,10 +903,6 @@ protected function processingInstruction() /** * Read from the input stream until we get to the desired sequene * or hit the end of the input stream. - * - * @param string $sequence - * - * @return string */ protected function readUntilSequence($sequence) { @@ -984,20 +910,19 @@ protected function readUntilSequence($sequence) // Optimization for reading larger blocks faster. $first = substr($sequence, 0, 1); - while (false !== $this->scanner->current()) { + while ($this->scanner->current() !== false) { $buffer .= $this->scanner->charsUntil($first); // Stop as soon as we hit the stopping condition. - if ($this->scanner->sequenceMatches($sequence, false)) { + if ($this->sequenceMatches($sequence, false)) { return $buffer; } $buffer .= $this->scanner->current(); - $this->scanner->consume(); + $this->scanner->next(); } // If we get here, we hit the EOF. - $this->parseError('Unexpected EOF during text read.'); - + $this->parseError("Unexpected EOF during text read."); return $buffer; } @@ -1010,20 +935,28 @@ protected function readUntilSequence($sequence) * will still need to read the next sequence, even if * this returns true. * - * Example: $this->scanner->sequenceMatches('</script>') will + * Example: $this->sequenceMatches('</script>') will * see if the input stream is at the start of a * '</script>' string. - * - * @param string $sequence - * @param bool $caseSensitive - * - * @return bool */ protected function sequenceMatches($sequence, $caseSensitive = true) { - @trigger_error(__METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0. Use Scanner::sequenceMatches() instead.', E_USER_DEPRECATED); + $len = strlen($sequence); + $buffer = ''; + for ($i = 0; $i < $len; ++ $i) { + $tok = $this->scanner->current(); + $buffer .= $tok; + + // EOF. Rewind and let the caller handle it. + if ($tok === false) { + $this->scanner->unconsume($i); + return false; + } + $this->scanner->next(); + } - return $this->scanner->sequenceMatches($sequence, $caseSensitive); + $this->scanner->unconsume($len); + return $caseSensitive ? $buffer == $sequence : strcasecmp($buffer, $sequence) === 0; } /** @@ -1035,7 +968,7 @@ protected function sequenceMatches($sequence, $caseSensitive = true) */ protected function flushBuffer() { - if ('' === $this->text) { + if ($this->text === '') { return; } $this->events->text($this->text); @@ -1046,8 +979,6 @@ protected function flushBuffer() * Add text to the temporary buffer. * * @see flushBuffer() - * - * @param string $str */ protected function buffer($str) { @@ -1059,10 +990,6 @@ protected function buffer($str) * * A parse error always returns false because it never consumes any * characters. - * - * @param string $msg - * - * @return string */ protected function parseError($msg) { @@ -1076,57 +1003,62 @@ protected function parseError($msg) $line = $this->scanner->currentLine(); $col = $this->scanner->columnOffset(); $this->events->parseError($msg, $line, $col); - return false; } /** * Decode a character reference and return the string. * - * If $inAttribute is set to true, a bare & will be returned as-is. - * - * @param bool $inAttribute Set to true if the text is inside of an attribute value. - * false otherwise. + * Returns false if the entity could not be found. If $inAttribute is set + * to true, a bare & will be returned as-is. * - * @return string + * @param boolean $inAttribute + * Set to true if the text is inside of an attribute value. + * false otherwise. */ protected function decodeCharacterReference($inAttribute = false) { + + // If it fails this, it's definitely not an entity. + if ($this->scanner->current() != '&') { + return false; + } + // Next char after &. $tok = $this->scanner->next(); + $entity = ''; $start = $this->scanner->position(); - if (false === $tok) { + if ($tok == false) { return '&'; } // These indicate not an entity. We return just // the &. - if ("\t" === $tok || "\n" === $tok || "\f" === $tok || ' ' === $tok || '&' === $tok || '<' === $tok) { + if (strspn($tok, static::WHITE . "&<") == 1) { // $this->scanner->next(); return '&'; } // Numeric entity - if ('#' === $tok) { + if ($tok == '#') { $tok = $this->scanner->next(); // Hexidecimal encoding. // X[0-9a-fA-F]+; // x[0-9a-fA-F]+; - if ('x' === $tok || 'X' === $tok) { + if ($tok == 'x' || $tok == 'X') { $tok = $this->scanner->next(); // Consume x // Convert from hex code to char. $hex = $this->scanner->getHex(); if (empty($hex)) { - $this->parseError('Expected &#xHEX;, got &#x%s', $tok); + $this->parseError("Expected &#xHEX;, got &#x%s", $tok); // We unconsume because we don't know what parser rules might // be in effect for the remaining chars. For example. '&#>' // might result in a specific parsing rule inside of tag // contexts, while not inside of pcdata context. $this->scanner->unconsume(2); - return '&'; } $entity = CharacterReference::lookupHex($hex); @@ -1135,17 +1067,17 @@ protected function decodeCharacterReference($inAttribute = false) else { // Convert from decimal to char. $numeric = $this->scanner->getNumeric(); - if (false === $numeric) { - $this->parseError('Expected &#DIGITS;, got &#%s', $tok); + if ($numeric === false) { + $this->parseError("Expected &#DIGITS;, got &#%s", $tok); $this->scanner->unconsume(2); - return '&'; } $entity = CharacterReference::lookupDecimal($numeric); } - } elseif ('=' === $tok && $inAttribute) { + } elseif ($tok === '=' && $inAttribute) { return '&'; } else { // String entity. + // Attempt to consume a string up to a ';'. // [a-zA-Z0-9]+; $cname = $this->scanner->getAsciiAlphaNum(); @@ -1154,12 +1086,11 @@ protected function decodeCharacterReference($inAttribute = false) // When no entity is found provide the name of the unmatched string // and continue on as the & is not part of an entity. The & will // be converted to & elsewhere. - if (null === $entity) { - if (!$inAttribute || '' === $cname) { + if ($entity == null) { + if (!$inAttribute || strlen($cname) === 0) { $this->parseError("No match in entity table for '%s'", $cname); } $this->scanner->unconsume($this->scanner->position() - $start); - return '&'; } } @@ -1168,9 +1099,8 @@ protected function decodeCharacterReference($inAttribute = false) $tok = $this->scanner->current(); // We have an entity. We're done here. - if (';' === $tok) { - $this->scanner->consume(); - + if ($tok == ';') { + $this->scanner->next(); return $entity; } @@ -1178,12 +1108,10 @@ protected function decodeCharacterReference($inAttribute = false) // entire string. Otherwise, failure to match is an error. if ($inAttribute) { $this->scanner->unconsume($this->scanner->position() - $start); - return '&'; } - $this->parseError('Expected &ENTITY;, got &ENTITY%s (no trailing ;) ', $tok); - + $this->parseError("Expected &ENTITY;, got &ENTITY%s (no trailing ;) ", $tok); return '&' . $entity; } } diff --git a/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php b/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php index 00d3951fdf7789608b64c6569af034216a18ba9b..6236208218a2d3683fb68d0b075a9bf52f623587 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Parser; /** @@ -15,6 +14,7 @@ */ class TreeBuildingRules { + protected static $tags = array( 'li' => 1, 'dd' => 1, @@ -29,9 +29,20 @@ class TreeBuildingRules 'tbody' => 1, 'table' => 1, 'optgroup' => 1, - 'option' => 1, + 'option' => 1 ); + /** + * Build a new rules engine. + * + * @param \DOMDocument $doc + * The DOM document to use for evaluation and modification. + */ + public function __construct($doc) + { + $this->doc = $doc; + } + /** * Returns true if the given tagname has special processing rules. */ @@ -60,7 +71,7 @@ public function evaluate($new, $current) return $this->handleRT($new, $current); case 'optgroup': return $this->closeIfCurrentMatches($new, $current, array( - 'optgroup', + 'optgroup' )); case 'option': return $this->closeIfCurrentMatches($new, $current, array( @@ -68,13 +79,13 @@ public function evaluate($new, $current) )); case 'tr': return $this->closeIfCurrentMatches($new, $current, array( - 'tr', + 'tr' )); case 'td': case 'th': return $this->closeIfCurrentMatches($new, $current, array( 'th', - 'td', + 'td' )); case 'tbody': case 'thead': @@ -84,7 +95,7 @@ public function evaluate($new, $current) return $this->closeIfCurrentMatches($new, $current, array( 'thead', 'tfoot', - 'tbody', + 'tbody' )); } @@ -94,7 +105,7 @@ public function evaluate($new, $current) protected function handleLI($ele, $current) { return $this->closeIfCurrentMatches($ele, $current, array( - 'li', + 'li' )); } @@ -102,7 +113,7 @@ protected function handleDT($ele, $current) { return $this->closeIfCurrentMatches($ele, $current, array( 'dt', - 'dd', + 'dd' )); } @@ -110,13 +121,14 @@ protected function handleRT($ele, $current) { return $this->closeIfCurrentMatches($ele, $current, array( 'rt', - 'rp', + 'rp' )); } protected function closeIfCurrentMatches($ele, $current, $match) { - if (in_array($current->tagName, $match, true)) { + $tname = $current->tagName; + if (in_array($current->tagName, $match)) { $current->parentNode->appendChild($ele); } else { $current->appendChild($ele); diff --git a/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php b/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php index f6a70bfacea91b568d91a912f67005048f7c4bf7..44affb639e7e264e3bebe0d8c1c55beb663b7425 100644 --- a/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php +++ b/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php @@ -1,9 +1,8 @@ <?php - namespace Masterminds\HTML5\Parser; - /* -Portions based on code from html5lib files with the following copyright: + * +* Portions based on code from html5lib files with the following copyright: Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/> @@ -25,44 +24,40 @@ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -use Masterminds\HTML5\Exception; +*/ +/** + * UTF-8 Utilities + */ class UTF8Utils { + /** - * The Unicode replacement character. + * The Unicode replacement character.. */ const FFFD = "\xEF\xBF\xBD"; /** * Count the number of characters in a string. - * UTF-8 aware. This will try (in order) iconv, MB, libxml, and finally a custom counter. * - * @param string $string + * UTF-8 aware. This will try (in order) iconv, + * MB, libxml, and finally a custom counter. * - * @return int + * @todo Move this to a general utility class. */ public static function countChars($string) { // Get the length for the string we need. if (function_exists('mb_strlen')) { return mb_strlen($string, 'utf-8'); - } - - if (function_exists('iconv_strlen')) { + } elseif (function_exists('iconv_strlen')) { return iconv_strlen($string, 'utf-8'); - } - - if (function_exists('utf8_decode')) { + } elseif (function_exists('utf8_decode')) { // MPB: Will this work? Won't certain decodes lead to two chars // extrapolated out of 2-byte chars? return strlen(utf8_decode($string)); } - $count = count_chars($string); - // 0x80 = 0x7F - 0 + 1 (one added to get inclusive range) // 0x33 = 0xF4 - 0x2C + 1 (one added to get inclusive range) return array_sum(array_slice($count, 0, 0x80)) + array_sum(array_slice($count, 0xC2, 0x33)); @@ -74,20 +69,15 @@ public static function countChars($string) * This has not yet been tested with charactersets other than UTF-8. * It should work with ISO-8859-1/-13 and standard Latin Win charsets. * - * @param string $data The data to convert - * @param string $encoding A valid encoding. Examples: http://www.php.net/manual/en/mbstring.supported-encodings.php - * - * @return string + * @param string $data + * The data to convert. + * @param string $encoding + * A valid encoding. Examples: http://www.php.net/manual/en/mbstring.supported-encodings.php */ public static function convertToUTF8($data, $encoding = 'UTF-8') { /* - * From the HTML5 spec: Given an encoding, the bytes in the input stream must be converted - * to Unicode characters for the tokeniser, as described by the rules for that encoding, - * except that the leading U+FEFF BYTE ORDER MARK character, if any, must not be stripped - * by the encoding layer (it is stripped by the rule below). Bytes or sequences of bytes - * in the original byte stream that could not be converted to Unicode characters must be - * converted to U+FFFD REPLACEMENT CHARACTER code points. + * From the HTML5 spec: Given an encoding, the bytes in the input stream must be converted to Unicode characters for the tokeniser, as described by the rules for that encoding, except that the leading U+FEFF BYTE ORDER MARK character, if any, must not be stripped by the encoding layer (it is stripped by the rule below). Bytes or sequences of bytes in the original byte stream that could not be converted to Unicode characters must be converted to U+FFFD REPLACEMENT CHARACTER code points. */ // mb_convert_encoding is chosen over iconv because of a bug. The best @@ -108,9 +98,8 @@ public static function convertToUTF8($data, $encoding = 'UTF-8') mb_substitute_character('none'); $data = mb_convert_encoding($data, 'UTF-8', $encoding); mb_substitute_character($save); - } - // @todo Get iconv running in at least some environments if that is possible. - elseif (function_exists('iconv') && 'auto' !== $encoding) { + } // @todo Get iconv running in at least some environments if that is possible. + elseif (function_exists('iconv') && $encoding != 'auto') { // fprintf(STDOUT, "iconv found\n"); // iconv has the following behaviors: // - Overlong representations are ignored. @@ -118,13 +107,14 @@ public static function convertToUTF8($data, $encoding = 'UTF-8') // - Incomplete sequences generate a warning. $data = @iconv($encoding, 'UTF-8//IGNORE', $data); } else { + // we can make a conforming native implementation throw new Exception('Not implemented, please install mbstring or iconv'); } /* * One leading U+FEFF BYTE ORDER MARK character must be ignored if any are present. */ - if ("\xEF\xBB\xBF" === substr($data, 0, 3)) { + if (substr($data, 0, 3) === "\xEF\xBB\xBF") { $data = substr($data, 3); } @@ -134,30 +124,28 @@ public static function convertToUTF8($data, $encoding = 'UTF-8') /** * Checks for Unicode code points that are not valid in a document. * - * @param string $data A string to analyze - * - * @return array An array of (string) error messages produced by the scanning + * @param string $data + * A string to analyze. + * @return array An array of (string) error messages produced by the scanning. */ public static function checkForIllegalCodepoints($data) { + if (! function_exists('preg_match_all')) { + throw\Exception('The PCRE library is not loaded or is not available.'); + } + // Vestigal error handling. $errors = array(); /* - * All U+0000 null characters in the input must be replaced by U+FFFD REPLACEMENT CHARACTERs. - * Any occurrences of such characters is a parse error. + * All U+0000 null characters in the input must be replaced by U+FFFD REPLACEMENT CHARACTERs. Any occurrences of such characters is a parse error. */ - for ($i = 0, $count = substr_count($data, "\0"); $i < $count; ++$i) { + for ($i = 0, $count = substr_count($data, "\0"); $i < $count; $i ++) { $errors[] = 'null-character'; } /* - * Any occurrences of any characters in the ranges U+0001 to U+0008, U+000B, U+000E to U+001F, U+007F - * to U+009F, U+D800 to U+DFFF , U+FDD0 to U+FDEF, and characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, - * U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE, - * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF, - * U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and U+10FFFF are parse errors. - * (These are all control characters or permanently undefined Unicode characters.) + * Any occurrences of any characters in the ranges U+0001 to U+0008, U+000B, U+000E to U+001F, U+007F to U+009F, U+D800 to U+DFFF , U+FDD0 to U+FDEF, and characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE, U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF, U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and U+10FFFF are parse errors. (These are all control characters or permanently undefined Unicode characters.) */ // Check PCRE is loaded. $count = preg_match_all( @@ -174,7 +162,7 @@ public static function checkForIllegalCodepoints($data) | [\xF0-\xF4][\x8F-\xBF]\xBF[\xBE\xBF] # U+nFFFE and U+nFFFF (1 <= n <= 10_{16}) )/x', $data, $matches); - for ($i = 0; $i < $count; ++$i) { + for ($i = 0; $i < $count; $i ++) { $errors[] = 'invalid-codepoint'; } diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php b/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php index e9421a12dc14cadbee76ece762e631e7095eb4bc..4f90f84d23612ff810f2a731e1c2120236c004cd 100644 --- a/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php +++ b/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php @@ -3,12 +3,11 @@ * @file * This contains HTML5 entities to use with serializing. * - * The list here is mildly different from the list at Entities because + * The list here is mildly different from the list at \Masterminds\HTML5\Entities because * that list was generated from the w3c. It contains some entities that are * not entirely proper such as &am; which maps to &. This list is meant to be * a fallback for PHP versions prior to PHP 5.4 when dealing with encoding. */ - namespace Masterminds\HTML5\Serializer; /** @@ -18,6 +17,7 @@ */ class HTML5Entities { + public static $map = array( ' ' => '	', "\n" => '
', @@ -1528,6 +1528,6 @@ class HTML5Entities '𝕨' => '𝕨', '𝕩' => '𝕩', '𝕪' => '𝕪', - '𝕫' => '𝕫', + '𝕫' => '𝕫' ); } diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php b/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php index 1c4e8929a296ff7623f5aeb3e1f97390bf1217a6..a22683c382ed776c3ace800fca4f16f3d2bcd710 100644 --- a/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php +++ b/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php @@ -6,7 +6,6 @@ * These output rules are likely to generate output similar to the document that * was parsed. It is not intended to output exactly the document that was parsed. */ - namespace Masterminds\HTML5\Serializer; use Masterminds\HTML5\Elements; @@ -14,10 +13,10 @@ /** * Generate the output html5 based on element rules. */ -class OutputRules implements RulesInterface +class OutputRules implements \Masterminds\HTML5\Serializer\RulesInterface { /** - * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0. + * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0 */ const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml'; @@ -32,7 +31,7 @@ class OutputRules implements RulesInterface const NAMESPACE_XMLNS = 'http://www.w3.org/2000/xmlns/'; /** - * Holds the HTML5 element names that causes a namespace switch. + * Holds the HTML5 element names that causes a namespace switch * * @var array */ @@ -51,9 +50,8 @@ class OutputRules implements RulesInterface const IM_IN_MATHML = 3; /** - * Used as cache to detect if is available ENT_HTML5. - * - * @var bool + * Used as cache to detect if is available ENT_HTML5 + * @var boolean */ private $hasHTML5 = false; @@ -167,15 +165,16 @@ public function __construct($output, $options = array()) $this->outputMode = static::IM_IN_HTML; $this->out = $output; - $this->hasHTML5 = defined('ENT_HTML5'); - } + // If HHVM, see https://github.com/facebook/hhvm/issues/2727 + $this->hasHTML5 = defined('ENT_HTML5') && !defined('HHVM_VERSION'); + } public function addRule(array $rule) { $this->nonBooleanAttributes[] = $rule; } - public function setTraverser(Traverser $traverser) + public function setTraverser(\Masterminds\HTML5\Serializer\Traverser $traverser) { $this->traverser = $traverser; @@ -212,10 +211,10 @@ public function element($ele) // If we are in SVG or MathML there is special handling. // Using if/elseif instead of switch because it's faster in PHP. - if ('svg' == $name) { + if ($name == 'svg') { $this->outputMode = static::IM_IN_SVG; $name = Elements::normalizeSvgElement($name); - } elseif ('math' == $name) { + } elseif ($name == 'math') { $this->outputMode = static::IM_IN_MATHML; } @@ -235,13 +234,13 @@ public function element($ele) } // Close out the SVG or MathML special handling. - if ('svg' == $name || 'math' == $name) { + if ($name == 'svg' || $name == 'math') { $this->outputMode = static::IM_IN_HTML; } } // If not unary, add a closing tag. - if (!Elements::isA($name, Elements::VOID_TAG)) { + if (! Elements::isA($name, Elements::VOID_TAG)) { $this->closeTag($ele); } } @@ -249,13 +248,13 @@ public function element($ele) /** * Write a text node. * - * @param \DOMText $ele The text node to write. + * @param \DOMText $ele + * The text node to write. */ public function text($ele) { if (isset($ele->parentNode) && isset($ele->parentNode->tagName) && Elements::isA($ele->parentNode->localName, Elements::TEXT_RAW)) { $this->wr($ele->data); - return; } @@ -284,19 +283,20 @@ public function processorInstruction($ele) ->wr($ele->data) ->wr('?>'); } - /** - * Write the namespace attributes. + * Write the namespace attributes + * * - * @param \DOMNode $ele The element being written. + * @param \DOMNode $ele + * The element being written. */ protected function namespaceAttrs($ele) { - if (!$this->xpath || $this->xpath->document !== $ele->ownerDocument) { + if (!$this->xpath || $this->xpath->document !== $ele->ownerDocument){ $this->xpath = new \DOMXPath($ele->ownerDocument); } - foreach ($this->xpath->query('namespace::*[not(.=../../namespace::*)]', $ele) as $nsNode) { + foreach( $this->xpath->query('namespace::*[not(.=../../namespace::*)]', $ele ) as $nsNode ) { if (!in_array($nsNode->nodeValue, $this->implicitNamespaces)) { $this->wr(' ')->wr($nsNode->nodeName)->wr('="')->wr($nsNode->nodeValue)->wr('"'); } @@ -309,15 +309,18 @@ protected function namespaceAttrs($ele) * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the * qualified name (8.3). * - * @param \DOMNode $ele The element being written. + * @param \DOMNode $ele + * The element being written. */ protected function openTag($ele) { $this->wr('<')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName); + $this->attrs($ele); $this->namespaceAttrs($ele); + if ($this->outputMode == static::IM_IN_HTML) { $this->wr('>'); } // If we are not in html mode we are in SVG, MathML, or XML embedded content. @@ -334,7 +337,7 @@ protected function openTag($ele) protected function attrs($ele) { // FIXME: Needs support for xml, xmlns, xlink, and namespaced elements. - if (!$ele->hasAttributes()) { + if (! $ele->hasAttributes()) { return $this; } @@ -342,7 +345,7 @@ protected function attrs($ele) // value-less attributes. $map = $ele->attributes; $len = $map->length; - for ($i = 0; $i < $len; ++$i) { + for ($i = 0; $i < $len; ++ $i) { $node = $map->item($i); $val = $this->enc($node->value, true); @@ -362,42 +365,45 @@ protected function attrs($ele) $this->wr(' ')->wr($name); - if ((isset($val) && '' !== $val) || $this->nonBooleanAttribute($node)) { + if ((isset($val) && $val !== '') || $this->nonBooleanAttribute($node)) { $this->wr('="')->wr($val)->wr('"'); } } } + protected function nonBooleanAttribute(\DOMAttr $attr) { $ele = $attr->ownerElement; - foreach ($this->nonBooleanAttributes as $rule) { - if (isset($rule['nodeNamespace']) && $rule['nodeNamespace'] !== $ele->namespaceURI) { + foreach($this->nonBooleanAttributes as $rule){ + + if(isset($rule['nodeNamespace']) && $rule['nodeNamespace']!==$ele->namespaceURI){ continue; } - if (isset($rule['attNamespace']) && $rule['attNamespace'] !== $attr->namespaceURI) { + if(isset($rule['attNamespace']) && $rule['attNamespace']!==$attr->namespaceURI){ continue; } - if (isset($rule['nodeName']) && !is_array($rule['nodeName']) && $rule['nodeName'] !== $ele->localName) { + if(isset($rule['nodeName']) && !is_array($rule['nodeName']) && $rule['nodeName']!==$ele->localName){ continue; } - if (isset($rule['nodeName']) && is_array($rule['nodeName']) && !in_array($ele->localName, $rule['nodeName'], true)) { + if(isset($rule['nodeName']) && is_array($rule['nodeName']) && !in_array($ele->localName, $rule['nodeName'], true)){ continue; } - if (isset($rule['attrName']) && !is_array($rule['attrName']) && $rule['attrName'] !== $attr->localName) { + if(isset($rule['attrName']) && !is_array($rule['attrName']) && $rule['attrName']!==$attr->localName){ continue; } - if (isset($rule['attrName']) && is_array($rule['attrName']) && !in_array($attr->localName, $rule['attrName'], true)) { + if(isset($rule['attrName']) && is_array($rule['attrName']) && !in_array($attr->localName, $rule['attrName'], true)){ continue; } - if (isset($rule['xpath'])) { + if(isset($rule['xpath'])){ + $xp = $this->getXPath($attr); - if (isset($rule['prefixes'])) { - foreach ($rule['prefixes'] as $nsPrefix => $ns) { + if(isset($rule['prefixes'])){ + foreach($rule['prefixes'] as $nsPrefix => $ns){ $xp->registerNamespace($nsPrefix, $ns); } } - if (!$xp->evaluate($rule['xpath'], $attr)) { + if(!$xp->evaluate($rule['xpath'], $attr)){ continue; } } @@ -408,12 +414,10 @@ protected function nonBooleanAttribute(\DOMAttr $attr) return false; } - private function getXPath(\DOMNode $node) - { - if (!$this->xpath) { + private function getXPath(\DOMNode $node){ + if(!$this->xpath){ $this->xpath = new \DOMXPath($node->ownerDocument); } - return $this->xpath; } @@ -423,7 +427,8 @@ private function getXPath(\DOMNode $node) * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the * qualified name (8.3). * - * @param \DOMNode $ele The element being written. + * @param \DOMNode $ele + * The element being written. */ protected function closeTag($ele) { @@ -435,26 +440,25 @@ protected function closeTag($ele) /** * Write to the output. * - * @param string $text The string to put into the output + * @param string $text + * The string to put into the output. * - * @return $this + * @return \Masterminds\HTML5\Serializer\Traverser $this so it can be used in chaining. */ protected function wr($text) { fwrite($this->out, $text); - return $this; } /** * Write a new line character. * - * @return $this + * @return \Masterminds\HTML5\Serializer\Traverser $this so it can be used in chaining. */ protected function nl() { fwrite($this->out, PHP_EOL); - return $this; } @@ -480,15 +484,18 @@ protected function nl() * * @todo Use the Entities class in php 5.3 to have html5 entities. * - * @param string $text Text to encode. - * @param bool $attribute True if we are encoding an attrubute, false otherwise. + * @param string $text + * text to encode. + * @param boolean $attribute + * True if we are encoding an attrubute, false otherwise * * @return string The encoded text. */ protected function enc($text, $attribute = false) { + // Escape the text rather than convert to named character references. - if (!$this->encode) { + if (! $this->encode) { return $this->escape($text, $attribute); } @@ -500,7 +507,7 @@ protected function enc($text, $attribute = false) } // If a version earlier than 5.4 html5 entities are not entirely handled. // This manually handles them. else { - return strtr($text, HTML5Entities::$map); + return strtr($text, \Masterminds\HTML5\Serializer\HTML5Entities::$map); } } @@ -518,11 +525,14 @@ protected function enc($text, $attribute = false) * * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#escapingString * - * @param string $text Text to escape. - * @param bool $attribute True if we are escaping an attrubute, false otherwise. + * @param string $text + * text to escape. + * @param boolean $attribute + * True if we are escaping an attrubute, false otherwise */ protected function escape($text, $attribute = false) { + // Not using htmlspecialchars because, while it does escaping, it doesn't // match the requirements of section 8.5. For example, it doesn't handle // non-breaking spaces. @@ -530,14 +540,14 @@ protected function escape($text, $attribute = false) $replace = array( '"' => '"', '&' => '&', - "\xc2\xa0" => ' ', + "\xc2\xa0" => ' ' ); } else { $replace = array( '<' => '<', '>' => '>', '&' => '&', - "\xc2\xa0" => ' ', + "\xc2\xa0" => ' ' ); } diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php b/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php index 69a6ecdad8c46c2af63538ac8582bc33c38dffe5..6ef5e5e52243a1ecb034956430960f311dae5d17 100644 --- a/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php +++ b/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php @@ -3,24 +3,28 @@ * @file * The interface definition for Rules to generate output. */ - namespace Masterminds\HTML5\Serializer; /** - * To create a new rule set for writing output the RulesInterface needs to be implemented. - * The resulting class can be specified in the options with the key of rules. + * To create a new rule set for writing output the RulesInterface needs to be + * implemented. + * The resulting class can be specified in the options with the + * key of rules. * - * For an example implementation see Serializer\OutputRules. + * For an example implementation see \Masterminds\HTML5\Serializer\OutputRules. */ interface RulesInterface { + /** * The class constructor. * * Note, before the rules can be used a traverser must be registered. * - * @param mixed $output The output stream to write output to. - * @param array $options An array of options. + * @param mixed $output + * The output stream to write output to. + * @param array $options + * An array of options. */ public function __construct($output, $options = array()); @@ -29,11 +33,11 @@ public function __construct($output, $options = array()); * * Note, only one traverser can be used by the rules. * - * @param Traverser $traverser The traverser used in the rules. - * - * @return RulesInterface $this for the current object. + * @param \Masterminds\HTML5\Serializer\Traverser $traverser + * The traverser used in the rules. + * @return \Masterminds\HTML5\Serializer\RulesInterface $this for the current object. */ - public function setTraverser(Traverser $traverser); + public function setTraverser(\Masterminds\HTML5\Serializer\Traverser $traverser); /** * Write a document element (\DOMDocument). @@ -88,7 +92,7 @@ public function comment($ele); /** * Write a processor instruction. * - * To learn about processor instructions see InstructionProcessor + * To learn about processor instructions see \Masterminds\HTML5\InstructionProcessor * * Instead of returning the result write it to the output stream ($output) * that was passed into the constructor. diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php b/vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php index 1e8d7924eb955ea671c83471aaf93d7dddf92722..e95dc366488353de7a8c9ccbefc2efc2403f1e14 100644 --- a/vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php +++ b/vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Serializer; /** @@ -13,13 +12,14 @@ */ class Traverser { + /** * Namespaces that should be treated as "local" to HTML5. */ - protected static $local_ns = array( + static $local_ns = array( 'http://www.w3.org/1999/xhtml' => 'html', 'http://www.w3.org/1998/Math/MathML' => 'math', - 'http://www.w3.org/2000/svg' => 'svg', + 'http://www.w3.org/2000/svg' => 'svg' ); protected $dom; @@ -35,13 +35,16 @@ class Traverser /** * Create a traverser. * - * @param \DOMNode|\DOMNodeList $dom The document or node to traverse. - * @param resource $out A stream that allows writing. The traverser will output into this - * stream. - * @param array $options An array of options for the traverser as key/value pairs. These include: - * - encode_entities: A bool to specify if full encding should happen for all named - * charachter references. Defaults to false which escapes &'<>". - * - output_rules: The path to the class handling the output rules. + * @param DOMNode|DOMNodeList $dom + * The document or node to traverse. + * @param resource $out + * A stream that allows writing. The traverser will output into this + * stream. + * @param array $options + * An array or options for the traverser as key/value pairs. These include: + * - encode_entities: A bool to specify if full encding should happen for all named + * charachter references. Defaults to false which escapes &'<>". + * - output_rules: The path to the class handling the output rules. */ public function __construct($dom, $out, RulesInterface $rules, $options = array()) { @@ -56,7 +59,8 @@ public function __construct($dom, $out, RulesInterface $rules, $options = array( /** * Tell the traverser to walk the DOM. * - * @return resource $out Returns the output stream. + * @return resource $out + * Returns the output stream. */ public function walk() { @@ -83,7 +87,8 @@ public function walk() /** * Process a node in the DOM. * - * @param mixed $node A node implementing \DOMNode. + * @param mixed $node + * A node implementing \DOMNode. */ public function node($node) { @@ -114,7 +119,8 @@ public function node($node) /** * Walk through all the nodes on a node list. * - * @param \DOMNodeList $nl A list of child elements to walk through. + * @param \DOMNodeList $nl + * A list of child elements to walk through. */ public function children($nl) { @@ -126,9 +132,10 @@ public function children($nl) /** * Is an element local? * - * @param mixed $ele An element that implement \DOMNode. + * @param mixed $ele + * An element that implement \DOMNode. * - * @return bool true if local and false otherwise. + * @return bool True if local and false otherwise. */ public function isLocalElement($ele) { diff --git a/vendor/masterminds/html5/test/HTML5/ElementsTest.php b/vendor/masterminds/html5/test/HTML5/ElementsTest.php index 08b5ee425255a40c8ae161083243b843545c63ee..629b561bfa97ea66251e4cd0a267229a7cfdf62d 100644 --- a/vendor/masterminds/html5/test/HTML5/ElementsTest.php +++ b/vendor/masterminds/html5/test/HTML5/ElementsTest.php @@ -1,247 +1,247 @@ <?php - namespace Masterminds\HTML5\Tests; use Masterminds\HTML5\Elements; class ElementsTest extends TestCase { + public $html5Elements = array( - 'a', - 'abbr', - 'address', - 'area', - 'article', - 'aside', - 'audio', - 'b', - 'base', - 'bdi', - 'bdo', - 'blockquote', - 'body', - 'br', - 'button', - 'canvas', - 'caption', - 'cite', - 'code', - 'col', - 'colgroup', - 'command', + "a", + "abbr", + "address", + "area", + "article", + "aside", + "audio", + "b", + "base", + "bdi", + "bdo", + "blockquote", + "body", + "br", + "button", + "canvas", + "caption", + "cite", + "code", + "col", + "colgroup", + "command", // "data", - 'datalist', - 'dd', - 'del', - 'details', - 'dfn', - 'dialog', - 'div', - 'dl', - 'dt', - 'em', - 'embed', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hgroup', - 'hr', - 'html', - 'i', - 'iframe', - 'img', - 'input', - 'ins', - 'kbd', - 'keygen', - 'label', - 'legend', - 'li', - 'link', - 'map', - 'mark', - 'menu', - 'meta', - 'meter', - 'nav', - 'noscript', - 'object', - 'ol', - 'optgroup', - 'option', - 'output', - 'p', - 'param', - 'pre', - 'progress', - 'q', - 'rp', - 'rt', - 'ruby', - 's', - 'samp', - 'script', - 'section', - 'select', - 'small', - 'source', - 'span', - 'strong', - 'style', - 'sub', - 'summary', - 'sup', - 'table', - 'tbody', - 'td', - 'textarea', - 'tfoot', - 'th', - 'thead', - 'time', - 'title', - 'tr', - 'track', - 'u', - 'ul', - 'var', - 'video', - 'wbr', + "datalist", + "dd", + "del", + "details", + "dfn", + "dialog", + "div", + "dl", + "dt", + "em", + "embed", + "fieldset", + "figcaption", + "figure", + "footer", + "form", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "head", + "header", + "hgroup", + "hr", + "html", + "i", + "iframe", + "img", + "input", + "ins", + "kbd", + "keygen", + "label", + "legend", + "li", + "link", + "map", + "mark", + "menu", + "meta", + "meter", + "nav", + "noscript", + "object", + "ol", + "optgroup", + "option", + "output", + "p", + "param", + "pre", + "progress", + "q", + "rp", + "rt", + "ruby", + "s", + "samp", + "script", + "section", + "select", + "small", + "source", + "span", + "strong", + "style", + "sub", + "summary", + "sup", + "table", + "tbody", + "td", + "textarea", + "tfoot", + "th", + "thead", + "time", + "title", + "tr", + "track", + "u", + "ul", + "var", + "video", + "wbr" ); public $mathmlElements = array( - 'maction', - 'maligngroup', - 'malignmark', - 'math', - 'menclose', - 'merror', - 'mfenced', - 'mfrac', - 'mglyph', - 'mi', - 'mlabeledtr', - 'mlongdiv', - 'mmultiscripts', - 'mn', - 'mo', - 'mover', - 'mpadded', - 'mphantom', - 'mroot', - 'mrow', - 'ms', - 'mscarries', - 'mscarry', - 'msgroup', - 'msline', - 'mspace', - 'msqrt', - 'msrow', - 'mstack', - 'mstyle', - 'msub', - 'msup', - 'msubsup', - 'mtable', - 'mtd', - 'mtext', - 'mtr', - 'munder', - 'munderover', + "maction", + "maligngroup", + "malignmark", + "math", + "menclose", + "merror", + "mfenced", + "mfrac", + "mglyph", + "mi", + "mlabeledtr", + "mlongdiv", + "mmultiscripts", + "mn", + "mo", + "mover", + "mpadded", + "mphantom", + "mroot", + "mrow", + "ms", + "mscarries", + "mscarry", + "msgroup", + "msline", + "mspace", + "msqrt", + "msrow", + "mstack", + "mstyle", + "msub", + "msup", + "msubsup", + "mtable", + "mtd", + "mtext", + "mtr", + "munder", + "munderover" ); public $svgElements = array( - 'a', - 'altGlyph', - 'altGlyphDef', - 'altGlyphItem', - 'animate', - 'animateColor', - 'animateMotion', - 'animateTransform', - 'circle', - 'clipPath', - 'color-profile', - 'cursor', - 'defs', - 'desc', - 'ellipse', - 'feBlend', - 'feColorMatrix', - 'feComponentTransfer', - 'feComposite', - 'feConvolveMatrix', - 'feDiffuseLighting', - 'feDisplacementMap', - 'feDistantLight', - 'feFlood', - 'feFuncA', - 'feFuncB', - 'feFuncG', - 'feFuncR', - 'feGaussianBlur', - 'feImage', - 'feMerge', - 'feMergeNode', - 'feMorphology', - 'feOffset', - 'fePointLight', - 'feSpecularLighting', - 'feSpotLight', - 'feTile', - 'feTurbulence', - 'filter', - 'font', - 'font-face', - 'font-face-format', - 'font-face-name', - 'font-face-src', - 'font-face-uri', - 'foreignObject', - 'g', - 'glyph', - 'glyphRef', - 'hkern', - 'image', - 'line', - 'linearGradient', - 'marker', - 'mask', - 'metadata', - 'missing-glyph', - 'mpath', - 'path', - 'pattern', - 'polygon', - 'polyline', - 'radialGradient', - 'rect', - 'script', - 'set', - 'stop', - 'style', - 'svg', - 'switch', - 'symbol', - 'text', - 'textPath', - 'title', - 'tref', - 'tspan', - 'use', - 'view', - 'vkern', + "a", + "altGlyph", + "altGlyphDef", + "altGlyphItem", + "animate", + "animateColor", + "animateMotion", + "animateTransform", + "circle", + "clipPath", + "color-profile", + "cursor", + "defs", + "desc", + "ellipse", + "feBlend", + "feColorMatrix", + "feComponentTransfer", + "feComposite", + "feConvolveMatrix", + "feDiffuseLighting", + "feDisplacementMap", + "feDistantLight", + "feFlood", + "feFuncA", + "feFuncB", + "feFuncG", + "feFuncR", + "feGaussianBlur", + "feImage", + "feMerge", + "feMergeNode", + "feMorphology", + "feOffset", + "fePointLight", + "feSpecularLighting", + "feSpotLight", + "feTile", + "feTurbulence", + "filter", + "font", + "font-face", + "font-face-format", + "font-face-name", + "font-face-src", + "font-face-uri", + "foreignObject", + "g", + "glyph", + "glyphRef", + "hkern", + "image", + "line", + "linearGradient", + "marker", + "mask", + "metadata", + "missing-glyph", + "mpath", + "path", + "pattern", + "polygon", + "polyline", + "radialGradient", + "rect", + "script", + "set", + "stop", + "style", + "svg", + "switch", + "symbol", + "text", + "textPath", + "title", + "tref", + "tspan", + "use", + "view", + "vkern" ); public function testIsHtml5Element() @@ -255,7 +255,7 @@ public function testIsHtml5Element() $nonhtml5 = array( 'foo', 'bar', - 'baz', + 'baz' ); foreach ($nonhtml5 as $element) { $this->assertFalse(Elements::isHtml5Element($element), 'html5 element test failed on: ' . $element); @@ -269,14 +269,14 @@ public function testIsMathMLElement() foreach ($this->mathmlElements as $element) { $this->assertTrue(Elements::isMathMLElement($element), 'MathML element test failed on: ' . $element); - // MathML is case sensitive so these should all fail. + // MathML is case sensetitive so these should all fail. $this->assertFalse(Elements::isMathMLElement(strtoupper($element)), 'MathML element test failed on: ' . strtoupper($element)); } $nonMathML = array( 'foo', 'bar', - 'baz', + 'baz' ); foreach ($nonMathML as $element) { $this->assertFalse(Elements::isMathMLElement($element), 'MathML element test failed on: ' . $element); @@ -288,14 +288,14 @@ public function testIsSvgElement() foreach ($this->svgElements as $element) { $this->assertTrue(Elements::isSvgElement($element), 'SVG element test failed on: ' . $element); - // SVG is case sensitive so these should all fail. + // SVG is case sensetitive so these should all fail. $this->assertFalse(Elements::isSvgElement(strtoupper($element)), 'SVG element test failed on: ' . strtoupper($element)); } $nonSVG = array( 'foo', 'bar', - 'baz', + 'baz' ); foreach ($nonSVG as $element) { $this->assertFalse(Elements::isSvgElement($element), 'SVG element test failed on: ' . $element); @@ -313,17 +313,17 @@ public function testIsElement() foreach ($this->mathmlElements as $element) { $this->assertTrue(Elements::isElement($element), 'MathML element test failed on: ' . $element); - // MathML is case sensitive so these should all fail. + // MathML is case sensetitive so these should all fail. $this->assertFalse(Elements::isElement(strtoupper($element)), 'MathML element test failed on: ' . strtoupper($element)); } foreach ($this->svgElements as $element) { $this->assertTrue(Elements::isElement($element), 'SVG element test failed on: ' . $element); - // SVG is case sensitive so these should all fail. But, there is duplication - // html5 and SVG. Since html5 is case insensitive we need to make sure + // SVG is case sensetitive so these should all fail. But, there is duplication + // html5 and SVG. Since html5 is case insensetitive we need to make sure // it's not a html5 element first. - if (!in_array($element, $this->html5Elements)) { + if (! in_array($element, $this->html5Elements)) { $this->assertFalse(Elements::isElement(strtoupper($element)), 'SVG element test failed on: ' . strtoupper($element)); } } @@ -331,7 +331,7 @@ public function testIsElement() $nonhtml5 = array( 'foo', 'bar', - 'baz', + 'baz' ); foreach ($nonhtml5 as $element) { $this->assertFalse(Elements::isElement($element), 'html5 element test failed on: ' . $element); @@ -348,10 +348,10 @@ public function testElement() $nonhtml5 = array( 'foo', 'bar', - 'baz', + 'baz' ); foreach ($nonhtml5 as $element) { - $this->assertEquals(0, Elements::element($element)); + $this->assertFalse(Elements::element($element)); } } @@ -373,7 +373,7 @@ public function testIsA() 'embed', 'frame', 'hr', - 'img', + 'img' ); foreach ($voidElements as $element) { @@ -383,7 +383,7 @@ public function testIsA() $nonVoid = array( 'span', 'a', - 'div', + 'div' ); foreach ($nonVoid as $tag) { $this->assertFalse(Elements::isA($tag, Elements::VOID_TAG), 'Void element test failed on: ' . $tag); @@ -393,6 +393,7 @@ public function testIsA() 'address', 'article', 'aside', + 'audio', 'blockquote', 'canvas', 'dd', @@ -421,7 +422,7 @@ public function testIsA() 'table', 'tfoot', 'ul', - 'video', + 'video' ); foreach ($blockTags as $tag) { @@ -431,7 +432,7 @@ public function testIsA() $nonBlockTags = array( 'span', 'img', - 'label', + 'label' ); foreach ($nonBlockTags as $tag) { $this->assertFalse(Elements::isA($tag, Elements::BLOCK_TAG), 'Block tag test failed on: ' . $tag); @@ -446,7 +447,7 @@ public function testNormalizeSvgElement() 'BAR' => 'bar', 'fespecularlighting' => 'feSpecularLighting', 'bAz' => 'baz', - 'foreignobject' => 'foreignObject', + 'foreignobject' => 'foreignObject' ); foreach ($tests as $input => $expected) { @@ -462,7 +463,7 @@ public function testNormalizeSvgAttribute() 'BAR' => 'bar', 'limitingconeangle' => 'limitingConeAngle', 'bAz' => 'baz', - 'patterncontentunits' => 'patternContentUnits', + 'patterncontentunits' => 'patternContentUnits' ); foreach ($tests as $input => $expected) { @@ -475,7 +476,7 @@ public function testNormalizeMathMlAttribute() $tests = array( 'foo' => 'foo', 'definitionurl' => 'definitionURL', - 'BAR' => 'bar', + 'BAR' => 'bar' ); foreach ($tests as $input => $expected) { diff --git a/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html b/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html deleted file mode 100644 index fa5a029ce1bbcbced8154472931601deaa3bffa2..0000000000000000000000000000000000000000 --- a/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html +++ /dev/null @@ -1,9 +0,0 @@ -<!doctype html> -<html> -<head> - <meta http-equiv="content-type" content="text/html;charset=utf-8" /> -</head> -<body> - <p>Žťčýů</p> -</body> -</html> diff --git a/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html b/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html deleted file mode 100644 index f0132da5dee7442ad786dd341fadddf6b0baab38..0000000000000000000000000000000000000000 --- a/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html +++ /dev/null @@ -1,9 +0,0 @@ -<!doctype html> -<html> -<head> - <meta http-equiv="content-type" content="text/html;charset=windows-1252"> -</head> -<body> - <p>�����</p> -</body> -</html> diff --git a/vendor/masterminds/html5/test/HTML5/Html5Test.php b/vendor/masterminds/html5/test/HTML5/Html5Test.php index 26d52fee17459e8e64986a971336fcd62aa74e3c..77643c4a9ad53f79535403d9d4aa2135a4cb4d9f 100644 --- a/vendor/masterminds/html5/test/HTML5/Html5Test.php +++ b/vendor/masterminds/html5/test/HTML5/Html5Test.php @@ -1,15 +1,8 @@ <?php - namespace Masterminds\HTML5\Tests; -use Masterminds\HTML5; - class Html5Test extends TestCase { - /** - * @var HTML5 - */ - private $html5; public function setUp() { @@ -35,19 +28,20 @@ protected function cycleFragment($fragment) return $out; } + public function testImageTagsInSvg() { - $html = '<!DOCTYPE html> + $html = "<!DOCTYPE html> <html> <head> <title>foo</title> </head> <body> <svg> - <image height="10" width="10"></image> + <image height=\"10\" width=\"10\"></image> </svg> </body> - </html>'; + </html>"; $doc = $this->html5->loadHTML($html); $this->assertInstanceOf('DOMElement', $doc->getElementsByTagName('image')->item(0)); $this->assertEmpty($this->html5->getErrors()); @@ -57,57 +51,30 @@ public function testLoadOptions() { // doc $dom = $this->html5->loadHTML($this->wrap('<t:tag/>'), array( - 'implicitNamespaces' => array('t' => 'http://example.com'), - 'xmlNamespaces' => true, + 'implicitNamespaces' => array('t' => 'http://example.com'), + "xmlNamespaces" => true )); $this->assertInstanceOf('\DOMDocument', $dom); $this->assertEmpty($this->html5->getErrors()); $this->assertFalse($this->html5->hasErrors()); - $xpath = new \DOMXPath($dom); - $xpath->registerNamespace('t', 'http://example.com'); - $this->assertEquals(1, $xpath->query('//t:tag')->length); + $xpath = new \DOMXPath( $dom ); + $xpath->registerNamespace( "t", "http://example.com" ); + $this->assertEquals(1, $xpath->query( "//t:tag" )->length); // doc fragment $frag = $this->html5->loadHTMLFragment('<t:tag/>', array( - 'implicitNamespaces' => array('t' => 'http://example.com'), - 'xmlNamespaces' => true, + 'implicitNamespaces' => array('t' => 'http://example.com'), + "xmlNamespaces" => true )); $this->assertInstanceOf('\DOMDocumentFragment', $frag); $this->assertEmpty($this->html5->getErrors()); $this->assertFalse($this->html5->hasErrors()); $frag->ownerDocument->appendChild($frag); - $xpath = new \DOMXPath($frag->ownerDocument); - $xpath->registerNamespace('t', 'http://example.com'); - $this->assertEquals(1, $xpath->query('//t:tag', $frag)->length); - } - - public function testEncodingUtf8() - { - $dom = $this->html5->load(__DIR__ . '/Fixtures/encoding/utf-8.html'); - $this->assertInstanceOf('\DOMDocument', $dom); - $this->assertEmpty($this->html5->getErrors()); - $this->assertFalse($this->html5->hasErrors()); - - $this->assertContains('Žťčýů', $dom->saveHTML()); - } - - public function testEncodingWindows1252() - { - $dom = $this->html5->load(__DIR__ . '/Fixtures/encoding/windows-1252.html', array( - 'encoding' => 'Windows-1252', - )); - - $this->assertInstanceOf('\DOMDocument', $dom); - $this->assertEmpty($this->html5->getErrors()); - $this->assertFalse($this->html5->hasErrors()); - - $dumpedAsUtf8 = mb_convert_encoding($dom->saveHTML(), 'UTF-8', 'Windows-1252'); - $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'Ž')); - $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'è')); - $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'ý')); - $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'ù')); + $xpath = new \DOMXPath( $frag->ownerDocument ); + $xpath->registerNamespace( "t", "http://example.com" ); + $this->assertEquals(1, $xpath->query( "//t:tag" , $frag)->length); } public function testErrors() @@ -195,11 +162,11 @@ public function testSave() // Test resource $file = fopen('php://temp', 'w'); $this->html5->save($dom, $file); - $content = stream_get_contents($file, -1, 0); + $content = stream_get_contents($file, - 1, 0); $this->assertRegExp('|<p>This is a test.</p>|', $content); // Test file - $tmpfname = tempnam(sys_get_temp_dir(), 'html5-php'); + $tmpfname = tempnam(sys_get_temp_dir(), "html5-php"); $this->html5->save($dom, $tmpfname); $content = file_get_contents($tmpfname); $this->assertRegExp('|<p>This is a test.</p>|', $content); @@ -230,7 +197,7 @@ public function testConfig() $html5 = $this->getInstance(array( 'foo' => 'bar', - 'encode_entities' => true, + 'encode_entities' => true )); $options = $html5->getOptions(); $this->assertEquals('bar', $options['foo']); @@ -266,11 +233,11 @@ public function testSvg() $list = $dom->getElementsByTagName('svg'); $this->assertNotEmpty($list->length); $svg = $list->item(0); - $this->assertEquals('0 0 3 2', $svg->getAttribute('viewBox')); + $this->assertEquals("0 0 3 2", $svg->getAttribute('viewBox')); $this->assertFalse($svg->hasAttribute('viewbox')); // Test a mixed case tag. - // Note: getElementsByTagName is not case sensitive. + // Note: getElementsByTagName is not case sensetitive. $list = $dom->getElementsByTagName('textPath'); $this->assertNotEmpty($list->length); $textPath = $list->item(0); @@ -325,12 +292,12 @@ public function testUnknownElements() // they are handled as normal elements. Note, to do this is really // an invalid example and you should not embed prefixed xml in html5. $dom = $this->html5->loadHTMLFragment( - '<f:rug> + "<f:rug> <f:name>Big rectangle thing</f:name> <f:width>40</f:width> <f:length>80</f:length> </f:rug> - <sarcasm>um, yeah</sarcasm>'); + <sarcasm>um, yeah</sarcasm>"); $this->assertEmpty($this->html5->getErrors()); $markup = $this->html5->saveHTML($dom); @@ -456,7 +423,7 @@ public function testCaseSensitiveTags() $dom = $this->html5->loadHTML( '<html><body><Button color="red">Error</Button></body></html>', array( - 'xmlNamespaces' => true, + "xmlNamespaces" => true ) ); $out = $this->html5->saveHTML($dom); diff --git a/vendor/masterminds/html5/test/HTML5/Parser/CharacterReferenceTest.php b/vendor/masterminds/html5/test/HTML5/Parser/CharacterReferenceTest.php index a5eee73c893057d22fe0af8029a362146934e95c..762bcc2610479a91e1e93a8b973c4ab4c8fd8355 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/CharacterReferenceTest.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/CharacterReferenceTest.php @@ -3,13 +3,13 @@ * @file * Test the Scanner. This requires the InputStream tests are all good. */ - namespace Masterminds\HTML5\Tests\Parser; use Masterminds\HTML5\Parser\CharacterReference; class CharacterReferenceTest extends \Masterminds\HTML5\Tests\TestCase { + public function testLookupName() { $this->assertEquals('&', CharacterReference::lookupName('amp')); diff --git a/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php b/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php index b5940c23a9d4680af9fb132dd4148943b62a2da6..a441af837f342dc33acc945d3dfec8f520a7075d 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php @@ -3,9 +3,9 @@ * @file * Test the Tree Builder. */ - namespace Masterminds\HTML5\Tests\Parser; +use Masterminds\HTML5\Parser\StringInputStream; use Masterminds\HTML5\Parser\Scanner; use Masterminds\HTML5\Parser\Tokenizer; use Masterminds\HTML5\Parser\DOMTreeBuilder; @@ -16,14 +16,14 @@ class DOMTreeBuilderTest extends \Masterminds\HTML5\Tests\TestCase { protected $errors = array(); - /** * Convenience function for parsing. */ protected function parse($string, array $options = array()) { $treeBuilder = new DOMTreeBuilder(false, $options); - $scanner = new Scanner($string); + $input = new StringInputStream($string); + $scanner = new Scanner($input); $parser = new Tokenizer($scanner, $treeBuilder); $parser->parse(); @@ -38,7 +38,8 @@ protected function parse($string, array $options = array()) protected function parseFragment($string) { $treeBuilder = new DOMTreeBuilder(true); - $scanner = new Scanner($string); + $input = new StringInputStream($string); + $scanner = new Scanner($input); $parser = new Tokenizer($scanner, $treeBuilder); $parser->parse(); @@ -49,10 +50,9 @@ protected function parseFragment($string) public function testDocument() { - $html = '<!DOCTYPE html><html></html>'; + $html = "<!DOCTYPE html><html></html>"; $doc = $this->parse($html); - $this->assertEquals('UTF-8', $doc->encoding); $this->assertInstanceOf('\DOMDocument', $doc); $this->assertEquals('html', $doc->documentElement->tagName); $this->assertEquals('http://www.w3.org/1999/xhtml', $doc->documentElement->namespaceURI); @@ -103,10 +103,9 @@ public function testBareAmpersandNotAllowedInAttributes() </body> </html>', $doc->saveXML()); } - public function testBareAmpersandNotAllowedInBody() { - $html = '<!doctype html> + $html = "<!doctype html> <html> <body> a&b @@ -116,7 +115,7 @@ public function testBareAmpersandNotAllowedInBody() a&+ a& -- valid </body> - </html>'; + </html>"; $doc = $this->parse($html); $this->assertCount(5, $this->errors); @@ -135,28 +134,28 @@ public function testBareAmpersandNotAllowedInBody() public function testStrangeCapitalization() { - $html = '<!doctype html> + $html = "<!doctype html> <html> <head> <Title>Hello, world!</TitlE> </head> <body>TheBody<script>foo</script></body> - </html>'; + </html>"; $doc = $this->parse($html); $this->assertInstanceOf('\DOMDocument', $doc); $this->assertEquals('html', $doc->documentElement->tagName); - $xpath = new \DOMXPath($doc); - $xpath->registerNamespace('x', 'http://www.w3.org/1999/xhtml'); + $xpath = new \DOMXPath( $doc ); + $xpath->registerNamespace( "x", "http://www.w3.org/1999/xhtml" ); - $this->assertEquals('Hello, world!', $xpath->query('//x:title')->item(0)->nodeValue); - $this->assertEquals('foo', $xpath->query('//x:script')->item(0)->nodeValue); + $this->assertEquals("Hello, world!", $xpath->query( "//x:title" )->item( 0 )->nodeValue); + $this->assertEquals("foo", $xpath->query( "//x:script" )->item( 0 )->nodeValue); } public function testDocumentWithDisabledNamespaces() { - $html = '<!DOCTYPE html><html></html>'; + $html = "<!DOCTYPE html><html></html>"; $doc = $this->parse($html, array('disable_html_ns' => true)); $this->assertInstanceOf('\DOMDocument', $doc); @@ -168,7 +167,7 @@ public function testDocumentWithATargetDocument() { $targetDom = new \DOMDocument(); - $html = '<!DOCTYPE html><html></html>'; + $html = "<!DOCTYPE html><html></html>"; $doc = $this->parse($html, array('target_document' => $targetDom)); $this->assertInstanceOf('\DOMDocument', $doc); @@ -178,16 +177,16 @@ public function testDocumentWithATargetDocument() public function testDocumentFakeAttrAbsence() { - $html = '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body>foo</body></html>'; - $doc = $this->parse($html, array('xmlNamespaces' => true)); + $html = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><body>foo</body></html>"; + $doc = $this->parse($html, array('xmlNamespaces'=>true)); $xp = new \DOMXPath($doc); - $this->assertEquals(0, $xp->query('//@html5-php-fake-id-attribute')->length); + $this->assertEquals(0, $xp->query("//@html5-php-fake-id-attribute")->length); } public function testFragment() { - $html = '<div>test</div><span>test2</span>'; + $html = "<div>test</div><span>test2</span>"; $doc = $this->parseFragment($html); $this->assertInstanceOf('\DOMDocumentFragment', $doc); @@ -200,7 +199,7 @@ public function testFragment() public function testElements() { - $html = '<!DOCTYPE html><html><head><title></title></head><body></body></html>'; + $html = "<!DOCTYPE html><html><head><title></title></head><body></body></html>"; $doc = $this->parse($html); $root = $doc->documentElement; @@ -236,8 +235,8 @@ public function testCustomImplicitNamespaces() { $dom = $this->parse('<!DOCTYPE html><html><body><a t:href="bar">foo</a></body></html>', array( 'implicitNamespaces' => array( - 't' => 'http://www.example.com', - ), + 't' => 'http://www.example.com' + ) )); $a = $dom->getElementsByTagName('a')->item(0); $attr = $a->getAttributeNode('t:href'); @@ -245,8 +244,8 @@ public function testCustomImplicitNamespaces() $dom = $this->parse('<!DOCTYPE html><html><body><t:a>foo</t:a></body></html>', array( 'implicitNamespaces' => array( - 't' => 'http://www.example.com', - ), + 't' => 'http://www.example.com' + ) )); $list = $dom->getElementsByTagNameNS('http://www.example.com', 'a'); $this->assertEquals(1, $list->length); @@ -261,7 +260,7 @@ public function testXmlNamespaces() </body> <div>foo</div> </html>', array( - 'xmlNamespaces' => true, + 'xmlNamespaces' => true )); $a = $dom->getElementsByTagName('a')->item(0); $attr = $a->getAttributeNode('t:href'); @@ -286,9 +285,10 @@ public function testXmlNamespaceNesting() <xn:d xmlns:xn="http://www.prefixed.com/xn" xmlns="http://www.prefixed.com/bar5_x" id="bar5"><x id="bar5_x"/></xn:d> </body> </html>', array( - 'xmlNamespaces' => true, + 'xmlNamespaces' => true )); + $this->assertEmpty($this->errors); $div = $dom->getElementById('div'); @@ -301,34 +301,34 @@ public function testXmlNamespaceNesting() $this->assertEquals('http://www.prefixed.com/bar1', $bar1->namespaceURI); $bar2 = $dom->getElementById('bar2'); - $this->assertEquals('http://www.prefixed.com/bar2', $bar2->namespaceURI); + $this->assertEquals("http://www.prefixed.com/bar2", $bar2->namespaceURI); $bar3 = $dom->getElementById('bar3'); - $this->assertEquals('http://www.w3.org/1999/xhtml', $bar3->namespaceURI); + $this->assertEquals("http://www.w3.org/1999/xhtml", $bar3->namespaceURI); $bar4 = $dom->getElementById('bar4'); - $this->assertEquals('http://www.prefixed.com/bar4', $bar4->namespaceURI); + $this->assertEquals("http://www.prefixed.com/bar4", $bar4->namespaceURI); $svg = $dom->getElementById('svg'); - $this->assertEquals('http://www.w3.org/2000/svg', $svg->namespaceURI); + $this->assertEquals("http://www.w3.org/2000/svg", $svg->namespaceURI); $prefixed = $dom->getElementById('prefixed'); - $this->assertEquals('http://www.prefixed.com', $prefixed->namespaceURI); + $this->assertEquals("http://www.prefixed.com", $prefixed->namespaceURI); $prefixed = $dom->getElementById('bar5'); - $this->assertEquals('http://www.prefixed.com/xn', $prefixed->namespaceURI); + $this->assertEquals("http://www.prefixed.com/xn", $prefixed->namespaceURI); $prefixed = $dom->getElementById('bar5_x'); - $this->assertEquals('http://www.prefixed.com/bar5_x', $prefixed->namespaceURI); + $this->assertEquals("http://www.prefixed.com/bar5_x", $prefixed->namespaceURI); } public function testMoveNonInlineElements() { - $doc = $this->parse('<p>line1<br/><hr/>line2</p>'); - $this->assertEquals('<html xmlns="http://www.w3.org/1999/xhtml"><p>line1<br/></p><hr/>line2</html>', $doc->saveXML($doc->documentElement), 'Move non-inline elements outside of inline containers.'); + $doc = $this->parse('<p>line1<br/><hr/>line2</p>'); + $this->assertEquals('<html xmlns="http://www.w3.org/1999/xhtml"><p>line1<br/></p><hr/>line2</html>', $doc->saveXML($doc->documentElement), 'Move non-inline elements outside of inline containers.'); - $doc = $this->parse('<p>line1<div>line2</div></p>'); - $this->assertEquals('<html xmlns="http://www.w3.org/1999/xhtml"><p>line1</p><div>line2</div></html>', $doc->saveXML($doc->documentElement), 'Move non-inline elements outside of inline containers.'); + $doc = $this->parse('<p>line1<div>line2</div></p>'); + $this->assertEquals('<html xmlns="http://www.w3.org/1999/xhtml"><p>line1</p><div>line2</div></html>', $doc->saveXML($doc->documentElement), 'Move non-inline elements outside of inline containers.'); } public function testAttributes() @@ -398,7 +398,7 @@ public function testMathMLAttribute() public function testMissingHtmlTag() { - $html = '<!DOCTYPE html><title>test</title>'; + $html = "<!DOCTYPE html><title>test</title>"; $doc = $this->parse($html); $this->assertEquals('html', $doc->documentElement->tagName); @@ -413,23 +413,23 @@ public function testComment() $comment = $doc->documentElement->childNodes->item(0); $this->assertEquals(XML_COMMENT_NODE, $comment->nodeType); - $this->assertEquals('Hello World.', $comment->data); + $this->assertEquals("Hello World.", $comment->data); $html = '<!--Hello World.--><html></html>'; $doc = $this->parse($html); $comment = $doc->childNodes->item(1); $this->assertEquals(XML_COMMENT_NODE, $comment->nodeType); - $this->assertEquals('Hello World.', $comment->data); + $this->assertEquals("Hello World.", $comment->data); $comment = $doc->childNodes->item(2); $this->assertEquals(XML_ELEMENT_NODE, $comment->nodeType); - $this->assertEquals('html', $comment->tagName); + $this->assertEquals("html", $comment->tagName); } public function testCDATA() { - $html = '<!DOCTYPE html><html><math><![CDATA[test]]></math></html>'; + $html = "<!DOCTYPE html><html><math><![CDATA[test]]></math></html>"; $doc = $this->parse($html); $wrapper = $doc->getElementsByTagName('math')->item(0); @@ -441,7 +441,7 @@ public function testCDATA() public function testText() { - $html = '<!DOCTYPE html><html><head></head><body><math>test</math></body></html>'; + $html = "<!DOCTYPE html><html><head></head><body><math>test</math></body></html>"; $doc = $this->parse($html); $wrapper = $doc->getElementsByTagName('math')->item(0); @@ -451,8 +451,8 @@ public function testText() $this->assertEquals('test', $data->data); // The DomTreeBuilder has special handling for text when in before head mode. - $html = '<!DOCTYPE html><html> - Foo<head></head><body></body></html>'; + $html = "<!DOCTYPE html><html> + Foo<head></head><body></body></html>"; $doc = $this->parse($html); $this->assertEquals('Line 0, Col 0: Unexpected text. Ignoring: Foo', $this->errors[0]); $headElement = $doc->documentElement->firstChild; @@ -461,7 +461,7 @@ public function testText() public function testParseErrors() { - $html = '<!DOCTYPE html><html><math><![CDATA[test'; + $html = "<!DOCTYPE html><html><math><![CDATA[test"; $doc = $this->parse($html); // We're JUST testing that we can access errors. Actual testing of @@ -490,7 +490,7 @@ public function testProcessingInstruction() public function testAutocloseP() { - $html = '<!DOCTYPE html><html><body><p><figure></body></html>'; + $html = "<!DOCTYPE html><html><body><p><figure></body></html>"; $doc = $this->parse($html); $p = $doc->getElementsByTagName('p')->item(0); @@ -578,7 +578,7 @@ public function testNoScript() } /** - * Regression for issue #13. + * Regression for issue #13 */ public function testRegressionHTMLNoBody() { @@ -600,7 +600,8 @@ public function testInstructionProcessor() $is = new InstructionProcessorMock(); $treeBuilder->setInstructionProcessor($is); - $scanner = new Scanner($string); + $input = new StringInputStream($string); + $scanner = new Scanner($input); $parser = new Tokenizer($scanner, $treeBuilder); $parser->parse(); @@ -637,74 +638,9 @@ public function testSelectGroupedOptions() </body> </html> EOM; - $dom = $this->parse($html); + $dom = $this->parse($html); $this->assertSame(3, $dom->getElementById('first')->getElementsByTagName('option')->length); $this->assertSame(2, $dom->getElementById('second')->getElementsByTagName('option')->length); } - - public function testVoidTag() - { - $html = <<<EOM -<!DOCTYPE html> -<html> - <head> - <title>testVoidTag</title> - <meta> - <meta> - </head> - <body></body> -</html> -EOM; - - $dom = $this->parse($html); - $this->assertSame(2, $dom->getElementsByTagName('meta')->length); - $this->assertSame(0, $dom->getElementsByTagName('meta')->item(0)->childNodes->length); - $this->assertSame(0, $dom->getElementsByTagName('meta')->item(1)->childNodes->length); - } - - public function testIgnoreSelfClosingTag() - { - $html = <<<EOM -<!DOCTYPE html> -<html> - <head> - <title>testIllegalSelfClosingTag</title> - </head> - <body> - <div /><span>Hello, World!</span></div> - </body> -</html> -EOM; - - $dom = $this->parse($html); - $this->assertSame(1, $dom->getElementsByTagName('div')->item(0)->childNodes->length); - } - - public function testIAudioInParagraph() - { - $html = <<<EOM -<!DOCTYPE html> -<html> - <head> - <title>testIllegalSelfClosingTag</title> - </head> - <body> - <p> - <audio preload="none" controls="controls"> - <source src="https://example.com/test.mp3" type="audio/mpeg" /> - Your browser does not support the audio element. - </audio> - </p> - </body> -</html>> -</html> -EOM; - - $dom = $this->parse($html); - $audio = $dom->getElementsByTagName('audio')->item(0); - - $this->assertSame('p', $audio->parentNode->nodeName); - $this->assertSame(3, $audio->childNodes->length); - } } diff --git a/vendor/masterminds/html5/test/HTML5/Parser/EventStack.php b/vendor/masterminds/html5/test/HTML5/Parser/EventStack.php index 3d1de7708400324820fd4408802234a77345873b..60e2abe9bf783bc8bc13fe9e376d1d7be6378e41 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/EventStack.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/EventStack.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Tests\Parser; use Masterminds\HTML5\Elements; @@ -17,6 +16,7 @@ */ class EventStack implements EventHandler { + protected $stack; public function __construct() @@ -46,7 +46,7 @@ protected function store($event, $data = null) { $this->stack[] = array( 'name' => $event, - 'data' => $data, + 'data' => $data ); } @@ -56,7 +56,7 @@ public function doctype($name, $type = 0, $id = null, $quirks = false) $name, $type, $id, - $quirks, + $quirks ); $this->store('doctype', $args); } @@ -65,7 +65,7 @@ public function startTag($name, $attributes = array(), $selfClosing = false) { $args = func_get_args(); $this->store('startTag', $args); - if ('pre' == $name || 'script' == $name) { + if ($name == 'pre' || $name == 'script') { return Elements::TEXT_RAW; } } @@ -73,14 +73,14 @@ public function startTag($name, $attributes = array(), $selfClosing = false) public function endTag($name) { $this->store('endTag', array( - $name, + $name )); } public function comment($cdata) { $this->store('comment', array( - $cdata, + $cdata )); } @@ -93,7 +93,7 @@ public function text($cdata) { // fprintf(STDOUT, "Received TEXT event with: " . $cdata); $this->store('text', array( - $cdata, + $cdata )); } diff --git a/vendor/masterminds/html5/test/HTML5/Parser/EventStackError.php b/vendor/masterminds/html5/test/HTML5/Parser/EventStackError.php index 05c0a498f26ecaf674800a84d26fe8bdc279d12c..e58fdff2652cef11bb85f1af389b800fdf28fcfa 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/EventStackError.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/EventStackError.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Tests\Parser; class EventStackError extends \Exception diff --git a/vendor/masterminds/html5/test/HTML5/Parser/FileInputStreamTest.html b/vendor/masterminds/html5/test/HTML5/Parser/FileInputStreamTest.html new file mode 100644 index 0000000000000000000000000000000000000000..a976e8be9f7bc6114a6b15c72860db1c89e9723d --- /dev/null +++ b/vendor/masterminds/html5/test/HTML5/Parser/FileInputStreamTest.html @@ -0,0 +1,10 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Test</title> + </head> + <body> + <p>This is a test.</p> + </body> +</html> \ No newline at end of file diff --git a/vendor/masterminds/html5/test/HTML5/Parser/FileInputStreamTest.php b/vendor/masterminds/html5/test/HTML5/Parser/FileInputStreamTest.php new file mode 100644 index 0000000000000000000000000000000000000000..71dd828c44cbaf0e1596182c28aaba0aad43593a --- /dev/null +++ b/vendor/masterminds/html5/test/HTML5/Parser/FileInputStreamTest.php @@ -0,0 +1,195 @@ +<?php +namespace Masterminds\HTML5\Tests\Parser; + +use Masterminds\HTML5\Parser\FileInputStream; + +class FileInputStreamTest extends \Masterminds\HTML5\Tests\TestCase +{ + + public function testConstruct() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertInstanceOf('\Masterminds\HTML5\Parser\FileInputStream', $s); + } + + public function testNext() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $s->next(); + $this->assertEquals('!', $s->current()); + $s->next(); + $this->assertEquals('d', $s->current()); + } + + public function testKey() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals(0, $s->key()); + + $s->next(); + $this->assertEquals(1, $s->key()); + } + + public function testPeek() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('!', $s->peek()); + + $s->next(); + $this->assertEquals('d', $s->peek()); + } + + public function testCurrent() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('<', $s->current()); + + $s->next(); + $this->assertEquals('!', $s->current()); + + $s->next(); + $this->assertEquals('d', $s->current()); + } + + public function testColumnOffset() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + $this->assertEquals(0, $s->columnOffset()); + $s->next(); + $this->assertEquals(1, $s->columnOffset()); + $s->next(); + $this->assertEquals(2, $s->columnOffset()); + $s->next(); + $this->assertEquals(3, $s->columnOffset()); + + // Make sure we get to the second line + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $this->assertEquals(0, $s->columnOffset()); + + $s->next(); + $canary = $s->current(); // h + $this->assertEquals('h', $canary); + $this->assertEquals(1, $s->columnOffset()); + } + + public function testCurrentLine() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals(1, $s->currentLine()); + + // Make sure we get to the second line + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $this->assertEquals(2, $s->currentLine()); + + // Make sure we get to the third line + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $s->next(); + $this->assertEquals(3, $s->currentLine()); + } + + public function testRemainingChars() + { + $text = file_get_contents(__DIR__ . '/FileInputStreamTest.html'); + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + $this->assertEquals($text, $s->remainingChars()); + + $text = substr(file_get_contents(__DIR__ . '/FileInputStreamTest.html'), 1); + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + $s->next(); // Pop one. + $this->assertEquals($text, $s->remainingChars()); + } + + public function testCharsUnitl() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('', $s->charsUntil('<')); + // Pointer at '<', moves to ' ' + $this->assertEquals('<!doctype', $s->charsUntil(' ', 20)); + + // Pointer at ' ', moves to '>' + $this->assertEquals(' html', $s->charsUntil('>')); + + // Pointer at '>', moves to '\n'. + $this->assertEquals('>', $s->charsUntil("\n")); + + // Pointer at '\n', move forward then to the next'\n'. + $s->next(); + $this->assertEquals('<html lang="en">', $s->charsUntil("\n")); + + // Ony get one of the spaces. + $this->assertEquals("\n ", $s->charsUntil('<', 2)); + + // Get the other space. + $this->assertEquals(" ", $s->charsUntil('<')); + + // This should scan to the end of the file. + $text = "<head> + <meta charset=\"utf-8\"> + <title>Test</title> + </head> + <body> + <p>This is a test.</p> + </body> +</html>"; + $this->assertEquals($text, $s->charsUntil("\t")); + } + + public function testCharsWhile() + { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('<!', $s->charsWhile('!<')); + $this->assertEquals('', $s->charsWhile('>')); + $this->assertEquals('doctype', $s->charsWhile('odcyept')); + $this->assertEquals(' htm', $s->charsWhile('html ', 4)); + } +} diff --git a/vendor/masterminds/html5/test/HTML5/Parser/InstructionProcessorMock.php b/vendor/masterminds/html5/test/HTML5/Parser/InstructionProcessorMock.php index 4637a802c9d0a6f6cd65e17c76be61a40476b548..32a2204826ea256f4cfae88cff33a540a4183bba 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/InstructionProcessorMock.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/InstructionProcessorMock.php @@ -1,9 +1,9 @@ <?php - namespace Masterminds\HTML5\Tests\Parser; class InstructionProcessorMock implements \Masterminds\HTML5\InstructionProcessor { + public $name = null; public $data = null; @@ -14,9 +14,9 @@ public function process(\DOMElement $element, $name, $data) { $this->name = $name; $this->data = $data; - ++$this->count; + $this->count ++; - $div = $element->ownerDocument->createElement('div'); + $div = $element->ownerDocument->createElement("div"); $div->nodeValue = 'foo'; $element->appendChild($div); diff --git a/vendor/masterminds/html5/test/HTML5/Parser/ScannerTest.php b/vendor/masterminds/html5/test/HTML5/Parser/ScannerTest.php index 9f75c4dbaedefb512d5568ff28d5d3d627b4c0a5..8fa5110686f18973d09e47085e31b112d3004e62 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/ScannerTest.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/ScannerTest.php @@ -3,7 +3,6 @@ * @file * Test the Scanner. This requires the InputStream tests are all good. */ - namespace Masterminds\HTML5\Tests\Parser; use Masterminds\HTML5\Parser\StringInputStream; @@ -11,33 +10,21 @@ class ScannerTest extends \Masterminds\HTML5\Tests\TestCase { + /** * A canary test to make sure the basics are setup and working. */ - public function testConstructDeprecated() + public function testConstruct() { - $is = new StringInputStream('abc'); + $is = new StringInputStream("abc"); $s = new Scanner($is); $this->assertInstanceOf('\Masterminds\HTML5\Parser\Scanner', $s); } - public function testConstruct() - { - $this->assertInstanceOf('\Masterminds\HTML5\Parser\Scanner', new Scanner('abc')); - } - - public function testNextDeprecated() - { - $s = new Scanner(new StringInputStream('abc')); - - $this->assertEquals('b', $s->next()); - $this->assertEquals('c', $s->next()); - } - public function testNext() { - $s = new Scanner('abc'); + $s = new Scanner(new StringInputStream("abc")); $this->assertEquals('b', $s->next()); $this->assertEquals('c', $s->next()); @@ -45,7 +32,7 @@ public function testNext() public function testPosition() { - $s = new Scanner('abc'); + $s = new Scanner(new StringInputStream("abc")); $this->assertEquals(0, $s->position()); @@ -55,7 +42,7 @@ public function testPosition() public function testPeek() { - $s = new Scanner('abc'); + $s = new Scanner(new StringInputStream("abc")); $this->assertEquals('b', $s->peek()); @@ -65,7 +52,7 @@ public function testPeek() public function testCurrent() { - $s = new Scanner('abc'); + $s = new Scanner(new StringInputStream("abc")); // Before scanning the string begins the current is empty. $this->assertEquals('a', $s->current()); @@ -80,7 +67,7 @@ public function testCurrent() public function testUnconsume() { - $s = new Scanner('abcdefghijklmnopqrst'); + $s = new Scanner(new StringInputStream("abcdefghijklmnopqrst")); // Get initial position. $s->next(); @@ -88,7 +75,7 @@ public function testUnconsume() // Move forward a bunch of positions. $amount = 7; - for ($i = 0; $i < $amount; ++$i) { + for ($i = 0; $i < $amount; $i ++) { $s->next(); } @@ -100,7 +87,7 @@ public function testUnconsume() public function testGetHex() { - $s = new Scanner('ab13ck45DE*'); + $s = new Scanner(new StringInputStream("ab13ck45DE*")); $this->assertEquals('ab13c', $s->getHex()); @@ -110,7 +97,7 @@ public function testGetHex() public function testGetAsciiAlpha() { - $s = new Scanner('abcdef1%mnop*'); + $s = new Scanner(new StringInputStream("abcdef1%mnop*")); $this->assertEquals('abcdef', $s->getAsciiAlpha()); @@ -122,7 +109,7 @@ public function testGetAsciiAlpha() public function testGetAsciiAlphaNum() { - $s = new Scanner('abcdef1ghpo#mn94op'); + $s = new Scanner(new StringInputStream("abcdef1ghpo#mn94op")); $this->assertEquals('abcdef1ghpo', $s->getAsciiAlphaNum()); @@ -133,7 +120,7 @@ public function testGetAsciiAlphaNum() public function testGetNumeric() { - $s = new Scanner('1784a 45 9867 #'); + $s = new Scanner(new StringInputStream("1784a 45 9867 #")); $this->assertEquals('1784', $s->getNumeric()); @@ -145,7 +132,7 @@ public function testGetNumeric() public function testCurrentLine() { - $s = new Scanner("1784a\n45\n9867 #\nThis is a test."); + $s = new Scanner(new StringInputStream("1784a\n45\n9867 #\nThis is a test.")); $this->assertEquals(1, $s->currentLine()); @@ -157,7 +144,7 @@ public function testCurrentLine() public function testColumnOffset() { - $s = new Scanner("1784a a\n45 9867 #\nThis is a test."); + $s = new Scanner(new StringInputStream("1784a a\n45 9867 #\nThis is a test.")); // Move the pointer to the space. $s->getAsciiAlphaNum(); @@ -176,7 +163,7 @@ public function testColumnOffset() public function testRemainingChars() { $string = "\n45\n9867 #\nThis is a test."; - $s = new Scanner("1784a\n45\n9867 #\nThis is a test."); + $s = new Scanner(new StringInputStream("1784a\n45\n9867 #\nThis is a test.")); $s->getAsciiAlphaNum(); $this->assertEquals($string, $s->remainingChars()); diff --git a/vendor/masterminds/html5/test/HTML5/Parser/StringInputStreamTest.php b/vendor/masterminds/html5/test/HTML5/Parser/StringInputStreamTest.php new file mode 100644 index 0000000000000000000000000000000000000000..f87cc10664b166b994c31a5b987cc2a026d6af57 --- /dev/null +++ b/vendor/masterminds/html5/test/HTML5/Parser/StringInputStreamTest.php @@ -0,0 +1,327 @@ +<?php +namespace Masterminds\HTML5\Tests\Parser; + +use Masterminds\HTML5\Parser\StringInputStream; + +class StringInputStreamTest extends \Masterminds\HTML5\Tests\TestCase +{ + + /** + * A canary test to make sure the basics are setup and working. + */ + public function testConstruct() + { + $s = new StringInputStream("abc"); + + $this->assertInstanceOf('\Masterminds\HTML5\Parser\StringInputStream', $s); + } + + public function testNext() + { + $s = new StringInputStream("abc"); + + $s->next(); + $this->assertEquals('b', $s->current()); + $s->next(); + $this->assertEquals('c', $s->current()); + } + + public function testKey() + { + $s = new StringInputStream("abc"); + + $this->assertEquals(0, $s->key()); + + $s->next(); + $this->assertEquals(1, $s->key()); + } + + public function testPeek() + { + $s = new StringInputStream("abc"); + + $this->assertEquals('b', $s->peek()); + + $s->next(); + $this->assertEquals('c', $s->peek()); + } + + public function testCurrent() + { + $s = new StringInputStream("abc"); + + // Before scanning the string begins the current is empty. + $this->assertEquals('a', $s->current()); + + $s->next(); + $this->assertEquals('b', $s->current()); + + // Test movement through the string. + $s->next(); + $this->assertEquals('c', $s->current()); + } + + public function testColumnOffset() + { + $s = new StringInputStream("abc\ndef\n"); + $this->assertEquals(0, $s->columnOffset()); + $s->next(); + $this->assertEquals(1, $s->columnOffset()); + $s->next(); + $this->assertEquals(2, $s->columnOffset()); + $s->next(); + $this->assertEquals(3, $s->columnOffset()); + $s->next(); // LF + $this->assertEquals(0, $s->columnOffset()); + $s->next(); + $canary = $s->current(); // e + $this->assertEquals('e', $canary); + $this->assertEquals(1, $s->columnOffset()); + + $s = new StringInputStream("abc"); + $this->assertEquals(0, $s->columnOffset()); + $s->next(); + $this->assertEquals(1, $s->columnOffset()); + $s->next(); + $this->assertEquals(2, $s->columnOffset()); + } + + public function testCurrentLine() + { + $txt = "1\n2\n\n\n\n3"; + $stream = new StringInputStream($txt); + $this->assertEquals(1, $stream->currentLine()); + + // Advance over 1 and LF on to line 2 value 2. + $stream->next(); + $stream->next(); + $canary = $stream->current(); + $this->assertEquals(2, $stream->currentLine()); + $this->assertEquals('2', $canary); + + // Advance over 4x LF + $stream->next(); + $stream->next(); + $stream->next(); + $stream->next(); + $stream->next(); + $this->assertEquals(6, $stream->currentLine()); + $this->assertEquals('3', $stream->current()); + + // Make sure it doesn't do 7. + $this->assertEquals(6, $stream->currentLine()); + } + + public function testRemainingChars() + { + $text = "abcd"; + $s = new StringInputStream($text); + $this->assertEquals($text, $s->remainingChars()); + + $text = "abcd"; + $s = new StringInputStream($text); + $s->next(); // Pop one. + $this->assertEquals('bcd', $s->remainingChars()); + } + + public function testCharsUnitl() + { + $text = "abcdefffffffghi"; + $s = new StringInputStream($text); + $this->assertEquals('', $s->charsUntil('a')); + // Pointer at 'a', moves 2 to 'c' + $this->assertEquals('ab', $s->charsUntil('w', 2)); + + // Pointer at 'c', moves to first 'f' + $this->assertEquals('cde', $s->charsUntil('fzxv')); + + // Only get five 'f's + $this->assertEquals('fffff', $s->charsUntil('g', 5)); + + // Get just the last two 'f's + $this->assertEquals('ff', $s->charsUntil('g')); + + // This should scan to the end. + $this->assertEquals('ghi', $s->charsUntil('w', 9)); + } + + public function testCharsWhile() + { + $text = "abcdefffffffghi"; + $s = new StringInputStream($text); + + $this->assertEquals('ab', $s->charsWhile('ba')); + + $this->assertEquals('', $s->charsWhile('a')); + $this->assertEquals('cde', $s->charsWhile('cdeba')); + $this->assertEquals('ff', $s->charsWhile('f', 2)); + $this->assertEquals('fffff', $s->charsWhile('f')); + $this->assertEquals('g', $s->charsWhile('fg')); + $this->assertEquals('hi', $s->charsWhile('fghi', 99)); + } + + public function testBOM() + { + // Ignore in-text BOM. + $stream = new StringInputStream("a\xEF\xBB\xBF"); + $this->assertEquals("a\xEF\xBB\xBF", $stream->remainingChars(), 'A non-leading U+FEFF (BOM/ZWNBSP) should remain'); + + // Strip leading BOM + $leading = new StringInputStream("\xEF\xBB\xBFa"); + $this->assertEquals('a', $leading->current(), 'BOM should be stripped'); + } + + public function testCarriageReturn() + { + // Replace NULL with Unicode replacement. + $stream = new StringInputStream("\0\0\0"); + $this->assertEquals("\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD", $stream->remainingChars(), 'Null character should be replaced by U+FFFD'); + $this->assertEquals(3, count($stream->errors), 'Null character should set parse error: ' . print_r($stream->errors, true)); + + // Remove CR when next to LF. + $stream = new StringInputStream("\r\n"); + $this->assertEquals("\n", $stream->remainingChars(), 'CRLF should be replaced by LF'); + + // Convert CR to LF when on its own. + $stream = new StringInputStream("\r"); + $this->assertEquals("\n", $stream->remainingChars(), 'CR should be replaced by LF'); + } + + public function invalidParseErrorTestHandler($input, $numErrors, $name) + { + $stream = new StringInputStream($input, 'UTF-8'); + $this->assertEquals($input, $stream->remainingChars(), $name . ' (stream content)'); + $this->assertEquals($numErrors, count($stream->errors), $name . ' (number of errors)'); + } + + public function testInvalidReplace() + { + $invalidTest = array( + + // Min/max overlong + "\xC0\x80a" => 'Overlong representation of U+0000', + "\xE0\x80\x80a" => 'Overlong representation of U+0000', + "\xF0\x80\x80\x80a" => 'Overlong representation of U+0000', + "\xF8\x80\x80\x80\x80a" => 'Overlong representation of U+0000', + "\xFC\x80\x80\x80\x80\x80a" => 'Overlong representation of U+0000', + "\xC1\xBFa" => 'Overlong representation of U+007F', + "\xE0\x9F\xBFa" => 'Overlong representation of U+07FF', + "\xF0\x8F\xBF\xBFa" => 'Overlong representation of U+FFFF', + + "a\xDF" => 'Incomplete two byte sequence (missing final byte)', + "a\xEF\xBF" => 'Incomplete three byte sequence (missing final byte)', + "a\xF4\xBF\xBF" => 'Incomplete four byte sequence (missing final byte)', + + // Min/max continuation bytes + "a\x80" => 'Lone 80 continuation byte', + "a\xBF" => 'Lone BF continuation byte', + + // Invalid bytes (these can never occur) + "a\xFE" => 'Invalid FE byte', + "a\xFF" => 'Invalid FF byte' + ); + foreach ($invalidTest as $test => $note) { + $stream = new StringInputStream($test); + $this->assertEquals('a', $stream->remainingChars(), $note); + } + + // MPB: + // It appears that iconv just leaves these alone. Not sure what to + // do. + /* + * $converted = array( "a\xF5\x90\x80\x80" => 'U+110000, off unicode planes.', ); foreach ($converted as $test => $note) { $stream = new StringInputStream($test); $this->assertEquals(2, mb_strlen($stream->remainingChars()), $note); } + */ + } + + public function testInvalidParseError() + { + // C0 controls (except U+0000 and U+000D due to different handling) + $this->invalidParseErrorTestHandler("\x01", 1, 'U+0001 (C0 control)'); + $this->invalidParseErrorTestHandler("\x02", 1, 'U+0002 (C0 control)'); + $this->invalidParseErrorTestHandler("\x03", 1, 'U+0003 (C0 control)'); + $this->invalidParseErrorTestHandler("\x04", 1, 'U+0004 (C0 control)'); + $this->invalidParseErrorTestHandler("\x05", 1, 'U+0005 (C0 control)'); + $this->invalidParseErrorTestHandler("\x06", 1, 'U+0006 (C0 control)'); + $this->invalidParseErrorTestHandler("\x07", 1, 'U+0007 (C0 control)'); + $this->invalidParseErrorTestHandler("\x08", 1, 'U+0008 (C0 control)'); + $this->invalidParseErrorTestHandler("\x09", 0, 'U+0009 (C0 control)'); + $this->invalidParseErrorTestHandler("\x0A", 0, 'U+000A (C0 control)'); + $this->invalidParseErrorTestHandler("\x0B", 1, 'U+000B (C0 control)'); + $this->invalidParseErrorTestHandler("\x0C", 0, 'U+000C (C0 control)'); + $this->invalidParseErrorTestHandler("\x0E", 1, 'U+000E (C0 control)'); + $this->invalidParseErrorTestHandler("\x0F", 1, 'U+000F (C0 control)'); + $this->invalidParseErrorTestHandler("\x10", 1, 'U+0010 (C0 control)'); + $this->invalidParseErrorTestHandler("\x11", 1, 'U+0011 (C0 control)'); + $this->invalidParseErrorTestHandler("\x12", 1, 'U+0012 (C0 control)'); + $this->invalidParseErrorTestHandler("\x13", 1, 'U+0013 (C0 control)'); + $this->invalidParseErrorTestHandler("\x14", 1, 'U+0014 (C0 control)'); + $this->invalidParseErrorTestHandler("\x15", 1, 'U+0015 (C0 control)'); + $this->invalidParseErrorTestHandler("\x16", 1, 'U+0016 (C0 control)'); + $this->invalidParseErrorTestHandler("\x17", 1, 'U+0017 (C0 control)'); + $this->invalidParseErrorTestHandler("\x18", 1, 'U+0018 (C0 control)'); + $this->invalidParseErrorTestHandler("\x19", 1, 'U+0019 (C0 control)'); + $this->invalidParseErrorTestHandler("\x1A", 1, 'U+001A (C0 control)'); + $this->invalidParseErrorTestHandler("\x1B", 1, 'U+001B (C0 control)'); + $this->invalidParseErrorTestHandler("\x1C", 1, 'U+001C (C0 control)'); + $this->invalidParseErrorTestHandler("\x1D", 1, 'U+001D (C0 control)'); + $this->invalidParseErrorTestHandler("\x1E", 1, 'U+001E (C0 control)'); + $this->invalidParseErrorTestHandler("\x1F", 1, 'U+001F (C0 control)'); + + // DEL (U+007F) + $this->invalidParseErrorTestHandler("\x7F", 1, 'U+007F'); + + // C1 Controls + $this->invalidParseErrorTestHandler("\xC2\x80", 1, 'U+0080 (C1 control)'); + $this->invalidParseErrorTestHandler("\xC2\x9F", 1, 'U+009F (C1 control)'); + $this->invalidParseErrorTestHandler("\xC2\xA0", 0, 'U+00A0 (first codepoint above highest C1 control)'); + + // Charcters surrounding surrogates + $this->invalidParseErrorTestHandler("\xED\x9F\xBF", 0, 'U+D7FF (one codepoint below lowest surrogate codepoint)'); + $this->invalidParseErrorTestHandler("\xEF\xBF\xBD", 0, 'U+DE00 (one codepoint above highest surrogate codepoint)'); + + // Permanent noncharacters + $this->invalidParseErrorTestHandler("\xEF\xB7\x90", 1, 'U+FDD0 (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xEF\xB7\xAF", 1, 'U+FDEF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xEF\xBF\xBE", 1, 'U+FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xEF\xBF\xBF", 1, 'U+FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF0\x9F\xBF\xBE", 1, 'U+1FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF0\x9F\xBF\xBF", 1, 'U+1FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF0\xAF\xBF\xBE", 1, 'U+2FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF0\xAF\xBF\xBF", 1, 'U+2FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF0\xBF\xBF\xBE", 1, 'U+3FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF0\xBF\xBF\xBF", 1, 'U+3FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\x8F\xBF\xBE", 1, 'U+4FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\x8F\xBF\xBF", 1, 'U+4FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\x9F\xBF\xBE", 1, 'U+5FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\x9F\xBF\xBF", 1, 'U+5FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\xAF\xBF\xBE", 1, 'U+6FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\xAF\xBF\xBF", 1, 'U+6FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\xBF\xBF\xBE", 1, 'U+7FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF1\xBF\xBF\xBF", 1, 'U+7FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\x8F\xBF\xBE", 1, 'U+8FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\x8F\xBF\xBF", 1, 'U+8FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\x9F\xBF\xBE", 1, 'U+9FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\x9F\xBF\xBF", 1, 'U+9FFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\xAF\xBF\xBE", 1, 'U+AFFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\xAF\xBF\xBF", 1, 'U+AFFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\xBF\xBF\xBE", 1, 'U+BFFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF2\xBF\xBF\xBF", 1, 'U+BFFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\x8F\xBF\xBE", 1, 'U+CFFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\x8F\xBF\xBF", 1, 'U+CFFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\x9F\xBF\xBE", 1, 'U+DFFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\x9F\xBF\xBF", 1, 'U+DFFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\xAF\xBF\xBE", 1, 'U+EFFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\xAF\xBF\xBF", 1, 'U+EFFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\xBF\xBF\xBE", 1, 'U+FFFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF3\xBF\xBF\xBF", 1, 'U+FFFFF (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF4\x8F\xBF\xBE", 1, 'U+10FFFE (permanent noncharacter)'); + $this->invalidParseErrorTestHandler("\xF4\x8F\xBF\xBF", 1, 'U+10FFFF (permanent noncharacter)'); + + // MPB: These pass on some versions of iconv, and fail on others. Since we aren't in the + // business of writing tests against iconv, I've just commented these out. Should revisit + // at a later point. + /* + * $this->invalidParseErrorTestHandler("\xED\xA0\x80", 1, 'U+D800 (UTF-16 surrogate character)'); $this->invalidParseErrorTestHandler("\xED\xAD\xBF", 1, 'U+DB7F (UTF-16 surrogate character)'); $this->invalidParseErrorTestHandler("\xED\xAE\x80", 1, 'U+DB80 (UTF-16 surrogate character)'); $this->invalidParseErrorTestHandler("\xED\xAF\xBF", 1, 'U+DBFF (UTF-16 surrogate character)'); $this->invalidParseErrorTestHandler("\xED\xB0\x80", 1, 'U+DC00 (UTF-16 surrogate character)'); $this->invalidParseErrorTestHandler("\xED\xBE\x80", 1, 'U+DF80 (UTF-16 surrogate character)'); $this->invalidParseErrorTestHandler("\xED\xBF\xBF", 1, 'U+DFFF (UTF-16 surrogate character)'); // Paired UTF-16 surrogates $this->invalidParseErrorTestHandler("\xED\xA0\x80\xED\xB0\x80", 2, 'U+D800 U+DC00 (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xA0\x80\xED\xBF\xBF", 2, 'U+D800 U+DFFF (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xAD\xBF\xED\xB0\x80", 2, 'U+DB7F U+DC00 (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xAD\xBF\xED\xBF\xBF", 2, 'U+DB7F U+DFFF (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xAE\x80\xED\xB0\x80", 2, 'U+DB80 U+DC00 (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xAE\x80\xED\xBF\xBF", 2, 'U+DB80 U+DFFF (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xAF\xBF\xED\xB0\x80", 2, 'U+DBFF U+DC00 (paired UTF-16 surrogates)'); $this->invalidParseErrorTestHandler("\xED\xAF\xBF\xED\xBF\xBF", 2, 'U+DBFF U+DFFF (paired UTF-16 surrogates)'); + */ + } +} diff --git a/vendor/masterminds/html5/test/HTML5/Parser/TokenizerTest.php b/vendor/masterminds/html5/test/HTML5/Parser/TokenizerTest.php index 153dd23083fca05bcbce859bb07aa0ab8ad9806c..5e527227e54889d9b56271b2ec4e6cad7c1b9d64 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/TokenizerTest.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/TokenizerTest.php @@ -1,8 +1,8 @@ <?php - namespace Masterminds\HTML5\Tests\Parser; use Masterminds\HTML5\Parser\UTF8Utils; +use Masterminds\HTML5\Parser\StringInputStream; use Masterminds\HTML5\Parser\Scanner; use Masterminds\HTML5\Parser\Tokenizer; @@ -11,20 +11,19 @@ class TokenizerTest extends \Masterminds\HTML5\Tests\TestCase // ================================================================ // Additional assertions. // ================================================================ - /** * Tests that an event matches both the event type and the expected value. * * @param string $type - * Expected event type + * Expected event type. * @param string $expects - * The value expected in $event['data'][0] + * The value expected in $event['data'][0]. */ public function assertEventEquals($type, $expects, $event) { $this->assertEquals($type, $event['name'], "Event $type for " . print_r($event, true)); if (is_array($expects)) { - $this->assertEquals($expects, $event['data'], "Event $type should equal " . print_r($expects, true) . ': ' . print_r($event, true)); + $this->assertEquals($expects, $event['data'], "Event $type should equal " . print_r($expects, true) . ": " . print_r($event, true)); } else { $this->assertEquals($expects, $event['data'][0], "Event $type should equal $expects: " . print_r($event, true)); } @@ -35,7 +34,7 @@ public function assertEventEquals($type, $expects, $event) */ public function assertEventError($event) { - $this->assertEquals('error', $event['name'], 'Expected error for event: ' . print_r($event, true)); + $this->assertEquals('error', $event['name'], "Expected error for event: " . print_r($event, true)); } /** @@ -67,7 +66,7 @@ protected function isAllGood($name, $depth, $tests, $debug = false) // ================================================================ public function testParse() { - list($tok, $events) = $this->createTokenizer(''); + list ($tok, $events) = $this->createTokenizer(''); $tok->parse(); $e1 = $events->get(0); @@ -79,7 +78,7 @@ public function testParse() public function testWhitespace() { $spaces = ' '; - list($tok, $events) = $this->createTokenizer($spaces); + list ($tok, $events) = $this->createTokenizer($spaces); $tok->parse(); @@ -97,7 +96,7 @@ public function testCharacterReference() '&' => '&', '<' => '<', '&' => '&', - '&' => '&', + '&' => '&' ); $this->isAllGood('text', 2, $good); @@ -135,7 +134,7 @@ public function testBogusComment() '<![CDATA[', '<![CDATA[hellooooo hello', '<? Hello World ?>', - '<? Hello World', + '<? Hello World' ); foreach ($bogus as $str) { $events = $this->parse($str); @@ -153,7 +152,7 @@ public function testEndTag() >' => 'test', '</thisIsTheTagThatDoesntEndItJustGoesOnAndOnMyFriend>' => 'thisisthetagthatdoesntenditjustgoesonandonmyfriend', // See 8.2.4.10, which requires this and does not say error. - '</a<b>' => 'a<b', + '</a<b>' => 'a<b' ); $this->isAllGood('endTag', 2, $succeed); @@ -163,7 +162,7 @@ public function testEndTag() '</a <b>' => 'a', '</a <b <c>' => 'a', '</a is the loneliest letter>' => 'a', - '</a' => 'a', + '</a' => 'a' ); foreach ($fail as $test => $result) { $events = $this->parse($test); @@ -178,7 +177,7 @@ public function testEndTag() $comments = array( '</>' => '</>', '</ >' => '</ >', - '</ a>' => '</ a>', + '</ a>' => '</ a>' ); foreach ($comments as $test => $result) { $events = $this->parse($test); @@ -200,7 +199,7 @@ public function testComment() '<!-- --$i -->' => ' --$i ', '<!----$i-->' => '--$i', "<!--\nHello World.\na-->" => "\nHello World.\na", - '<!-- <!-- -->' => ' <!-- ', + '<!-- <!-- -->' => ' <!-- ' ); foreach ($good as $test => $expected) { $events = $this->parse($test); @@ -211,7 +210,7 @@ public function testComment() '<!-->' => '', '<!--Hello' => 'Hello', "<!--\0Hello" => UTF8Utils::FFFD . 'Hello', - '<!--' => '', + '<!--' => '' ); foreach ($fail as $test => $expected) { $events = $this->parse($test); @@ -227,7 +226,7 @@ public function testCDATASection() '<![CDATA[ This is a test. ]]>' => ' This is a test. ', '<![CDATA[CDATA]]>' => 'CDATA', '<![CDATA[ ]] > ]]>' => ' ]] > ', - '<![CDATA[ ]]>' => ' ', + '<![CDATA[ ]]>' => ' ' ); $this->isAllGood('cdata', 2, $good); } @@ -239,80 +238,80 @@ public function testDoctype() 'html', 0, null, - false, + false ), '<!doctype html>' => array( 'html', 0, null, - false, + false ), '<!DocType html>' => array( 'html', 0, null, - false, + false ), "<!DOCTYPE\nhtml>" => array( 'html', 0, null, - false, + false ), "<!DOCTYPE\fhtml>" => array( 'html', 0, null, - false, + false ), '<!DOCTYPE html PUBLIC "foo bar">' => array( 'html', EventStack::DOCTYPE_PUBLIC, 'foo bar', - false, + false ), "<!DOCTYPE html PUBLIC 'foo bar'>" => array( 'html', EventStack::DOCTYPE_PUBLIC, 'foo bar', - false, + false ), '<!DOCTYPE html PUBLIC "foo bar" >' => array( 'html', EventStack::DOCTYPE_PUBLIC, 'foo bar', - false, + false ), "<!DOCTYPE html \nPUBLIC\n'foo bar'>" => array( 'html', EventStack::DOCTYPE_PUBLIC, 'foo bar', - false, + false ), '<!DOCTYPE html SYSTEM "foo bar">' => array( 'html', EventStack::DOCTYPE_SYSTEM, 'foo bar', - false, + false ), "<!DOCTYPE html SYSTEM 'foo bar'>" => array( 'html', EventStack::DOCTYPE_SYSTEM, 'foo bar', - false, + false ), '<!DOCTYPE html SYSTEM "foo/bar" >' => array( 'html', EventStack::DOCTYPE_SYSTEM, 'foo/bar', - false, + false ), "<!DOCTYPE html \nSYSTEM\n'foo bar'>" => array( 'html', EventStack::DOCTYPE_SYSTEM, 'foo bar', - false, - ), + false + ) ); $this->isAllGood('doctype', 2, $good); @@ -321,43 +320,43 @@ public function testDoctype() null, EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE >' => array( null, EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo PUB' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo PUB>' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo PUB "Looks good">' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo SYSTME "Looks good"' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), // Can't tell whether these are ids or ID types, since the context is chopped. @@ -365,39 +364,39 @@ public function testDoctype() 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo PUBLIC>' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo SYSTEM' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE foo SYSTEM>' => array( 'foo', EventStack::DOCTYPE_NONE, null, - true, + true ), '<!DOCTYPE html SYSTEM "foo bar"' => array( 'html', EventStack::DOCTYPE_SYSTEM, 'foo bar', - true, + true ), '<!DOCTYPE html SYSTEM "foo bar" more stuff>' => array( 'html', EventStack::DOCTYPE_SYSTEM, 'foo bar', - true, - ), + true + ) ); foreach ($bad as $test => $expects) { $events = $this->parse($test); @@ -414,12 +413,12 @@ public function testProcessorInstruction() '<?hph ?>' => 'hph', '<?hph echo "Hello World"; ?>' => array( 'hph', - 'echo "Hello World"; ', + 'echo "Hello World"; ' ), "<?hph \necho 'Hello World';\n?>" => array( 'hph', - "echo 'Hello World';\n", - ), + "echo 'Hello World';\n" + ) ); $this->isAllGood('pi', 2, $good); } @@ -435,7 +434,7 @@ public function testSimpleTags() '<fOO>' => 'foo', '<foo >' => 'foo', "<foo\n\n\n\n>" => 'foo', - '<foo:bar>' => 'foo:bar', + '<foo:bar>' => 'foo:bar' ); $this->isAllGood('startTag', 2, $open); @@ -444,21 +443,20 @@ public function testSimpleTags() '<FOO/>' => 'foo', '<foo />' => 'foo', "<foo\n\n\n\n/>" => 'foo', - '<foo:bar/>' => 'foo:bar', + '<foo:bar/>' => 'foo:bar' ); foreach ($selfClose as $test => $expects) { $events = $this->parse($test); - $this->assertEquals(2, $events->depth(), "Counting events for '$test'" . print_r($events, true)); + $this->assertEquals(3, $events->depth(), "Counting events for '$test'" . print_r($events, true)); $this->assertEventEquals('startTag', $expects, $events->get(0)); - $event = $events->get(0); - $this->assertTrue($event['data'][2]); + $this->assertEventEquals('endTag', $expects, $events->get(1)); } $bad = array( '<foo' => 'foo', '<foo ' => 'foo', '<foo/' => 'foo', - '<foo /' => 'foo', + '<foo /' => 'foo' ); foreach ($bad as $test => $expects) { @@ -476,7 +474,7 @@ public function testTagsWithAttributeAndMissingName() '<color="white">' => 'color', "<class='neaktivni_stranka'>" => 'class', '<bgcolor="white">' => 'bgcolor', - '<class="nom">' => 'class', + '<class="nom">' => 'class' ); foreach ($cases as $html => $expected) { @@ -492,18 +490,18 @@ public function testTagsWithAttributeAndMissingName() public function testTagNotClosedAfterTagName() { $cases = array( - '<noscript<img>' => array( + "<noscript<img>" => array( 'noscript', - 'img', + 'img' ), '<center<a>' => array( 'center', - 'a', + 'a' ), '<br<br>' => array( 'br', - 'br', - ), + 'br' + ) ); foreach ($cases as $html => $expected) { @@ -577,111 +575,111 @@ public function testTagAttributes() '<foo bar="baz">' => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - false, + false ), '<foo bar=" baz ">' => array( 'foo', array( - 'bar' => ' baz ', + 'bar' => ' baz ' ), - false, + false ), "<foo bar=\"\nbaz\n\">" => array( 'foo', array( - 'bar' => "\nbaz\n", + 'bar' => "\nbaz\n" ), - false, + false ), "<foo bar='baz'>" => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - false, + false ), '<foo bar="A full sentence.">' => array( 'foo', array( - 'bar' => 'A full sentence.', + 'bar' => 'A full sentence.' ), - false, + false ), "<foo a='1' b=\"2\">" => array( 'foo', array( 'a' => '1', - 'b' => '2', + 'b' => '2' ), - false, + false ), "<foo ns:bar='baz'>" => array( 'foo', array( - 'ns:bar' => 'baz', + 'ns:bar' => 'baz' ), - false, + false ), "<foo a='blue&red'>" => array( 'foo', array( - 'a' => 'blue&red', + 'a' => 'blue&red' ), - false, + false ), "<foo a='blue&red'>" => array( 'foo', array( - 'a' => 'blue&red', + 'a' => 'blue&red' ), - false, + false ), "<foo a='blue&&&red'>" => array( 'foo', array( - 'a' => 'blue&&&red', + 'a' => 'blue&&&red' ), - false, + false ), "<foo a='blue&&red'>" => array( 'foo', array( - 'a' => 'blue&&red', + 'a' => 'blue&&red' ), - false, + false ), "<foo\nbar='baz'\n>" => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - false, + false ), '<doe a deer>' => array( 'doe', array( 'a' => null, - 'deer' => null, + 'deer' => null ), - false, + false ), '<foo bar=baz>' => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - false, + false ), // Updated for 8.1.2.3 '<foo bar = "baz" >' => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - false, + false ), // The spec allows an unquoted value '/'. This will not be a closing @@ -689,17 +687,17 @@ public function testTagAttributes() '<foo bar=/>' => array( 'foo', array( - 'bar' => '/', + 'bar' => '/' ), - false, + false ), '<foo bar=baz/>' => array( 'foo', array( - 'bar' => 'baz/', + 'bar' => 'baz/' ), - false, - ), + false + ) ); $this->isAllGood('startTag', 2, $good); @@ -708,23 +706,23 @@ public function testTagAttributes() '<foo bar="baz"/>' => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - true, + true ), '<foo BAR="baz"/>' => array( 'foo', array( - 'bar' => 'baz', + 'bar' => 'baz' ), - true, + true ), '<foo BAR="BAZ"/>' => array( 'foo', array( - 'bar' => 'BAZ', + 'bar' => 'BAZ' ), - true, + true ), "<foo a='1' b=\"2\" c=3 d/>" => array( 'foo', @@ -732,12 +730,12 @@ public function testTagAttributes() 'a' => '1', 'b' => '2', 'c' => '3', - 'd' => null, + 'd' => null ), - true, - ), + true + ) ); - $this->isAllGood('startTag', 2, $withEnd); + $this->isAllGood('startTag', 3, $withEnd); // Cause a parse error. $bad = array( @@ -745,30 +743,30 @@ public function testTagAttributes() "<foo a='blue&+dark'>" => array( 'foo', array( - 'a' => 'blue&+dark', + 'a' => 'blue&+dark' ), - false, + false ), '<foo bar=>' => array( 'foo', array( - 'bar' => null, + 'bar' => null ), - false, + false ), '<foo bar="oh' => array( 'foo', array( - 'bar' => 'oh', + 'bar' => 'oh' ), - false, + false ), '<foo bar=oh">' => array( 'foo', array( - 'bar' => 'oh"', + 'bar' => 'oh"' ), - false, + false ), // these attributes are ignored because of current implementation @@ -777,23 +775,23 @@ public function testTagAttributes() '<foo b"="baz">' => array( 'foo', array(), - false, + false ), '<foo 2abc="baz">' => array( 'foo', array(), - false, + false ), '<foo ?="baz">' => array( 'foo', array(), - false, + false ), '<foo foo?bar="baz">' => array( 'foo', array(), - false, - ), + false + ) ) ; foreach ($bad as $test => $expects) { @@ -809,23 +807,23 @@ public function testTagAttributes() 'foo', array( '=' => null, - '"bar"' => null, + '"bar"' => null ), - false, + false ), '<foo////>' => array( 'foo', array(), - true, + true ), // character "&" in unquoted attribute shouldn't cause an infinite loop '<foo bar=index.php?str=1&id=29>' => array( 'foo', array( - 'bar' => 'index.php?str=1&id=29', + 'bar' => 'index.php?str=1&id=29' ), - false, - ), + false + ) ); foreach ($reallyBad as $test => $expects) { $events = $this->parse($test); @@ -842,17 +840,17 @@ public function testTagAttributes() $this->assertEventEquals('startTag', array( 'foo', array( - 'baz' => '1', + 'baz' => '1' ), - false, + false ), $events->get(1)); $this->assertEventEquals('startTag', array( 'bar', array(), - false, + false ), $events->get(2)); $this->assertEventEquals('endTag', array( - 'foo', + 'foo' ), $events->get(3)); } @@ -866,7 +864,7 @@ public function testRawText() "<script>\nhello</script\n</script>" => "\nhello</script\n", '<script>&</script>' => '&', '<script><!--not a comment--></script>' => '<!--not a comment-->', - '<script><![CDATA[not a comment]]></script>' => '<![CDATA[not a comment]]>', + '<script><![CDATA[not a comment]]></script>' => '<![CDATA[not a comment]]>' ); foreach ($good as $test => $expects) { $events = $this->parse($test); @@ -877,7 +875,7 @@ public function testRawText() $bad = array( '<script>&</script' => '&</script', - '<script>Hello world' => 'Hello world', + '<script>Hello world' => 'Hello world' ); foreach ($bad as $test => $expects) { $events = $this->parse($test); @@ -902,7 +900,7 @@ public function testRawText() public function testRcdata() { - list($tok, $events) = $this->createTokenizer('<title>'<!-- not a comment --></TITLE>'); + list ($tok, $events) = $this->createTokenizer('<title>'<!-- not a comment --></TITLE>'); $tok->setTextMode(\Masterminds\HTML5\Elements::TEXT_RCDATA, 'title'); $tok->parse(); $this->assertEventEquals('text', "'<!-- not a comment -->", $events->get(1)); @@ -911,19 +909,19 @@ public function testRcdata() public function testText() { $events = $this->parse('a<br>b'); - $this->assertEquals(4, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(4, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('text', 'a', $events->get(0)); $this->assertEventEquals('startTag', 'br', $events->get(1)); $this->assertEventEquals('text', 'b', $events->get(2)); $events = $this->parse('<a>Test</a>'); - $this->assertEquals(4, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(4, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('startTag', 'a', $events->get(0)); $this->assertEventEquals('text', 'Test', $events->get(1)); $this->assertEventEquals('endTag', 'a', $events->get(2)); $events = $this->parse('<p>0</p><p>1</p>'); - $this->assertEquals(7, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(7, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('startTag', 'p', $events->get(0)); $this->assertEventEquals('text', '0', $events->get(1)); @@ -933,24 +931,25 @@ public function testText() $this->assertEventEquals('text', '1', $events->get(4)); $this->assertEventEquals('endTag', 'p', $events->get(5)); + $events = $this->parse('a<![CDATA[test]]>b'); - $this->assertEquals(4, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(4, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('text', 'a', $events->get(0)); $this->assertEventEquals('cdata', 'test', $events->get(1)); $this->assertEventEquals('text', 'b', $events->get(2)); $events = $this->parse('a<!--test-->b'); - $this->assertEquals(4, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(4, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('text', 'a', $events->get(0)); $this->assertEventEquals('comment', 'test', $events->get(1)); $this->assertEventEquals('text', 'b', $events->get(2)); $events = $this->parse('a&b'); - $this->assertEquals(2, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(2, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('text', 'a&b', $events->get(0)); $events = $this->parse('a²b'); - $this->assertEquals(2, $events->depth(), 'Events: ' . print_r($events, true)); + $this->assertEquals(2, $events->depth(), "Events: " . print_r($events, true)); $this->assertEventEquals('text', 'a²b', $events->get(0)); } @@ -960,19 +959,20 @@ public function testText() protected function createTokenizer($string, $debug = false) { $eventHandler = new EventStack(); - $scanner = new Scanner($string); + $stream = new StringInputStream($string); + $scanner = new Scanner($stream); $scanner->debug = $debug; return array( new Tokenizer($scanner, $eventHandler), - $eventHandler, + $eventHandler ); } public function parse($string, $debug = false) { - list($tok, $events) = $this->createTokenizer($string, $debug); + list ($tok, $events) = $this->createTokenizer($string, $debug); $tok->parse(); return $events; diff --git a/vendor/masterminds/html5/test/HTML5/Parser/TreeBuildingRulesTest.php b/vendor/masterminds/html5/test/HTML5/Parser/TreeBuildingRulesTest.php index 45c68bcfb2c22a112d22324a303a2f686a12b406..de94d06201c1eb95963fd48c30f9409274ee5d2f 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/TreeBuildingRulesTest.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/TreeBuildingRulesTest.php @@ -3,12 +3,12 @@ * @file * Test the Tree Builder's special-case rules. */ - namespace Masterminds\HTML5\Tests\Parser; use Masterminds\HTML5\Parser\TreeBuildingRules; use Masterminds\HTML5\Parser\Tokenizer; use Masterminds\HTML5\Parser\Scanner; +use Masterminds\HTML5\Parser\StringInputStream; use Masterminds\HTML5\Parser\DOMTreeBuilder; /** @@ -16,6 +16,7 @@ */ class TreeBuildingRulesTest extends \Masterminds\HTML5\Tests\TestCase { + const HTML_STUB = '<!DOCTYPE html><html><head><title>test</title></head><body>%s</body></html>'; /** @@ -24,31 +25,29 @@ class TreeBuildingRulesTest extends \Masterminds\HTML5\Tests\TestCase protected function parse($string) { $treeBuilder = new DOMTreeBuilder(); - $scanner = new Scanner($string); + $scanner = new Scanner(new StringInputStream($string)); $parser = new Tokenizer($scanner, $treeBuilder); $parser->parse(); - return $treeBuilder->document(); } - /** * Convenience function for parsing fragments. */ protected function parseFragment($string) { $events = new DOMTreeBuilder(true); - $scanner = new Scanner($string); + $scanner = new Scanner(new StringInputStream($string)); $parser = new Tokenizer($scanner, $events); $parser->parse(); - return $events->fragment(); } public function testTDFragment() { - $frag = $this->parseFragment('<td>This is a test of the HTML5 parser</td>'); + + $frag = $this->parseFragment("<td>This is a test of the HTML5 parser</td>"); $td = $frag->childNodes->item(0); diff --git a/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php b/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php index 72c26a4b3ccdc3d18c8c97612fb3b5d270fbd38c..0e8555a9cc6c65068f91da6939d28c965397d3d1 100644 --- a/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php +++ b/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php @@ -6,23 +6,21 @@ class UTF8UtilsTest extends \Masterminds\HTML5\Tests\TestCase { - public function testConvertToUTF8() - { - $out = UTF8Utils::convertToUTF8('éàa', 'ISO-8859-1'); - $this->assertEquals('éà a', $out); - } + public function testConvertToUTF8() { + $out = UTF8Utils::convertToUTF8('éàa', 'ISO-8859-1'); + $this->assertEquals('éà a', $out); + } - /** - * @todo add tests for invalid codepoints - */ - public function testCheckForIllegalCodepoints() - { - $smoke = 'Smoke test'; - $err = UTF8Utils::checkForIllegalCodepoints($smoke); - $this->assertEmpty($err); + /** + * @todo add tests for invalid codepoints + */ + public function testCheckForIllegalCodepoints() { + $smoke = "Smoke test"; + $err = UTF8Utils::checkForIllegalCodepoints($smoke); + $this->assertEmpty($err); - $data = "Foo Bar \0 Baz"; - $errors = UTF8Utils::checkForIllegalCodepoints($data); - $this->assertContains('null-character', $errors); - } -} + $data = "Foo Bar \0 Baz"; + $errors = UTF8Utils::checkForIllegalCodepoints($data); + $this->assertContains('null-character', $errors); + } +} \ No newline at end of file diff --git a/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php b/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php index 913051657831d60dc2c41bb0c5ae317f263ad96a..72253d3482969c0914489301880e09a5b518fff6 100644 --- a/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php +++ b/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php @@ -1,5 +1,4 @@ <?php - namespace Masterminds\HTML5\Tests\Serializer; use Masterminds\HTML5\Serializer\OutputRules; @@ -8,6 +7,7 @@ class OutputRulesTest extends \Masterminds\HTML5\Tests\TestCase { + protected $markup = '<!doctype html> <html lang="en"> <head> @@ -33,7 +33,7 @@ public function setUp() * Using reflection we make a protected method accessible for testing. * * @param string $name - * The name of the method on the Traverser class to test + * The name of the method on the Traverser class to test. * * @return \ReflectionMethod for the specified method */ @@ -65,7 +65,7 @@ public function getOutputRules($options = array()) return array( $r, - $stream, + $stream ); } @@ -79,20 +79,20 @@ public function testDocument() $r->document($dom); $expected = '<!DOCTYPE html>' . PHP_EOL . '<html lang="en"><body>foo</body></html>' . PHP_EOL; - $this->assertEquals($expected, stream_get_contents($stream, -1, 0)); + $this->assertEquals($expected, stream_get_contents($stream, - 1, 0)); } public function testEmptyDocument() { - $dom = $this->html5->loadHTML(''); + $dom = $this->html5->loadHTML(''); - $stream = fopen('php://temp', 'w'); - $r = new OutputRules($stream, $this->html5->getOptions()); - $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); + $stream = fopen('php://temp', 'w'); + $r = new OutputRules($stream, $this->html5->getOptions()); + $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); - $r->document($dom); - $expected = '<!DOCTYPE html>' . PHP_EOL; - $this->assertEquals($expected, stream_get_contents($stream, -1, 0)); + $r->document($dom); + $expected = '<!DOCTYPE html>' . PHP_EOL; + $this->assertEquals($expected, stream_get_contents($stream, - 1, 0)); } public function testDoctype() @@ -105,7 +105,7 @@ public function testDoctype() $m = $this->getProtectedMethod('doctype'); $m->invoke($r, 'foo'); - $this->assertEquals('<!DOCTYPE html>' . PHP_EOL, stream_get_contents($stream, -1, 0)); + $this->assertEquals("<!DOCTYPE html>" . PHP_EOL, stream_get_contents($stream, - 1, 0)); } public function testElement() @@ -129,13 +129,13 @@ public function testElement() $list = $dom->getElementsByTagName('div'); $r->element($list->item(0)); - $this->assertEquals('<div id="foo" class="bar baz">foo bar baz</div>', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<div id="foo" class="bar baz">foo bar baz</div>', stream_get_contents($stream, - 1, 0)); } - public function testSerializeWithNamespaces() + function testSerializeWithNamespaces() { $this->html5 = $this->getInstance(array( - 'xmlNamespaces' => true, + 'xmlNamespaces' => true )); $source = ' @@ -153,7 +153,7 @@ public function testSerializeWithNamespaces() </html>'; $dom = $this->html5->loadHTML($source, array( - 'xmlNamespaces' => true, + 'xmlNamespaces' => true )); $this->assertFalse($this->html5->hasErrors(), print_r($this->html5->getErrors(), 1)); @@ -162,10 +162,10 @@ public function testSerializeWithNamespaces() $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); $t->walk(); - $rendered = stream_get_contents($stream, -1, 0); + $rendered = stream_get_contents($stream, - 1, 0); - $clear = function ($s) { - return trim(preg_replace('/[\s]+/', ' ', $s)); + $clear = function($s){ + return trim(preg_replace('/[\s]+/', " ", $s)); }; $this->assertEquals($clear($source), $clear($rendered)); @@ -205,7 +205,7 @@ public function testElementWithScript() $jQ("#mktFrmSubmit").wrap("<div class=\'buttonSubmit\'></div>"); $jQ(".buttonSubmit").prepend("<span></span>"); }); - </script>', stream_get_contents($stream, -1, 0)); + </script>', stream_get_contents($stream, - 1, 0)); } public function testElementWithStyle() @@ -235,7 +235,7 @@ public function testElementWithStyle() body > .bar { display: none; } - </style>', stream_get_contents($stream, -1, 0)); + </style>', stream_get_contents($stream, - 1, 0)); } public function testOpenTag() @@ -254,7 +254,7 @@ public function testOpenTag() $list = $dom->getElementsByTagName('div'); $m = $this->getProtectedMethod('openTag'); $m->invoke($r, $list->item(0)); - $this->assertEquals('<div id="foo" class="bar baz">', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<div id="foo" class="bar baz">', stream_get_contents($stream, - 1, 0)); } public function testCData() @@ -272,7 +272,7 @@ public function testCData() $list = $dom->getElementsByTagName('div'); $r->cdata($list->item(0)->childNodes->item(0)); - $this->assertEquals('<![CDATA[bar]]>', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<![CDATA[bar]]>', stream_get_contents($stream, - 1, 0)); $dom = $this->html5->loadHTML('<!doctype html> <html lang="en"> @@ -281,7 +281,7 @@ public function testCData() </body> </html>'); - $dom->getElementById('foo')->appendChild(new \DOMCdataSection(']]>Foo<[![CDATA test ]]>')); + $dom->getElementById('foo')->appendChild(new \DOMCdataSection("]]>Foo<[![CDATA test ]]>")); $stream = fopen('php://temp', 'w'); $r = new OutputRules($stream, $this->html5->getOptions()); @@ -289,7 +289,7 @@ public function testCData() $list = $dom->getElementsByTagName('div'); $r->cdata($list->item(0)->childNodes->item(0)); - $this->assertEquals('<![CDATA[]]]]><![CDATA[>Foo<[![CDATA test ]]]]><![CDATA[>]]>', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<![CDATA[]]]]><![CDATA[>Foo<[![CDATA test ]]]]><![CDATA[>]]>', stream_get_contents($stream, - 1, 0)); } public function testComment() @@ -307,7 +307,7 @@ public function testComment() $list = $dom->getElementsByTagName('div'); $r->comment($list->item(0)->childNodes->item(0)); - $this->assertEquals('<!-- foo -->', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<!-- foo -->', stream_get_contents($stream, - 1, 0)); $dom = $this->html5->loadHTML('<!doctype html> <html lang="en"> @@ -326,7 +326,7 @@ public function testComment() // Could not find more definitive guidelines on what this should be. Went with // what the HTML5 spec says and what \DOMDocument::saveXML() produces. - $this->assertEquals('<!--<!-- --> --> Foo -->-->', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<!--<!-- --> --> Foo -->-->', stream_get_contents($stream, - 1, 0)); } public function testText() @@ -344,7 +344,7 @@ public function testText() $list = $dom->getElementsByTagName('script'); $r->text($list->item(0)->childNodes->item(0)); - $this->assertEquals('baz();', stream_get_contents($stream, -1, 0)); + $this->assertEquals('baz();', stream_get_contents($stream, - 1, 0)); $dom = $this->html5->loadHTML('<!doctype html> <html lang="en"> @@ -358,25 +358,25 @@ public function testText() $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); $r->text($foo->firstChild); - $this->assertEquals('<script>alert("hi");</script>', stream_get_contents($stream, -1, 0)); + $this->assertEquals('<script>alert("hi");</script>', stream_get_contents($stream, - 1, 0)); } public function testNl() { - list($o, $s) = $this->getOutputRules(); + list ($o, $s) = $this->getOutputRules(); $m = $this->getProtectedMethod('nl'); $m->invoke($o); - $this->assertEquals(PHP_EOL, stream_get_contents($s, -1, 0)); + $this->assertEquals(PHP_EOL, stream_get_contents($s, - 1, 0)); } public function testWr() { - list($o, $s) = $this->getOutputRules(); + list ($o, $s) = $this->getOutputRules(); $m = $this->getProtectedMethod('wr'); $m->invoke($o, 'foo'); - $this->assertEquals('foo', stream_get_contents($s, -1, 0)); + $this->assertEquals('foo', stream_get_contents($s, - 1, 0)); } public function getEncData() @@ -386,62 +386,61 @@ public function getEncData() false, '&\'<>"', '&\'<>"', - '&'<>"', + '&'<>"' ), array( false, 'This + is. a < test', 'This + is. a < test', - 'This + is. a < test', + 'This + is. a < test' ), array( false, '.+#', '.+#', - '.+#', + '.+#' ), array( true, '.+#\'', '.+#\'', - '.+#'', + '.+#'' ), array( true, '&".<', '&".<', - '&".<', + '&".<' ), array( true, '&\'<>"', '&\'<>"', - '&'<>"', + '&'<>"' ), array( true, "\xc2\xa0\"'", ' "\'', - ' "'', - ), + ' "'' + ) ); } /** * Test basic encoding of text. - * * @dataProvider getEncData */ public function testEnc($isAttribute, $test, $expected, $expectedEncoded) { - list($o, $s) = $this->getOutputRules(); + list ($o, $s) = $this->getOutputRules(); $m = $this->getProtectedMethod('enc'); $this->assertEquals($expected, $m->invoke($o, $test, $isAttribute)); - list($o, $s) = $this->getOutputRules(array( - 'encode_entities' => true, + list ($o, $s) = $this->getOutputRules(array( + 'encode_entities' => true )); $m = $this->getProtectedMethod('enc'); $this->assertEquals($expectedEncoded, $m->invoke($o, $test, $isAttribute)); @@ -449,12 +448,11 @@ public function testEnc($isAttribute, $test, $expected, $expectedEncoded) /** * Test basic encoding of text. - * * @dataProvider getEncData */ public function testEscape($isAttribute, $test, $expected, $expectedEncoded) { - list($o, $s) = $this->getOutputRules(); + list ($o, $s) = $this->getOutputRules(); $m = $this->getProtectedMethod('escape'); $this->assertEquals($expected, $m->invoke($o, $test, $isAttribute)); @@ -475,13 +473,12 @@ public function booleanAttributes() array('<script defer></script>'), ); } - /** * @dataProvider booleanAttributes */ public function testBooleanAttrs($html) { - $dom = $this->html5->loadHTML('<!doctype html><html lang="en"><body>' . $html . '</body></html>'); + $dom = $this->html5->loadHTML('<!doctype html><html lang="en"><body>'.$html.'</body></html>'); $stream = fopen('php://temp', 'w'); $r = new OutputRules($stream, $this->html5->getOptions()); @@ -492,12 +489,13 @@ public function testBooleanAttrs($html) $m = $this->getProtectedMethod('attrs'); $m->invoke($r, $node); - $content = stream_get_contents($stream, -1, 0); + $content = stream_get_contents($stream, - 1, 0); $html = preg_replace('~<[a-z]+(.*)></[a-z]+>~', '\1', $html); $html = preg_replace('~<[a-z]+(.*)/?>~', '\1', $html); $this->assertEquals($content, $html); + } public function testAttrs() @@ -518,7 +516,7 @@ public function testAttrs() $m = $this->getProtectedMethod('attrs'); $m->invoke($r, $list->item(0)); - $content = stream_get_contents($stream, -1, 0); + $content = stream_get_contents($stream, - 1, 0); $this->assertEquals(' id="foo" class="bar baz"', $content); } @@ -546,7 +544,7 @@ public function testSvg() $list = $dom->getElementsByTagName('svg'); $r->element($list->item(0)); - $contents = stream_get_contents($stream, -1, 0); + $contents = stream_get_contents($stream, - 1, 0); $this->assertRegExp('|<svg width="150" height="100" viewBox="0 0 3 2">|', $contents); $this->assertRegExp('|<rect width="1" height="2" x="0" fill="#008d46" />|', $contents); $this->assertRegExp('|<rect id="Bar" x="300" y="100" width="300" height="100" fill="rgb\(255,255,0\)">|', $contents); @@ -575,7 +573,7 @@ public function testMath() $list = $dom->getElementsByTagName('math'); $r->element($list->item(0)); - $content = stream_get_contents($stream, -1, 0); + $content = stream_get_contents($stream, - 1, 0); $this->assertRegExp('|<math>|', $content); $this->assertRegExp('|<csymbol definitionURL="http://www.example.com/mathops/multiops.html#plusminus">|', $content); } @@ -589,7 +587,7 @@ public function testProcessorInstruction() $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); $r->processorInstruction($dom->firstChild); - $content = stream_get_contents($stream, -1, 0); + $content = stream_get_contents($stream, - 1, 0); $this->assertRegExp('|<\?foo bar \?>|', $content); } @@ -613,7 +611,7 @@ public function testAddressTag() $list = $dom->getElementsByTagName('address'); $r->element($list->item(0)); - $contents = stream_get_contents($stream, -1, 0); + $contents = stream_get_contents($stream, - 1, 0); $this->assertRegExp('|<address>|', $contents); $this->assertRegExp('|<a href="../People/Raggett/">Dave Raggett</a>,|', $contents); @@ -623,7 +621,7 @@ public function testAddressTag() } /** - * Ensure direct DOM manipulation doesn't break TEXT_RAW elements (iframe, script, etc...). + * Ensure direct DOM manipulation doesn't break TEXT_RAW elements (iframe, script, etc...) */ public function testHandlingInvalidRawContent() { @@ -637,16 +635,16 @@ public function testHandlingInvalidRawContent() </body> </html>'); - $badNode = $dom->createElement('p', 'Bar'); + $badNode = $dom->createElement("p", "Bar"); // modify the content of the TEXT_RAW element: <script id="template"> appending dom nodes - $styleElement = $dom->getElementById('template'); + $styleElement = $dom->getElementById("template"); $styleElement->appendChild($badNode); $contents = $this->html5->saveHTML($dom); - $this->assertTrue(false !== strpos($contents, '<script id="template" type="x-tmpl-mustache"> + $this->assertTrue(strpos($contents, '<script id="template" type="x-tmpl-mustache"> <h1>Hello!</h1> - <p>Bar</p></script>')); + <p>Bar</p></script>')!==false); } } diff --git a/vendor/masterminds/html5/test/HTML5/Serializer/TraverserTest.php b/vendor/masterminds/html5/test/HTML5/Serializer/TraverserTest.php index d4ae7b351702015b96c9c6f86db140c607796cbc..c91463370683ab40ec94fb6bd949c73bde8df862 100644 --- a/vendor/masterminds/html5/test/HTML5/Serializer/TraverserTest.php +++ b/vendor/masterminds/html5/test/HTML5/Serializer/TraverserTest.php @@ -1,12 +1,13 @@ <?php - namespace Masterminds\HTML5\Tests\Serializer; use Masterminds\HTML5\Serializer\OutputRules; use Masterminds\HTML5\Serializer\Traverser; +use Masterminds\HTML5\Parser; class TraverserTest extends \Masterminds\HTML5\Tests\TestCase { + protected $markup = '<!doctype html> <html lang="en"> <head> @@ -27,7 +28,7 @@ public function setUp() * Using reflection we make a protected method accessible for testing. * * @param string $name - * The name of the method on the Traverser class to test + * The name of the method on the Traverser class to test. * * @return \ReflectionMethod \ReflectionMethod for the specified method */ @@ -50,7 +51,7 @@ public function getTraverser() // We return both the traverser and stream so we can pull from it. return array( $t, - $stream, + $stream ); } @@ -70,40 +71,9 @@ public function testConstruct() $this->assertInstanceOf('\Masterminds\HTML5\Serializer\Traverser', $t); } - public function testFragmentDeprecated() - { - $html = '<span class="bar">foo</span><span></span><div>bar</div>'; - $input = new \Masterminds\HTML5\Parser\StringInputStream($html); - $dom = $this->html5->parseFragment($input); - - $this->assertInstanceOf('\DOMDocumentFragment', $dom); - - $stream = fopen('php://temp', 'w'); - $r = new OutputRules($stream, $this->html5->getOptions()); - $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); - $t->walk(); - - $this->assertEquals($html, stream_get_contents($stream, -1, 0)); - } - public function testFragment() { $html = '<span class="bar">foo</span><span></span><div>bar</div>'; - $dom = $this->html5->parseFragment($html); - - $this->assertInstanceOf('\DOMDocumentFragment', $dom); - - $stream = fopen('php://temp', 'w'); - $r = new OutputRules($stream, $this->html5->getOptions()); - $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); - $t->walk(); - - $this->assertEquals($html, stream_get_contents($stream, -1, 0)); - } - - public function testProcessorInstructionDeprecated() - { - $html = '<?foo bar ?>'; $input = new \Masterminds\HTML5\Parser\StringInputStream($html); $dom = $this->html5->parseFragment($input); @@ -111,26 +81,25 @@ public function testProcessorInstructionDeprecated() $stream = fopen('php://temp', 'w'); $r = new OutputRules($stream, $this->html5->getOptions()); - $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); - $t->walk(); - $this->assertEquals($html, stream_get_contents($stream, -1, 0)); + $out = $t->walk(); + $this->assertEquals($html, stream_get_contents($stream, - 1, 0)); } public function testProcessorInstruction() { $html = '<?foo bar ?>'; - $dom = $this->html5->parseFragment($html); + $input = new \Masterminds\HTML5\Parser\StringInputStream($html); + $dom = $this->html5->parseFragment($input); $this->assertInstanceOf('\DOMDocumentFragment', $dom); $stream = fopen('php://temp', 'w'); $r = new OutputRules($stream, $this->html5->getOptions()); - $t = new Traverser($dom, $stream, $r, $this->html5->getOptions()); - $t->walk(); - $this->assertEquals($html, stream_get_contents($stream, -1, 0)); + $out = $t->walk(); + $this->assertEquals($html, stream_get_contents($stream, - 1, 0)); } } diff --git a/vendor/masterminds/html5/test/HTML5/TestCase.php b/vendor/masterminds/html5/test/HTML5/TestCase.php index 990e8c15e25b52c01272f2788c97d6bf763f0f5c..3cb86454750f235cef5a9704cf53004c93d1313f 100644 --- a/vendor/masterminds/html5/test/HTML5/TestCase.php +++ b/vendor/masterminds/html5/test/HTML5/TestCase.php @@ -1,12 +1,11 @@ <?php - namespace Masterminds\HTML5\Tests; use Masterminds\HTML5; -use PHPUnit\Framework\TestCase as BaseTestCase; -class TestCase extends BaseTestCase +class TestCase extends \PHPUnit_Framework_TestCase { + const DOC_OPEN = '<!DOCTYPE html><html><head><title>test</title></head><body>'; const DOC_CLOSE = '</body></html>'; diff --git a/vendor/masterminds/html5/test/benchmark/run.php b/vendor/masterminds/html5/test/benchmark/run.php index 2ca1907830aa8e85d3ab18eeca2d620a7b1fb11e..bee7c2dd6f92cd507a7219c021706e494a90c0be 100644 --- a/vendor/masterminds/html5/test/benchmark/run.php +++ b/vendor/masterminds/html5/test/benchmark/run.php @@ -1,6 +1,6 @@ <?php -require __DIR__ . '/../../vendor/autoload.php'; +require __DIR__ . "/../../vendor/autoload.php"; $iterations = isset($argv[1]) ? $argv[1] : 100; @@ -9,21 +9,21 @@ $dom = $html5->loadHTML($content); $samples = array(); -for ($i = 0; $i < $iterations; ++$i) { +for ($i = 0; $i < $iterations; $i++) { $t = microtime(true); $dom = $html5->loadHTML($content); $samples[] = microtime(true) - $t; } $time = array_sum($samples) / count($samples); -echo 'Loading: ' . ($time * 1000) . "\n"; +echo "Loading: " . ($time * 1000) . "\n"; $samples = array(); -for ($i = 0; $i < $iterations; ++$i) { +for ($i = 0; $i < $iterations; $i++) { $t = microtime(true); $html5->saveHTML($dom); $samples[] = microtime(true) - $t; } $time = array_sum($samples) / count($samples); -echo 'Writing: ' . ($time * 1000) . "\n"; +echo "Writing: " . ($time * 1000) . "\n"; exit(0); diff --git a/vendor/pear/console_getopt/Console/Getopt.php b/vendor/pear/console_getopt/Console/Getopt.php index e5793bbb181ef096d53d88f1c872ee7df80fe0c0..f8df71ce595c9d2696c3ad6813976d87709db086 100644 --- a/vendor/pear/console_getopt/Console/Getopt.php +++ b/vendor/pear/console_getopt/Console/Getopt.php @@ -123,7 +123,7 @@ public static function doGetopt($version, $args, $short_options, $long_options = * erroneous POSIX fix. */ if ($version < 2) { - if (isset($args[0][0]) && $args[0][0] != '-') { + if (isset($args[0]{0}) && $args[0]{0} != '-') { array_shift($args); } } @@ -138,10 +138,10 @@ public static function doGetopt($version, $args, $short_options, $long_options = break; } - if ($arg[0] != '-' || (strlen($arg) > 1 && $arg[1] == '-' && !$long_options)) { + if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) { $non_opts = array_merge($non_opts, array_slice($args, $i)); break; - } elseif (strlen($arg) > 1 && $arg[1] == '-') { + } elseif (strlen($arg) > 1 && $arg{1} == '-') { $error = Console_Getopt::_parseLongOption(substr($arg, 2), $long_options, $opts, @@ -186,11 +186,11 @@ public static function doGetopt($version, $args, $short_options, $long_options = protected static function _parseShortOption($arg, $short_options, &$opts, &$argIdx, $args, $skip_unknown) { for ($i = 0; $i < strlen($arg); $i++) { - $opt = $arg[$i]; + $opt = $arg{$i}; $opt_arg = null; /* Try to find the short option in the specifier string. */ - if (($spec = strstr($short_options, $opt)) === false || $arg[$i] == ':') { + if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') { if ($skip_unknown === true) { break; } @@ -199,8 +199,8 @@ protected static function _parseShortOption($arg, $short_options, &$opts, &$argI return PEAR::raiseError($msg); } - if (strlen($spec) > 1 && $spec[1] == ':') { - if (strlen($spec) > 2 && $spec[2] == ':') { + if (strlen($spec) > 1 && $spec{1} == ':') { + if (strlen($spec) > 2 && $spec{2} == ':') { if ($i + 1 < strlen($arg)) { /* Option takes an optional argument. Use the remainder of the arg string if there is anything left. */ @@ -296,11 +296,11 @@ protected static function _parseLongOption($arg, $long_options, &$opts, &$argIdx $next_option_rest = ''; } - if ($opt_rest != '' && $opt[0] != '=' && + if ($opt_rest != '' && $opt{0} != '=' && $i + 1 < count($long_options) && $opt == substr($long_options[$i+1], 0, $opt_len) && $next_option_rest != '' && - $next_option_rest[0] != '=') { + $next_option_rest{0} != '=') { $msg = "Console_Getopt: option --$opt is ambiguous"; return PEAR::raiseError($msg); diff --git a/vendor/pear/console_getopt/package.xml b/vendor/pear/console_getopt/package.xml index d3fd7840294c574e87a38dc419c4ff6db6955182..3c8da769d60e1adea4086cb0b6443f621546fead 100644 --- a/vendor/pear/console_getopt/package.xml +++ b/vendor/pear/console_getopt/package.xml @@ -24,9 +24,9 @@ short and long options.</description> <active>no</active> </helper> - <date>2019-11-20</date> + <date>2019-02-06</date> <version> - <release>1.4.3</release> + <release>1.4.2</release> <api>1.4.0</api> </version> <stability> @@ -36,8 +36,7 @@ short and long options.</description> <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license> <notes> -* PR #4: Fix PHP 7.4 deprecation: array/string curly braces access -* PR #5: fix phplint warnings +* Remove use of each(), which is removed in PHP 8 </notes> <contents> @@ -76,23 +75,6 @@ short and long options.</description> <changelog> - <release> - <date>2019-11-20</date> - <version> - <release>1.4.3</release> - <api>1.4.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license> - <notes> - * PR #4: Fix PHP 7.4 deprecation: array/string curly braces access - * PR #5: fix phplint warnings - </notes> - </release> - <release> <date>2019-02-06</date> <version> diff --git a/vendor/pear/pear-core-minimal/src/OS/Guess.php b/vendor/pear/pear-core-minimal/src/OS/Guess.php index d5aa295c3b1137c6045d28773e5bc845e2bc6773..c45e84f155d68bdd0eda7c68991cbac959300abc 100644 --- a/vendor/pear/pear-core-minimal/src/OS/Guess.php +++ b/vendor/pear/pear-core-minimal/src/OS/Guess.php @@ -195,22 +195,9 @@ function _detectGlibcVersion() } $major = $minor = 0; include_once "System.php"; - - if (@is_link('/lib64/libc.so.6')) { - // Let's try reading the libc.so.6 symlink - if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib64/libc.so.6')), $matches)) { - list($major, $minor) = explode('.', $matches[1]); - } - } else if (@is_link('/lib/libc.so.6')) { - // Let's try reading the libc.so.6 symlink - if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) { - list($major, $minor) = explode('.', $matches[1]); - } - } // Use glibc's <features.h> header file to // get major and minor version number: - if (!($major && $minor) && - @file_exists('/usr/include/features.h') && + if (@file_exists('/usr/include/features.h') && @is_readable('/usr/include/features.h')) { if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) { $features_file = fopen('/usr/include/features.h', 'rb'); @@ -253,7 +240,7 @@ function _detectGlibcVersion() fclose($fp); $cpp = popen("/usr/bin/cpp $tmpfile", "r"); while ($line = fgets($cpp, 1024)) { - if ($line[0] == '#' || trim($line) == '') { + if ($line{0} == '#' || trim($line) == '') { continue; } @@ -265,6 +252,13 @@ function _detectGlibcVersion() unlink($tmpfile); } // features.h + if (!($major && $minor) && @is_link('/lib/libc.so.6')) { + // Let's try reading the libc.so.6 symlink + if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) { + list($major, $minor) = explode('.', $matches[1]); + } + } + if (!($major && $minor)) { return $glibc = ''; } diff --git a/vendor/pear/pear-core-minimal/src/PEAR.php b/vendor/pear/pear-core-minimal/src/PEAR.php index fee6638f44ee2fd6c856f35fab7c3ae0dd141f5b..cf9a02de2fa2916a6564eac1097a1d09e2980eb5 100644 --- a/vendor/pear/pear-core-minimal/src/PEAR.php +++ b/vendor/pear/pear-core-minimal/src/PEAR.php @@ -766,28 +766,6 @@ function_exists('dl') === false || return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); } - - /** - * Get SOURCE_DATE_EPOCH environment variable - * See https://reproducible-builds.org/specs/source-date-epoch/ - * - * @return int - * @access public - */ - static function getSourceDateEpoch() - { - if ($source_date_epoch = getenv('SOURCE_DATE_EPOCH')) { - if (preg_match('/^\d+$/', $source_date_epoch)) { - return (int) $source_date_epoch; - } else { - // "If the value is malformed, the build process SHOULD exit with a non-zero error code." - self::raiseError("Invalid SOURCE_DATE_EPOCH: $source_date_epoch"); - exit(1); - } - } else { - return time(); - } - } } function _PEAR_call_destructors() diff --git a/vendor/pear/pear-core-minimal/src/System.php b/vendor/pear/pear-core-minimal/src/System.php index cf8f3799356e1bbb7edcefceee27a8d9105e03a8..aefc85b3f9e7c3d456f3cc72522ff2af89c89ffc 100644 --- a/vendor/pear/pear-core-minimal/src/System.php +++ b/vendor/pear/pear-core-minimal/src/System.php @@ -74,7 +74,7 @@ public static function _parseArgs($argv, $short_options, $long_options = null) $offset = 0; foreach ($av as $a) { $b = trim($a[0]); - if ($b[0] == '"' || $b[0] == "'") { + if ($b{0} == '"' || $b{0} == "'") { continue; } @@ -265,7 +265,7 @@ public static function mkDir($args) } elseif ($opt[0] == 'm') { // if the mode is clearly an octal number (starts with 0) // convert it to decimal - if (strlen($opt[1]) && $opt[1][0] == '0') { + if (strlen($opt[1]) && $opt[1]{0} == '0') { $opt[1] = octdec($opt[1]); } else { // convert to int @@ -480,7 +480,7 @@ public static function tmpdir() if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) { return $var; } - return realpath(function_exists('sys_get_temp_dir') ? sys_get_temp_dir() : '/tmp'); + return realpath('/tmp'); } /** diff --git a/vendor/pear/pear_exception/composer.json b/vendor/pear/pear_exception/composer.json index b923cf7181bd02a987e685988a26185d0c5d4aff..ce33ed1c805c22514ca13a5927f26cf32d4ecf44 100644 --- a/vendor/pear/pear_exception/composer.json +++ b/vendor/pear/pear_exception/composer.json @@ -21,7 +21,9 @@ "php": ">=4.4.0" }, "autoload": { - "classmap": ["PEAR/"] + "psr-0": { + "PEAR": "" + } }, "extra": { "branch-alias": { diff --git a/vendor/psr/log/Psr/Log/LoggerInterface.php b/vendor/psr/log/Psr/Log/LoggerInterface.php index e695046e30f737120f794e171a607c8226bfd390..5ea72438b56694639c13101cbc3c82339a6e96a8 100644 --- a/vendor/psr/log/Psr/Log/LoggerInterface.php +++ b/vendor/psr/log/Psr/Log/LoggerInterface.php @@ -118,8 +118,6 @@ public function debug($message, array $context = array()); * @param array $context * * @return void - * - * @throws \Psr\Log\InvalidArgumentException */ public function log($level, $message, array $context = array()); } diff --git a/vendor/psr/log/Psr/Log/LoggerTrait.php b/vendor/psr/log/Psr/Log/LoggerTrait.php index e392fef0a0cb0a6653ab2a2a887e8811937ef51f..867225df1d12469facd1355e6db7467e0d8de128 100644 --- a/vendor/psr/log/Psr/Log/LoggerTrait.php +++ b/vendor/psr/log/Psr/Log/LoggerTrait.php @@ -135,8 +135,6 @@ public function debug($message, array $context = array()) * @param array $context * * @return void - * - * @throws \Psr\Log\InvalidArgumentException */ abstract public function log($level, $message, array $context = array()); } diff --git a/vendor/psr/log/Psr/Log/NullLogger.php b/vendor/psr/log/Psr/Log/NullLogger.php index c8f7293b1c66886bcb2d47f30f5a8decc67712ba..d8cd682c8f963e8f5e04f46a4a57308cc8d9ecf0 100644 --- a/vendor/psr/log/Psr/Log/NullLogger.php +++ b/vendor/psr/log/Psr/Log/NullLogger.php @@ -20,8 +20,6 @@ class NullLogger extends AbstractLogger * @param array $context * * @return void - * - * @throws \Psr\Log\InvalidArgumentException */ public function log($level, $message, array $context = array()) { diff --git a/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php b/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php index 9ecb6c4b07323dd52c110a940489484165e59296..4b861c3ef6c31bf99c0fc78d0fc2fbc2711d88aa 100644 --- a/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php +++ b/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php @@ -4,7 +4,6 @@ use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; -use PHPUnit\Framework\TestCase; /** * Provides a base test class for ensuring compliance with the LoggerInterface. @@ -12,7 +11,7 @@ * Implementors can extend the class and implement abstract methods to run this * as part of their test suite. */ -abstract class LoggerInterfaceTest extends TestCase +abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase { /** * @return LoggerInterface @@ -141,6 +140,5 @@ class DummyTest { public function __toString() { - return 'DummyTest'; } } diff --git a/vendor/psr/log/Psr/Log/Test/TestLogger.php b/vendor/psr/log/Psr/Log/Test/TestLogger.php index 1be3230496b704fe90bc5e6cf69e7a615863c7d1..0cdffe4f9263b98f870b9615c07b005f54b14ca7 100644 --- a/vendor/psr/log/Psr/Log/Test/TestLogger.php +++ b/vendor/psr/log/Psr/Log/Test/TestLogger.php @@ -142,6 +142,5 @@ public function __call($method, $args) public function reset() { $this->records = []; - $this->recordsByLevel = []; } } diff --git a/vendor/psr/log/README.md b/vendor/psr/log/README.md index a9f20c437b385e5afab15096bde84c51e31bc812..5571a25e8df01732f1b7141b3ccc6835b3bb429c 100644 --- a/vendor/psr/log/README.md +++ b/vendor/psr/log/README.md @@ -38,12 +38,6 @@ class Foo if ($this->logger) { $this->logger->info('Doing work'); } - - try { - $this->doSomethingElse(); - } catch (Exception $exception) { - $this->logger->error('Oh no!', array('exception' => $exception)); - } // do something useful } diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json index 3f6d4eea4cb348c964c7642291dd7c608697c028..87934d707e7a37325a0ec6afe4b63aaa4ca6337c 100644 --- a/vendor/psr/log/composer.json +++ b/vendor/psr/log/composer.json @@ -20,7 +20,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.0.x-dev" } } } diff --git a/vendor/symfony/class-loader/LICENSE b/vendor/symfony/class-loader/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/class-loader/LICENSE +++ b/vendor/symfony/class-loader/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/class-loader/README.md b/vendor/symfony/class-loader/README.md index 96d1e9fe5a5ce511a76faea2b00244840366514f..d61992b6a80e73cd9fc5fd9765c04fb470e04960 100644 --- a/vendor/symfony/class-loader/README.md +++ b/vendor/symfony/class-loader/README.md @@ -7,7 +7,7 @@ their locations for performance. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/class_loader.html) + * [Documentation](https://symfony.com/doc/current/components/class_loader/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/console/Application.php b/vendor/symfony/console/Application.php index 1463967ffae086b3bc504d7c7c9860817785cdce..d181e41e80c46eb070aa1386a82d335513b6f0da 100644 --- a/vendor/symfony/console/Application.php +++ b/vendor/symfony/console/Application.php @@ -645,13 +645,8 @@ public function find($name) // filter out aliases for commands which are already on the list if (\count($commands) > 1) { $commandList = $this->commandLoader ? array_merge(array_flip($this->commandLoader->getNames()), $this->commands) : $this->commands; - $commands = array_unique(array_filter($commands, function ($nameOrAlias) use (&$commandList, $commands, &$aliases) { - if (!$commandList[$nameOrAlias] instanceof Command) { - $commandList[$nameOrAlias] = $this->commandLoader->get($nameOrAlias); - } - - $commandName = $commandList[$nameOrAlias]->getName(); - + $commands = array_unique(array_filter($commands, function ($nameOrAlias) use ($commandList, $commands, &$aliases) { + $commandName = $commandList[$nameOrAlias] instanceof Command ? $commandList[$nameOrAlias]->getName() : $nameOrAlias; $aliases[$nameOrAlias] = $commandName; return $commandName === $nameOrAlias || !\in_array($commandName, $commands); @@ -667,6 +662,10 @@ public function find($name) $maxLen = max(Helper::strlen($abbrev), $maxLen); } $abbrevs = array_map(function ($cmd) use ($commandList, $usableWidth, $maxLen) { + if (!$commandList[$cmd] instanceof Command) { + $commandList[$cmd] = $this->commandLoader->get($cmd); + } + if ($commandList[$cmd]->isHidden()) { return false; } diff --git a/vendor/symfony/console/Descriptor/ApplicationDescription.php b/vendor/symfony/console/Descriptor/ApplicationDescription.php index 7e214712da6f3d3b080d778f5e7af813e6a41526..442a569711c07cf3952bc180e578f31cd8fa53ac 100644 --- a/vendor/symfony/console/Descriptor/ApplicationDescription.php +++ b/vendor/symfony/console/Descriptor/ApplicationDescription.php @@ -129,29 +129,23 @@ private function sortCommands(array $commands) { $namespacedCommands = []; $globalCommands = []; - $sortedCommands = []; foreach ($commands as $name => $command) { $key = $this->application->extractNamespace($name, 1); - if (\in_array($key, ['', self::GLOBAL_NAMESPACE], true)) { - $globalCommands[$name] = $command; + if (!$key) { + $globalCommands['_global'][$name] = $command; } else { $namespacedCommands[$key][$name] = $command; } } + ksort($namespacedCommands); + $namespacedCommands = array_merge($globalCommands, $namespacedCommands); - if ($globalCommands) { - ksort($globalCommands); - $sortedCommands[self::GLOBAL_NAMESPACE] = $globalCommands; + foreach ($namespacedCommands as &$commandsSet) { + ksort($commandsSet); } + // unset reference to keep scope clear + unset($commandsSet); - if ($namespacedCommands) { - ksort($namespacedCommands); - foreach ($namespacedCommands as $key => $commandsSet) { - ksort($commandsSet); - $sortedCommands[$key] = $commandsSet; - } - } - - return $sortedCommands; + return $namespacedCommands; } } diff --git a/vendor/symfony/console/Helper/FormatterHelper.php b/vendor/symfony/console/Helper/FormatterHelper.php index d6eccee8e85ac08b81f9533c0fde7ad92ea06b37..4ad63856dcd5c691479b94d7e469e8c0841e3cae 100644 --- a/vendor/symfony/console/Helper/FormatterHelper.php +++ b/vendor/symfony/console/Helper/FormatterHelper.php @@ -54,12 +54,12 @@ public function formatBlock($messages, $style, $large = false) foreach ($messages as $message) { $message = OutputFormatter::escape($message); $lines[] = sprintf($large ? ' %s ' : ' %s ', $message); - $len = max(self::strlen($message) + ($large ? 4 : 2), $len); + $len = max($this->strlen($message) + ($large ? 4 : 2), $len); } $messages = $large ? [str_repeat(' ', $len)] : []; for ($i = 0; isset($lines[$i]); ++$i) { - $messages[] = $lines[$i].str_repeat(' ', $len - self::strlen($lines[$i])); + $messages[] = $lines[$i].str_repeat(' ', $len - $this->strlen($lines[$i])); } if ($large) { $messages[] = str_repeat(' ', $len); @@ -83,13 +83,17 @@ public function formatBlock($messages, $style, $large = false) */ public function truncate($message, $length, $suffix = '...') { - $computedLength = $length - self::strlen($suffix); + $computedLength = $length - $this->strlen($suffix); - if ($computedLength > self::strlen($message)) { + if ($computedLength > $this->strlen($message)) { return $message; } - return self::substr($message, 0, $length).$suffix; + if (false === $encoding = mb_detect_encoding($message, null, true)) { + return substr($message, 0, $length).$suffix; + } + + return mb_substr($message, 0, $length, $encoding).$suffix; } /** diff --git a/vendor/symfony/console/Helper/QuestionHelper.php b/vendor/symfony/console/Helper/QuestionHelper.php index 93e221d36a5638b2ecfbef71ca450eff535a5548..af4d0b9cca459690bc8919fd7a9887dcb6b946f4 100644 --- a/vendor/symfony/console/Helper/QuestionHelper.php +++ b/vendor/symfony/console/Helper/QuestionHelper.php @@ -198,34 +198,20 @@ protected function writePrompt(OutputInterface $output, Question $question) $message = $question->getQuestion(); if ($question instanceof ChoiceQuestion) { - $output->writeln(array_merge([ - $question->getQuestion(), - ], $this->formatChoiceQuestionChoices($question, 'info'))); + $maxWidth = max(array_map([$this, 'strlen'], array_keys($question->getChoices()))); - $message = $question->getPrompt(); - } - - $output->write($message); - } - - /** - * @param string $tag - * - * @return string[] - */ - protected function formatChoiceQuestionChoices(ChoiceQuestion $question, $tag) - { - $messages = []; - - $maxWidth = max(array_map('self::strlen', array_keys($choices = $question->getChoices()))); + $messages = (array) $question->getQuestion(); + foreach ($question->getChoices() as $key => $value) { + $width = $maxWidth - $this->strlen($key); + $messages[] = ' [<info>'.$key.str_repeat(' ', $width).'</info>] '.$value; + } - foreach ($choices as $key => $value) { - $padding = str_repeat(' ', $maxWidth - self::strlen($key)); + $output->writeln($messages); - $messages[] = sprintf(" [<$tag>%s$padding</$tag>] %s", $key, $value); + $message = $question->getPrompt(); } - return $messages; + $output->write($message); } /** @@ -278,7 +264,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu } elseif ("\177" === $c) { // Backspace Character if (0 === $numMatches && 0 !== $i) { --$i; - $fullChoice = self::substr($fullChoice, 0, $i); + $fullChoice = substr($fullChoice, 0, -1); // Move cursor backwards $output->write("\033[1D"); } @@ -292,7 +278,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu } // Pop the last character off the end of our string - $ret = self::substr($ret, 0, $i); + $ret = substr($ret, 0, $i); } elseif ("\033" === $c) { // Did we read an escape sequence? $c .= fread($inputStream, 2); @@ -318,7 +304,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu $remainingCharacters = substr($ret, \strlen(trim($this->mostRecentlyEnteredValue($fullChoice)))); $output->write($remainingCharacters); $fullChoice .= $remainingCharacters; - $i = self::strlen($fullChoice); + $i = \strlen($fullChoice); } if ("\n" === $c) { diff --git a/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php index 7cd050fee133c520b62cc2c13edc151a3b36b33e..5937741a2c69ec24f074d73b4609b67662af55a8 100644 --- a/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +++ b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php @@ -96,15 +96,15 @@ protected function writePrompt(OutputInterface $output, Question $question) $output->writeln($text); - $prompt = ' > '; - if ($question instanceof ChoiceQuestion) { - $output->writeln($this->formatChoiceQuestionChoices($question, 'comment')); + $width = max(array_map('strlen', array_keys($question->getChoices()))); - $prompt = $question->getPrompt(); + foreach ($question->getChoices() as $key => $value) { + $output->writeln(sprintf(" [<comment>%-${width}s</comment>] %s", $key, $value)); + } } - $output->write($prompt); + $output->write(' > '); } /** diff --git a/vendor/symfony/console/Input/ArrayInput.php b/vendor/symfony/console/Input/ArrayInput.php index b2ebc7c2258e2a7adcac3d8be9b22d00ed757f53..a04b6b68ea0c804de737a90f10c70d23d12588e2 100644 --- a/vendor/symfony/console/Input/ArrayInput.php +++ b/vendor/symfony/console/Input/ArrayInput.php @@ -39,8 +39,8 @@ public function __construct(array $parameters, InputDefinition $definition = nul */ public function getFirstArgument() { - foreach ($this->parameters as $param => $value) { - if ($param && \is_string($param) && '-' === $param[0]) { + foreach ($this->parameters as $key => $value) { + if ($key && '-' === $key[0]) { continue; } @@ -107,7 +107,7 @@ public function __toString() { $params = []; foreach ($this->parameters as $param => $val) { - if ($param && \is_string($param) && '-' === $param[0]) { + if ($param && '-' === $param[0]) { if (\is_array($val)) { foreach ($val as $v) { $params[] = $param.('' != $v ? '='.$this->escapeToken($v) : ''); diff --git a/vendor/symfony/console/LICENSE b/vendor/symfony/console/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/console/LICENSE +++ b/vendor/symfony/console/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/console/README.md b/vendor/symfony/console/README.md index 3e2fc605e5bfd1466698b79bbbf86aa9fa024b7b..664a37c0ee7be12f5560a765c5514c818b8546c0 100644 --- a/vendor/symfony/console/README.md +++ b/vendor/symfony/console/README.md @@ -7,7 +7,7 @@ interfaces. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/console.html) + * [Documentation](https://symfony.com/doc/current/components/console/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/console/Tests/ApplicationTest.php b/vendor/symfony/console/Tests/ApplicationTest.php index 559c42599fbddf53160b95f51fc63162538578f1..1ef2ed3d78d7a2e9adbe1eb2e50232736425f692 100644 --- a/vendor/symfony/console/Tests/ApplicationTest.php +++ b/vendor/symfony/console/Tests/ApplicationTest.php @@ -558,7 +558,7 @@ public function testFindAlternativeCommands() $this->assertRegExp(sprintf('/Command "%s" is not defined./', $commandName), $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternatives'); $this->assertRegExp('/afoobar1/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternative : "afoobar1"'); $this->assertRegExp('/foo:bar1/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternative : "foo:bar1"'); - $this->assertNotRegExp('/foo:bar(?!1)/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, without "foo:bar" alternative'); + $this->assertNotRegExp('/foo:bar(?>!1)/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, without "foo:bar" alternative'); } } @@ -568,9 +568,6 @@ public function testFindAlternativeCommandsWithAnAlias() $fooCommand->setAliases(['foo2']); $application = new Application(); - $application->setCommandLoader(new FactoryCommandLoader([ - 'foo3' => static function () use ($fooCommand) { return $fooCommand; }, - ])); $application->add($fooCommand); $result = $application->find('foo'); diff --git a/vendor/symfony/console/Tests/Descriptor/ApplicationDescriptionTest.php b/vendor/symfony/console/Tests/Descriptor/ApplicationDescriptionTest.php deleted file mode 100644 index 33d5c3840f3e3255de15f37f7047026bab1520b1..0000000000000000000000000000000000000000 --- a/vendor/symfony/console/Tests/Descriptor/ApplicationDescriptionTest.php +++ /dev/null @@ -1,53 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Tests\Descriptor; - -use PHPUnit\Framework\TestCase; -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Descriptor\ApplicationDescription; - -final class ApplicationDescriptionTest extends TestCase -{ - /** - * @dataProvider getNamespacesProvider - */ - public function testGetNamespaces(array $expected, array $names) - { - $application = new TestApplication(); - foreach ($names as $name) { - $application->add(new Command($name)); - } - - $this->assertSame($expected, array_keys((new ApplicationDescription($application))->getNamespaces())); - } - - public function getNamespacesProvider() - { - return [ - [['_global'], ['foobar']], - [['a', 'b'], ['b:foo', 'a:foo', 'b:bar']], - [['_global', 'b', 'z', 22, 33], ['z:foo', '1', '33:foo', 'b:foo', '22:foo:bar']], - ]; - } -} - -final class TestApplication extends Application -{ - /** - * {@inheritdoc} - */ - protected function getDefaultCommands() - { - return []; - } -} diff --git a/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php b/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php index d2afee42ffa261ef4beac1f3e44fcd131ef5d8a7..02cc6ce7e02491cc259ed6be77a34c5dce7bfefb 100644 --- a/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php +++ b/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php @@ -175,20 +175,19 @@ public function testAskWithAutocomplete() // Acm<NEWLINE> // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE> // <NEWLINE> - // <UP ARROW><UP ARROW><UP ARROW><NEWLINE> - // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE> + // <UP ARROW><UP ARROW><NEWLINE> + // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE> // <DOWN ARROW><NEWLINE> // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE> // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE> - // F⭐<TAB><BACKSPACE><BACKSPACE>⭐<TAB><NEWLINE> - $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\nF⭐\t\177\177⭐\t\n"); + $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n"); $dialog = new QuestionHelper(); $helperSet = new HelperSet([new FormatterHelper()]); $dialog->setHelperSet($helperSet); $question = new Question('Please select a bundle', 'FrameworkBundle'); - $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle', 'F⭐Y']); + $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle']); $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); $this->assertEquals('AsseticBundleTest', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); @@ -198,7 +197,6 @@ public function testAskWithAutocomplete() $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); $this->assertEquals('AsseticBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); $this->assertEquals('FooBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); - $this->assertEquals('F⭐Y', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); } public function testAskWithAutocompleteWithNonSequentialKeys() @@ -682,13 +680,12 @@ public function testLegacyAskWithAutocomplete() // Acm<NEWLINE> // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE> // <NEWLINE> - // <UP ARROW><UP ARROW><UP ARROW><NEWLINE> - // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE> + // <UP ARROW><UP ARROW><NEWLINE> + // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE> // <DOWN ARROW><NEWLINE> // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE> // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE> - // F⭐<TAB><BACKSPACE><BACKSPACE>⭐<TAB><NEWLINE> - $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\nF⭐\t⭐\t\n"); + $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n"); $dialog = new QuestionHelper(); $dialog->setInputStream($inputStream); @@ -696,7 +693,7 @@ public function testLegacyAskWithAutocomplete() $dialog->setHelperSet($helperSet); $question = new Question('Please select a bundle', 'FrameworkBundle'); - $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle', 'F⭐Y']); + $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle']); $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); $this->assertEquals('AsseticBundleTest', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); @@ -706,7 +703,6 @@ public function testLegacyAskWithAutocomplete() $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); $this->assertEquals('AsseticBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); $this->assertEquals('FooBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); - $this->assertEquals('F⭐Y', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); } /** diff --git a/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php b/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php index 467f38b6d45c8233e7af77c1e36dea1050ccc28c..cbf3b957b3913d64fcfdd8f89e54035bc5b0bd91 100644 --- a/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php +++ b/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php @@ -130,49 +130,6 @@ public function testAskThrowsExceptionOnMissingInput() $dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), new Question('What\'s your name?')); } - public function testChoiceQuestionPadding() - { - $choiceQuestion = new ChoiceQuestion('qqq', [ - 'foo' => 'foo', - 'żółw' => 'bar', - 'łabądź' => 'baz', - ]); - - (new SymfonyQuestionHelper())->ask( - $this->createStreamableInputInterfaceMock($this->getInputStream("foo\n")), - $output = $this->createOutputInterface(), - $choiceQuestion - ); - - $this->assertOutputContains(<<<EOT - qqq: - [foo ] foo - [żółw ] bar - [łabądź] baz - > -EOT - , $output, true); - } - - public function testChoiceQuestionCustomPrompt() - { - $choiceQuestion = new ChoiceQuestion('qqq', ['foo']); - $choiceQuestion->setPrompt(' >ccc> '); - - (new SymfonyQuestionHelper())->ask( - $this->createStreamableInputInterfaceMock($this->getInputStream("foo\n")), - $output = $this->createOutputInterface(), - $choiceQuestion - ); - - $this->assertOutputContains(<<<EOT - qqq: - [0] foo - >ccc> -EOT - , $output, true); - } - protected function getInputStream($input) { $stream = fopen('php://memory', 'r+', false); @@ -200,15 +157,10 @@ protected function createInputInterfaceMock($interactive = true) return $mock; } - private function assertOutputContains($expected, StreamOutput $output, $normalize = false) + private function assertOutputContains($expected, StreamOutput $output) { rewind($output->getStream()); $stream = stream_get_contents($output->getStream()); - - if ($normalize) { - $stream = str_replace(PHP_EOL, "\n", $stream); - } - $this->assertStringContainsString($expected, $stream); } } diff --git a/vendor/symfony/debug/LICENSE b/vendor/symfony/debug/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/debug/LICENSE +++ b/vendor/symfony/debug/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/debug/README.md b/vendor/symfony/debug/README.md index 38bc800c587b35ed54830bab2ecaba0078d571a0..a1d16175c1a1f169986b517b4dd08ffcf1680f41 100644 --- a/vendor/symfony/debug/README.md +++ b/vendor/symfony/debug/README.md @@ -6,7 +6,7 @@ The Debug component provides tools to ease debugging PHP code. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/debug.html) + * [Documentation](https://symfony.com/doc/current/components/debug/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/debug/Tests/DebugClassLoaderTest.php b/vendor/symfony/debug/Tests/DebugClassLoaderTest.php index 86ecf16df02c8e1dd3c28c29106e9f999422b129..0388acba029ba38cd116fab6bf2c23270c219173 100644 --- a/vendor/symfony/debug/Tests/DebugClassLoaderTest.php +++ b/vendor/symfony/debug/Tests/DebugClassLoaderTest.php @@ -64,14 +64,14 @@ public function testThrowingClass() $this->expectException('Exception'); $this->expectExceptionMessage('boo'); try { - class_exists(Fixtures\Throwing::class); + class_exists(__NAMESPACE__.'\Fixtures\Throwing'); $this->fail('Exception expected'); } catch (\Exception $e) { $this->assertSame('boo', $e->getMessage()); } // the second call also should throw - class_exists(Fixtures\Throwing::class); + class_exists(__NAMESPACE__.'\Fixtures\Throwing'); } public function testUnsilencing() @@ -90,7 +90,7 @@ public function testUnsilencing() // See below: this will fail with parse error // but this should not be @-silenced. - @class_exists(TestingUnsilencing::class, true); + @class_exists(__NAMESPACE__.'\TestingUnsilencing', true); $output = ob_get_clean(); @@ -141,7 +141,7 @@ public function testNameCaseMismatch() { $this->expectException('RuntimeException'); $this->expectExceptionMessage('Case mismatch between loaded and declared class names'); - class_exists(TestingCaseMismatch::class, true); + class_exists(__NAMESPACE__.'\TestingCaseMismatch', true); } public function testFileCaseMismatch() @@ -152,7 +152,7 @@ public function testFileCaseMismatch() $this->markTestSkipped('Can only be run on case insensitive filesystems'); } - class_exists(Fixtures\CaseMismatch::class, true); + class_exists(__NAMESPACE__.'\Fixtures\CaseMismatch', true); } public function testPsr4CaseMismatch() @@ -174,7 +174,7 @@ public function testNotPsr0Bis() public function testClassAlias() { - $this->assertTrue(class_exists(Fixtures\ClassAlias::class, true)); + $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\ClassAlias', true)); } /** @@ -216,7 +216,7 @@ public function testInterfaceExtendsDeprecatedInterface() $e = error_reporting(0); trigger_error('', E_USER_NOTICE); - class_exists('Test\\'.NonDeprecatedInterfaceClass::class, true); + class_exists('Test\\'.__NAMESPACE__.'\\NonDeprecatedInterfaceClass', true); error_reporting($e); restore_error_handler(); @@ -264,7 +264,7 @@ public function testReservedForPhp7() $e = error_reporting(0); trigger_error('', E_USER_NOTICE); - class_exists('Test\\'.Float::class, true); + class_exists('Test\\'.__NAMESPACE__.'\\Float', true); error_reporting($e); restore_error_handler(); @@ -289,7 +289,7 @@ public function testExtendedFinalClass() require __DIR__.'/Fixtures/FinalClasses.php'; $i = 1; - while (class_exists($finalClass = Fixtures\FinalClass::class.$i++, false)) { + while (class_exists($finalClass = __NAMESPACE__.'\\Fixtures\\FinalClass'.$i++, false)) { spl_autoload_call($finalClass); class_exists('Test\\'.__NAMESPACE__.'\\Extends'.substr($finalClass, strrpos($finalClass, '\\') + 1), true); } @@ -315,7 +315,7 @@ public function testExtendedFinalMethod() set_error_handler(function ($type, $msg) use (&$deprecations) { $deprecations[] = $msg; }); $e = error_reporting(E_USER_DEPRECATED); - class_exists(Fixtures\ExtendedFinalMethod::class, true); + class_exists(__NAMESPACE__.'\\Fixtures\\ExtendedFinalMethod', true); error_reporting($e); restore_error_handler(); @@ -334,7 +334,7 @@ public function testExtendedDeprecatedMethodDoesntTriggerAnyNotice() $e = error_reporting(0); trigger_error('', E_USER_NOTICE); - class_exists('Test\\'.ExtendsAnnotatedClass::class, true); + class_exists('Test\\'.__NAMESPACE__.'\\ExtendsAnnotatedClass', true); error_reporting($e); restore_error_handler(); @@ -351,7 +351,7 @@ public function testInternalsUse() set_error_handler(function ($type, $msg) use (&$deprecations) { $deprecations[] = $msg; }); $e = error_reporting(E_USER_DEPRECATED); - class_exists('Test\\'.ExtendsInternals::class, true); + class_exists('Test\\'.__NAMESPACE__.'\\ExtendsInternals', true); error_reporting($e); restore_error_handler(); @@ -370,7 +370,7 @@ public function testUseTraitWithInternalMethod() set_error_handler(function ($type, $msg) use (&$deprecations) { $deprecations[] = $msg; }); $e = error_reporting(E_USER_DEPRECATED); - class_exists('Test\\'.UseTraitWithInternalMethod::class, true); + class_exists('Test\\'.__NAMESPACE__.'\\UseTraitWithInternalMethod', true); error_reporting($e); restore_error_handler(); @@ -380,7 +380,7 @@ class_exists('Test\\'.UseTraitWithInternalMethod::class, true); public function testEvaluatedCode() { - $this->assertTrue(class_exists(Fixtures\DefinitionInEvaluatedCode::class, true)); + $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\DefinitionInEvaluatedCode', true)); } } @@ -399,11 +399,11 @@ public function findFile($class) { $fixtureDir = __DIR__.\DIRECTORY_SEPARATOR.'Fixtures'.\DIRECTORY_SEPARATOR; - if (TestingUnsilencing::class === $class) { + if (__NAMESPACE__.'\TestingUnsilencing' === $class) { eval('-- parse error --'); - } elseif (TestingStacking::class === $class) { + } elseif (__NAMESPACE__.'\TestingStacking' === $class) { eval('namespace '.__NAMESPACE__.'; class TestingStacking { function foo() {} }'); - } elseif (TestingCaseMismatch::class === $class) { + } elseif (__NAMESPACE__.'\TestingCaseMismatch' === $class) { eval('namespace '.__NAMESPACE__.'; class TestingCaseMisMatch {}'); } elseif (__NAMESPACE__.'\Fixtures\Psr4CaseMismatch' === $class) { return $fixtureDir.'psr4'.\DIRECTORY_SEPARATOR.'Psr4CaseMismatch.php'; @@ -413,30 +413,30 @@ public function findFile($class) return $fixtureDir.'notPsr0Bis.php'; } elseif ('Symfony\Bridge\Debug\Tests\Fixtures\ExtendsDeprecatedParent' === $class) { eval('namespace Symfony\Bridge\Debug\Tests\Fixtures; class ExtendsDeprecatedParent extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}'); - } elseif ('Test\\'.DeprecatedParentClass::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\DeprecatedParentClass' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class DeprecatedParentClass extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}'); - } elseif ('Test\\'.DeprecatedInterfaceClass::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\DeprecatedInterfaceClass' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class DeprecatedInterfaceClass implements \\'.__NAMESPACE__.'\Fixtures\DeprecatedInterface {}'); - } elseif ('Test\\'.NonDeprecatedInterfaceClass::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\NonDeprecatedInterfaceClass' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class NonDeprecatedInterfaceClass implements \\'.__NAMESPACE__.'\Fixtures\NonDeprecatedInterface {}'); - } elseif ('Test\\'.Float::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\Float' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class Float {}'); - } elseif (0 === strpos($class, 'Test\\'.ExtendsFinalClass::class)) { + } elseif (0 === strpos($class, 'Test\\'.__NAMESPACE__.'\ExtendsFinalClass')) { $classShortName = substr($class, strrpos($class, '\\') + 1); eval('namespace Test\\'.__NAMESPACE__.'; class '.$classShortName.' extends \\'.__NAMESPACE__.'\Fixtures\\'.substr($classShortName, 7).' {}'); - } elseif ('Test\\'.ExtendsAnnotatedClass::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\ExtendsAnnotatedClass' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class ExtendsAnnotatedClass extends \\'.__NAMESPACE__.'\Fixtures\AnnotatedClass { public function deprecatedMethod() { } }'); - } elseif ('Test\\'.ExtendsInternals::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\ExtendsInternals' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class ExtendsInternals extends ExtendsInternalsParent { use \\'.__NAMESPACE__.'\Fixtures\InternalTrait; public function internalMethod() { } }'); - } elseif ('Test\\'.ExtendsInternalsParent::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\ExtendsInternalsParent' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class ExtendsInternalsParent extends \\'.__NAMESPACE__.'\Fixtures\InternalClass implements \\'.__NAMESPACE__.'\Fixtures\InternalInterface { }'); - } elseif ('Test\\'.UseTraitWithInternalMethod::class === $class) { + } elseif ('Test\\'.__NAMESPACE__.'\UseTraitWithInternalMethod' === $class) { eval('namespace Test\\'.__NAMESPACE__.'; class UseTraitWithInternalMethod { use \\'.__NAMESPACE__.'\Fixtures\TraitWithInternalMethod; }'); } diff --git a/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php b/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php index 3d163eec7775f8cb32063648accff12a216eabd7..0290b05bad48423c1e5d78d2b53854a1263584c8 100644 --- a/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php +++ b/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php @@ -199,10 +199,6 @@ public function flattenDataProvider() public function testArguments() { - if (\PHP_VERSION_ID >= 70400) { - $this->markTestSkipped('PHP 7.4 removes arguments from exception traces.'); - } - $dh = opendir(__DIR__); $fh = tmpfile(); @@ -265,10 +261,6 @@ function () {}, public function testRecursionInArguments() { - if (\PHP_VERSION_ID >= 70400) { - $this->markTestSkipped('PHP 7.4 removes arguments from exception traces.'); - } - $a = null; $a = ['foo', [2, &$a]]; $exception = $this->createException($a); @@ -280,10 +272,6 @@ public function testRecursionInArguments() public function testTooBigArray() { - if (\PHP_VERSION_ID >= 70400) { - $this->markTestSkipped('PHP 7.4 removes arguments from exception traces.'); - } - $a = []; for ($i = 0; $i < 20; ++$i) { for ($j = 0; $j < 50; ++$j) { diff --git a/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php b/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php index f3564762013fcfa9379163fe907f7fb2fe030e47..9a56b3b4ec8fc8ec6f546e97c6a18865f43f1a38 100644 --- a/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php +++ b/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php @@ -29,10 +29,6 @@ public static function setUpBeforeClass() // get class loaders wrapped by DebugClassLoader if ($function[0] instanceof DebugClassLoader) { $function = $function[0]->getClassLoader(); - - if (!\is_array($function)) { - continue; - } } if ($function[0] instanceof ComposerClassLoader) { diff --git a/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php b/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php index 4b6d277fe997974ca2dfd699e32d2db5334eb57f..0e9005415a30bbfd7ee06e2b3d6b12376e434c88 100644 --- a/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php +++ b/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php @@ -49,10 +49,21 @@ public function process(ContainerBuilder $container) } if (class_exists($id) || interface_exists($id, false)) { if (0 === strpos($id, '\\') && 1 < substr_count($id, '\\')) { - throw new RuntimeException(sprintf('The definition for "%s" has no class attribute, and appears to reference a class or interface. Please specify the class attribute explicitly or remove the leading backslash by renaming the service to "%s" to get rid of this error.', $id, substr($id, 1))); + throw new RuntimeException(sprintf( + 'The definition for "%s" has no class attribute, and appears to reference a class or interface. ' + .'Please specify the class attribute explicitly or remove the leading backslash by renaming ' + .'the service to "%s" to get rid of this error.', + $id, substr($id, 1) + )); } - throw new RuntimeException(sprintf('The definition for "%s" has no class attribute, and appears to reference a class or interface in the global namespace. Leaving out the "class" attribute is only allowed for namespaced classes. Please specify the class attribute explicitly to get rid of this error.', $id)); + throw new RuntimeException(sprintf( + 'The definition for "%s" has no class attribute, and appears to reference a ' + .'class or interface in the global namespace. Leaving out the "class" attribute ' + .'is only allowed for namespaced classes. Please specify the class attribute ' + .'explicitly to get rid of this error.', + $id + )); } throw new RuntimeException(sprintf('The definition for "%s" has no class. If you intend to inject this service dynamically at runtime, please mark it as synthetic=true. If this is an abstract definition solely used by child definitions, please add abstract=true, otherwise specify a class to get rid of this error.', $id)); diff --git a/vendor/symfony/dependency-injection/Compiler/PassConfig.php b/vendor/symfony/dependency-injection/Compiler/PassConfig.php index bf8d75e6df2809b885f63d35fa0e675a2b043aa4..323faad57f9a0f0faa1ffe6f0a4b859b2a680b69 100644 --- a/vendor/symfony/dependency-injection/Compiler/PassConfig.php +++ b/vendor/symfony/dependency-injection/Compiler/PassConfig.php @@ -53,7 +53,7 @@ public function __construct() new ServiceLocatorTagPass(), new RegisterServiceSubscribersPass(), new DecoratorServicePass(), - new ResolveParameterPlaceHoldersPass(false, false), + new ResolveParameterPlaceHoldersPass(false), new ResolveFactoryClassPass(), new FactoryReturnTypePass($resolveClassPass), new CheckDefinitionValidityPass(), diff --git a/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php b/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php index 6268ed9ed048cba4d3faec66ce37c80a66a1c61f..69e3796df0c4f7fe92432ff6bad79b1325d2e4f1 100644 --- a/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php +++ b/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php @@ -64,10 +64,9 @@ private function processDefinition(ContainerBuilder $container, $id, Definition $definition->setInstanceofConditionals([]); $parent = $shared = null; $instanceofTags = []; - $reflectionClass = null; foreach ($conditionals as $interface => $instanceofDefs) { - if ($interface !== $class && !(null === $reflectionClass ? $reflectionClass = ($container->getReflectionClass($class, false) ?: false) : $reflectionClass)) { + if ($interface !== $class && (!$container->getReflectionClass($class, false))) { continue; } diff --git a/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php b/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php index 32eb6a3a76f3e37341d15cc31ede0cf8b022fdd3..8c942b524ea3baf2e36d218b01aa630a407c395f 100644 --- a/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php +++ b/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php @@ -24,12 +24,10 @@ class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass { private $bag; private $resolveArrays; - private $throwOnResolveException; - public function __construct($resolveArrays = true, $throwOnResolveException = true) + public function __construct($resolveArrays = true) { $this->resolveArrays = $resolveArrays; - $this->throwOnResolveException = $throwOnResolveException; } /** @@ -63,16 +61,7 @@ public function process(ContainerBuilder $container) protected function processValue($value, $isRoot = false) { if (\is_string($value)) { - try { - $v = $this->bag->resolveValue($value); - } catch (ParameterNotFoundException $e) { - if ($this->throwOnResolveException) { - throw $e; - } - - $v = null; - $this->container->getDefinition($this->currentId)->addError($e->getMessage()); - } + $v = $this->bag->resolveValue($value); return $this->resolveArrays || !$v || !\is_array($v) ? $v : $value; } diff --git a/vendor/symfony/dependency-injection/Dumper/PhpDumper.php b/vendor/symfony/dependency-injection/Dumper/PhpDumper.php index 4dd4475cbe4cf674e5c68bd9b8e13a8788ba04cc..7596b9953bda441203b3103c294001fae47f973e 100644 --- a/vendor/symfony/dependency-injection/Dumper/PhpDumper.php +++ b/vendor/symfony/dependency-injection/Dumper/PhpDumper.php @@ -173,14 +173,14 @@ public function dump(array $options = []) if (!empty($options['file']) && is_dir($dir = \dirname($options['file']))) { // Build a regexp where the first root dirs are mandatory, // but every other sub-dir is optional up to the full path in $dir - // Mandate at least 1 root dir and not more than 5 optional dirs. + // Mandate at least 2 root dirs and not more that 5 optional dirs. $dir = explode(\DIRECTORY_SEPARATOR, realpath($dir)); $i = \count($dir); - if (2 + (int) ('\\' === \DIRECTORY_SEPARATOR) <= $i) { + if (3 <= $i) { $regex = ''; - $lastOptionalDir = $i > 8 ? $i - 5 : (2 + (int) ('\\' === \DIRECTORY_SEPARATOR)); + $lastOptionalDir = $i > 8 ? $i - 5 : 3; $this->targetDirMaxMatches = $i - $lastOptionalDir; while (--$i >= $lastOptionalDir) { diff --git a/vendor/symfony/dependency-injection/Dumper/XmlDumper.php b/vendor/symfony/dependency-injection/Dumper/XmlDumper.php index eff421ec4e71fc9c3885cb2d9ce159e907eb936d..cfc932843937f7e4dbd608f292c0a23783d508f1 100644 --- a/vendor/symfony/dependency-injection/Dumper/XmlDumper.php +++ b/vendor/symfony/dependency-injection/Dumper/XmlDumper.php @@ -304,11 +304,6 @@ private function convertParameters(array $parameters, $type, \DOMElement $parent if (\in_array($value, ['null', 'true', 'false'], true)) { $element->setAttribute('type', 'string'); } - - if (\is_string($value) && (is_numeric($value) || preg_match('/^0b[01]*$/', $value) || preg_match('/^0x[0-9a-f]++$/i', $value))) { - $element->setAttribute('type', 'string'); - } - $text = $this->document->createTextNode(self::phpToXml($value)); $element->appendChild($text); } diff --git a/vendor/symfony/dependency-injection/Extension/Extension.php b/vendor/symfony/dependency-injection/Extension/Extension.php index 8acb8ee31d48f3919d82bdbc80cf116e4c3706ee..7df483064f11d0cd584674d3360f25db19960e90 100644 --- a/vendor/symfony/dependency-injection/Extension/Extension.php +++ b/vendor/symfony/dependency-injection/Extension/Extension.php @@ -80,11 +80,6 @@ public function getAlias() public function getConfiguration(array $config, ContainerBuilder $container) { $class = \get_class($this); - - if (false !== strpos($class, "\0")) { - return null; // ignore anonymous classes - } - $class = substr_replace($class, '\Configuration', strrpos($class, '\\')); $class = $container->getReflectionClass($class); $constructor = $class ? $class->getConstructor() : null; diff --git a/vendor/symfony/dependency-injection/LICENSE b/vendor/symfony/dependency-injection/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/dependency-injection/LICENSE +++ b/vendor/symfony/dependency-injection/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php b/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php index 828d4071dab35347961d3d97b1fb89e7a19df331..3b4b2a4830f91562e5d1edee81452dad6b3ae4cd 100644 --- a/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php +++ b/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php @@ -45,7 +45,13 @@ final public function extension($namespace, array $config) { if (!$this->container->hasExtension($namespace)) { $extensions = array_filter(array_map(function ($ext) { return $ext->getAlias(); }, $this->container->getExtensions())); - throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in %s). Looked for namespace "%s", found %s', $namespace, $this->file, $namespace, $extensions ? sprintf('"%s"', implode('", "', $extensions)) : 'none')); + throw new InvalidArgumentException(sprintf( + 'There is no extension able to load the configuration for "%s" (in %s). Looked for namespace "%s", found %s', + $namespace, + $this->file, + $namespace, + $extensions ? sprintf('"%s"', implode('", "', $extensions)) : 'none' + )); } $this->container->loadFromExtension($namespace, static::processValue($config)); diff --git a/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php b/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php index bd2902f85681a71efd052c6780245a085a134103..c4b9b69a03ca25c30ab56e0e3a23b55e3c58703c 100644 --- a/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php +++ b/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php @@ -278,7 +278,7 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults) $definition->setDeprecated(true, $deprecated[0]->nodeValue ?: null); } - $definition->setArguments($this->getArgumentsAsPhp($service, 'argument', $file, $definition instanceof ChildDefinition)); + $definition->setArguments($this->getArgumentsAsPhp($service, 'argument', $file, false, $definition instanceof ChildDefinition)); $definition->setProperties($this->getArgumentsAsPhp($service, 'property', $file)); if ($factories = $this->getChildren($service, 'factory')) { @@ -452,10 +452,11 @@ private function processAnonymousServices(\DOMDocument $xml, $file, $defaults) * * @param string $name * @param string $file + * @param bool $lowercase * * @return mixed */ - private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $isChildDefinition = false) + private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $lowercase = true, $isChildDefinition = false) { $arguments = []; foreach ($this->getChildren($node, $name) as $arg) { @@ -505,10 +506,10 @@ private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $isChildDefi $arguments[$key] = new Expression($arg->nodeValue); break; case 'collection': - $arguments[$key] = $this->getArgumentsAsPhp($arg, $name, $file); + $arguments[$key] = $this->getArgumentsAsPhp($arg, $name, $file, false); break; case 'iterator': - $arg = $this->getArgumentsAsPhp($arg, $name, $file); + $arg = $this->getArgumentsAsPhp($arg, $name, $file, false); try { $arguments[$key] = new IteratorArgument($arg); } catch (InvalidArgumentException $e) { diff --git a/vendor/symfony/dependency-injection/README.md b/vendor/symfony/dependency-injection/README.md index cb2d4a11c58869c32458d198a6c5dbe713b66814..932647f94a903d62ac6297c5d9acc638f6c9261a 100644 --- a/vendor/symfony/dependency-injection/README.md +++ b/vendor/symfony/dependency-injection/README.md @@ -7,7 +7,7 @@ way objects are constructed in your application. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/dependency_injection.html) + * [Documentation](https://symfony.com/doc/current/components/dependency_injection/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php index a32a6c973502624468d80e35efa07040a9a51204..c5bcc660a5e48813b25f1a05bcb7b030e3cb7b5e 100644 --- a/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php +++ b/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php @@ -37,7 +37,7 @@ public function testProcess() $container = new ContainerBuilder(); $container->register(Foo::class); - $barDefinition = $container->register('bar', Bar::class); + $barDefinition = $container->register('bar', __NAMESPACE__.'\Bar'); $barDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -75,7 +75,7 @@ public function testProcessAutowireParent() $container = new ContainerBuilder(); $container->register(B::class); - $cDefinition = $container->register('c', C::class); + $cDefinition = $container->register('c', __NAMESPACE__.'\C'); $cDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -97,7 +97,7 @@ public function testProcessLegacyAutowireWithAvailableInterface() $container->setAlias(AInterface::class, B::class); $container->register(B::class); - $cDefinition = $container->register('c', C::class); + $cDefinition = $container->register('c', __NAMESPACE__.'\C'); $cDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -118,7 +118,7 @@ public function testProcessAutowireInterface() $container = new ContainerBuilder(); $container->register(F::class); - $gDefinition = $container->register('g', G::class); + $gDefinition = $container->register('g', __NAMESPACE__.'\G'); $gDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -134,9 +134,9 @@ public function testCompleteExistingDefinition() { $container = new ContainerBuilder(); - $container->register('b', B::class); + $container->register('b', __NAMESPACE__.'\B'); $container->register(DInterface::class, F::class); - $hDefinition = $container->register('h', H::class)->addArgument(new Reference('b')); + $hDefinition = $container->register('h', __NAMESPACE__.'\H')->addArgument(new Reference('b')); $hDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -153,7 +153,7 @@ public function testCompleteExistingDefinitionWithNotDefinedArguments() $container->register(B::class); $container->register(DInterface::class, F::class); - $hDefinition = $container->register('h', H::class)->addArgument('')->addArgument(''); + $hDefinition = $container->register('h', __NAMESPACE__.'\H')->addArgument('')->addArgument(''); $hDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -171,10 +171,10 @@ public function testExceptionsAreStored() { $container = new ContainerBuilder(); - $container->register('c1', CollisionA::class); - $container->register('c2', CollisionB::class); - $container->register('c3', CollisionB::class); - $aDefinition = $container->register('a', CannotBeAutowired::class); + $container->register('c1', __NAMESPACE__.'\CollisionA'); + $container->register('c2', __NAMESPACE__.'\CollisionB'); + $container->register('c3', __NAMESPACE__.'\CollisionB'); + $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired'); $aDefinition->setAutowired(true); $pass = new AutowirePass(false); @@ -188,7 +188,7 @@ public function testPrivateConstructorThrowsAutowireException() $this->expectExceptionMessage('Invalid service "private_service": constructor of class "Symfony\Component\DependencyInjection\Tests\Compiler\PrivateConstructor" must be public.'); $container = new ContainerBuilder(); - $container->autowire('private_service', PrivateConstructor::class); + $container->autowire('private_service', __NAMESPACE__.'\PrivateConstructor'); $pass = new AutowirePass(true); $pass->process($container); @@ -200,10 +200,10 @@ public function testTypeCollision() $this->expectExceptionMessage('Cannot autowire service "a": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\CannotBeAutowired::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists. You should maybe alias this interface to one of these existing services: "c1", "c2", "c3".'); $container = new ContainerBuilder(); - $container->register('c1', CollisionA::class); - $container->register('c2', CollisionB::class); - $container->register('c3', CollisionB::class); - $aDefinition = $container->register('a', CannotBeAutowired::class); + $container->register('c1', __NAMESPACE__.'\CollisionA'); + $container->register('c2', __NAMESPACE__.'\CollisionB'); + $container->register('c3', __NAMESPACE__.'\CollisionB'); + $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired'); $aDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -216,9 +216,9 @@ public function testTypeNotGuessable() $this->expectExceptionMessage('Cannot autowire service "a": argument "$k" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotGuessableArgument::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\Foo" but no such service exists. You should maybe alias this class to one of these existing services: "a1", "a2".'); $container = new ContainerBuilder(); - $container->register('a1', Foo::class); - $container->register('a2', Foo::class); - $aDefinition = $container->register('a', NotGuessableArgument::class); + $container->register('a1', __NAMESPACE__.'\Foo'); + $container->register('a2', __NAMESPACE__.'\Foo'); + $aDefinition = $container->register('a', __NAMESPACE__.'\NotGuessableArgument'); $aDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -231,9 +231,9 @@ public function testTypeNotGuessableWithSubclass() $this->expectExceptionMessage('Cannot autowire service "a": argument "$k" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotGuessableArgumentForSubclass::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\A" but no such service exists. You should maybe alias this class to one of these existing services: "a1", "a2".'); $container = new ContainerBuilder(); - $container->register('a1', B::class); - $container->register('a2', B::class); - $aDefinition = $container->register('a', NotGuessableArgumentForSubclass::class); + $container->register('a1', __NAMESPACE__.'\B'); + $container->register('a2', __NAMESPACE__.'\B'); + $aDefinition = $container->register('a', __NAMESPACE__.'\NotGuessableArgumentForSubclass'); $aDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -246,7 +246,7 @@ public function testTypeNotGuessableNoServicesFound() $this->expectExceptionMessage('Cannot autowire service "a": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\CannotBeAutowired::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists.'); $container = new ContainerBuilder(); - $aDefinition = $container->register('a', CannotBeAutowired::class); + $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired'); $aDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -257,10 +257,10 @@ public function testTypeNotGuessableWithTypeSet() { $container = new ContainerBuilder(); - $container->register('a1', Foo::class); - $container->register('a2', Foo::class); + $container->register('a1', __NAMESPACE__.'\Foo'); + $container->register('a2', __NAMESPACE__.'\Foo'); $container->register(Foo::class, Foo::class); - $aDefinition = $container->register('a', NotGuessableArgument::class); + $aDefinition = $container->register('a', __NAMESPACE__.'\NotGuessableArgument'); $aDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -274,10 +274,10 @@ public function testWithTypeSet() { $container = new ContainerBuilder(); - $container->register('c1', CollisionA::class); - $container->register('c2', CollisionB::class); + $container->register('c1', __NAMESPACE__.'\CollisionA'); + $container->register('c2', __NAMESPACE__.'\CollisionB'); $container->setAlias(CollisionInterface::class, 'c2'); - $aDefinition = $container->register('a', CannotBeAutowired::class); + $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired'); $aDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -296,7 +296,7 @@ public function testCreateDefinition() { $container = new ContainerBuilder(); - $coopTilleulsDefinition = $container->register('coop_tilleuls', LesTilleuls::class); + $coopTilleulsDefinition = $container->register('coop_tilleuls', __NAMESPACE__.'\LesTilleuls'); $coopTilleulsDefinition->setAutowired(true); $pass = new AutowirePass(); @@ -307,13 +307,13 @@ public function testCreateDefinition() $this->assertEquals('autowired.Symfony\Component\DependencyInjection\Tests\Compiler\Dunglas', $container->getDefinition('coop_tilleuls')->getArgument(1)); $dunglasDefinition = $container->getDefinition('autowired.Symfony\Component\DependencyInjection\Tests\Compiler\Dunglas'); - $this->assertEquals(Dunglas::class, $dunglasDefinition->getClass()); + $this->assertEquals(__NAMESPACE__.'\Dunglas', $dunglasDefinition->getClass()); $this->assertFalse($dunglasDefinition->isPublic()); $this->assertCount(1, $dunglasDefinition->getArguments()); $this->assertEquals('autowired.Symfony\Component\DependencyInjection\Tests\Compiler\Lille', $dunglasDefinition->getArgument(0)); $lilleDefinition = $container->getDefinition('autowired.Symfony\Component\DependencyInjection\Tests\Compiler\Lille'); - $this->assertEquals(Lille::class, $lilleDefinition->getClass()); + $this->assertEquals(__NAMESPACE__.'\Lille', $lilleDefinition->getClass()); } public function testResolveParameter() @@ -337,7 +337,7 @@ public function testOptionalParameter() $container->register(A::class); $container->register(Foo::class); - $optDefinition = $container->register('opt', OptionalParameter::class); + $optDefinition = $container->register('opt', __NAMESPACE__.'\OptionalParameter'); $optDefinition->setAutowired(true); (new ResolveClassPass())->process($container); @@ -354,7 +354,7 @@ public function testDontTriggerAutowiring() $container = new ContainerBuilder(); $container->register(Foo::class); - $container->register('bar', Bar::class); + $container->register('bar', __NAMESPACE__.'\Bar'); (new ResolveClassPass())->process($container); (new AutowirePass())->process($container); @@ -368,7 +368,7 @@ public function testClassNotFoundThrowsException() $this->expectExceptionMessage('Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class was not found.'); $container = new ContainerBuilder(); - $aDefinition = $container->register('a', BadTypeHintedArgument::class); + $aDefinition = $container->register('a', __NAMESPACE__.'\BadTypeHintedArgument'); $aDefinition->setAutowired(true); $container->register(Dunglas::class, Dunglas::class); @@ -384,7 +384,7 @@ public function testParentClassNotFoundThrowsException() $container = new ContainerBuilder(); - $aDefinition = $container->register('a', BadParentTypeHintedArgument::class); + $aDefinition = $container->register('a', __NAMESPACE__.'\BadParentTypeHintedArgument'); $aDefinition->setAutowired(true); $container->register(Dunglas::class, Dunglas::class); @@ -404,8 +404,8 @@ public function testDontUseAbstractServices() $container = new ContainerBuilder(); $container->register(Foo::class)->setAbstract(true); - $container->register('foo', Foo::class); - $container->register('bar', Bar::class)->setAutowired(true); + $container->register('foo', __NAMESPACE__.'\Foo'); + $container->register('bar', __NAMESPACE__.'\Bar')->setAutowired(true); (new ResolveClassPass())->process($container); (new AutowirePass())->process($container); @@ -418,7 +418,7 @@ public function testSomeSpecificArgumentsAreSet() $container->register('foo', Foo::class); $container->register(A::class); $container->register(Dunglas::class); - $container->register('multiple', MultipleArguments::class) + $container->register('multiple', __NAMESPACE__.'\MultipleArguments') ->setAutowired(true) // set the 2nd (index 1) argument only: autowire the first and third // args are: A, Foo, Dunglas @@ -450,7 +450,7 @@ public function testScalarArgsCannotBeAutowired() $container->register(A::class); $container->register(Dunglas::class); - $container->register('arg_no_type_hint', MultipleArguments::class) + $container->register('arg_no_type_hint', __NAMESPACE__.'\MultipleArguments') ->setArguments([1 => 'foo']) ->setAutowired(true); @@ -466,7 +466,7 @@ public function testNoTypeArgsCannotBeAutowired() $container->register(A::class); $container->register(Dunglas::class); - $container->register('arg_no_type_hint', MultipleArguments::class) + $container->register('arg_no_type_hint', __NAMESPACE__.'\MultipleArguments') ->setAutowired(true); (new ResolveClassPass())->process($container); @@ -479,7 +479,7 @@ public function testOptionalScalarNotReallyOptionalUsesDefaultValue() $container->register(A::class); $container->register(Lille::class); - $definition = $container->register('not_really_optional_scalar', MultipleArgumentsOptionalScalarNotReallyOptional::class) + $definition = $container->register('not_really_optional_scalar', __NAMESPACE__.'\MultipleArgumentsOptionalScalarNotReallyOptional') ->setAutowired(true); (new ResolveClassPass())->process($container); @@ -494,7 +494,7 @@ public function testOptionalScalarArgsDontMessUpOrder() $container->register(A::class); $container->register(Lille::class); - $container->register('with_optional_scalar', MultipleArgumentsOptionalScalar::class) + $container->register('with_optional_scalar', __NAMESPACE__.'\MultipleArgumentsOptionalScalar') ->setAutowired(true); (new ResolveClassPass())->process($container); @@ -518,7 +518,7 @@ public function testOptionalScalarArgsNotPassedIfLast() $container->register(A::class); $container->register(Lille::class); - $container->register('with_optional_scalar_last', MultipleArgumentsOptionalScalarLast::class) + $container->register('with_optional_scalar_last', __NAMESPACE__.'\MultipleArgumentsOptionalScalarLast') ->setAutowired(true); (new ResolveClassPass())->process($container); @@ -659,7 +659,7 @@ public function testTypedReference() public function testCreateResourceForClass($className, $isEqual) { $startingResource = AutowirePass::createResourceForClass( - new \ReflectionClass(ClassForResource::class) + new \ReflectionClass(__NAMESPACE__.'\ClassForResource') ); $newResource = AutowirePass::createResourceForClass( new \ReflectionClass(__NAMESPACE__.'\\'.$className) @@ -690,9 +690,9 @@ public function testIgnoreServiceWithClassNotExisting() { $container = new ContainerBuilder(); - $container->register('class_not_exist', OptionalServiceClass::class); + $container->register('class_not_exist', __NAMESPACE__.'\OptionalServiceClass'); - $barDefinition = $container->register('bar', Bar::class); + $barDefinition = $container->register('bar', __NAMESPACE__.'\Bar'); $barDefinition->setAutowired(true); $container->register(Foo::class, Foo::class); @@ -750,8 +750,8 @@ public function testProcessDoesNotTriggerDeprecations() { $container = new ContainerBuilder(); $container->register('deprecated', 'Symfony\Component\DependencyInjection\Tests\Fixtures\DeprecatedClass')->setDeprecated(true); - $container->register('foo', Foo::class); - $container->register('bar', Bar::class)->setAutowired(true); + $container->register('foo', __NAMESPACE__.'\Foo'); + $container->register('bar', __NAMESPACE__.'\Bar')->setAutowired(true); $pass = new AutowirePass(); $pass->process($container); @@ -767,7 +767,7 @@ public function testEmptyStringIsKept() $container->register(A::class); $container->register(Lille::class); - $container->register('foo', MultipleArgumentsOptionalScalar::class) + $container->register('foo', __NAMESPACE__.'\MultipleArgumentsOptionalScalar') ->setAutowired(true) ->setArguments(['', '']); diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php index bfd3d67238277d86e72809ac8c1222985b8e7818..fd526caa94264279481bddd712f335171155e690 100644 --- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php +++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php @@ -18,6 +18,7 @@ use Symfony\Component\DependencyInjection\Compiler\ResolveBindingsPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass; use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy; diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php index 06399614392e5b45e5c0ef4a04cc576fe370cc30..5aa6471751f24b18e00837ab7b6161d0bb441a66 100644 --- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php +++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php @@ -14,7 +14,6 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\Compiler\ResolveParameterPlaceHoldersPass; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; class ResolveParameterPlaceHoldersPassTest extends TestCase { @@ -72,31 +71,6 @@ public function testBindingsShouldBeResolved() $this->assertSame($this->container->getParameterBag()->resolveValue('%env(BAZ)%'), $boundValue); } - public function testParameterNotFoundExceptionsIsThrown() - { - $this->expectException(ParameterNotFoundException::class); - $this->expectExceptionMessage('The service "baz_service_id" has a dependency on a non-existent parameter "non_existent_param".'); - - $containerBuilder = new ContainerBuilder(); - $definition = $containerBuilder->register('baz_service_id'); - $definition->setArgument(0, '%non_existent_param%'); - - $pass = new ResolveParameterPlaceHoldersPass(); - $pass->process($containerBuilder); - } - - public function testParameterNotFoundExceptionsIsNotThrown() - { - $containerBuilder = new ContainerBuilder(); - $definition = $containerBuilder->register('baz_service_id'); - $definition->setArgument(0, '%non_existent_param%'); - - $pass = new ResolveParameterPlaceHoldersPass(true, false); - $pass->process($containerBuilder); - - $this->assertCount(1, $definition->getErrors()); - } - private function createContainerBuilder() { $containerBuilder = new ContainerBuilder(); diff --git a/vendor/symfony/dependency-injection/Tests/Config/AutowireServiceResourceTest.php b/vendor/symfony/dependency-injection/Tests/Config/AutowireServiceResourceTest.php index 990a9ad6639b3dbb63c132bdd6204e68c25040bc..153e0807ef862694ba7733471f40a73dfc96833a 100644 --- a/vendor/symfony/dependency-injection/Tests/Config/AutowireServiceResourceTest.php +++ b/vendor/symfony/dependency-injection/Tests/Config/AutowireServiceResourceTest.php @@ -34,7 +34,7 @@ protected function setUp() $this->time = time(); touch($this->file, $this->time); - $this->class = Foo::class; + $this->class = __NAMESPACE__.'\Foo'; $this->resource = new AutowireServiceResource( $this->class, $this->file, @@ -83,7 +83,7 @@ public function testIsNotFreshChangedResource() public function testIsFreshSameConstructorArgs() { $oldResource = AutowirePass::createResourceForClass( - new \ReflectionClass(Foo::class) + new \ReflectionClass(__NAMESPACE__.'\Foo') ); // test with a stale file *but* the resource will not be changed diff --git a/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php b/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php index 53d62a58d214ff1cfd72e35e112980bf632a5e56..f2666ef9629b30c176498c7df20f2437d43654b8 100644 --- a/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php +++ b/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php @@ -1238,7 +1238,7 @@ public function testAutowiring() $container = new ContainerBuilder(); $container->register(A::class)->setPublic(true); - $bDefinition = $container->register('b', B::class); + $bDefinition = $container->register('b', __NAMESPACE__.'\B'); $bDefinition->setAutowired(true); $bDefinition->setPublic(true); diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php b/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php index edcd045eaabbbefcd4397b0f6098e1a9510f1716..5b3c01c23cd52dde4001a3fdcab6de6ab445af2b 100644 --- a/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php +++ b/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php @@ -9,17 +9,6 @@ 'bar' => 'foo is %%foo bar', 'escape' => '@escapeme', 'values' => [true, false, null, 0, 1000.3, 'true', 'false', 'null'], - 'null string' => 'null', - 'string of digits' => '123', - 'string of digits prefixed with minus character' => '-123', - 'true string' => 'true', - 'false string' => 'false', - 'binary number string' => '0b0110', - 'numeric string' => '-1.2E2', - 'hexadecimal number string' => '0xFF', - 'float string' => '10100.1', - 'positive float string' => '+10100.1', - 'negative float string' => '-10100.1', ])); return $container; diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php index e7a0214a10f536f7b75e17ade061b3066002ff1c..ce4815ef81975e814d85cfb9fe99fa3c1967da06 100644 --- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php +++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php @@ -151,17 +151,6 @@ protected function getDefaultParameters() 6 => 'false', 7 => 'null', ], - 'null string' => 'null', - 'string of digits' => '123', - 'string of digits prefixed with minus character' => '-123', - 'true string' => 'true', - 'false string' => 'false', - 'binary number string' => '0b0110', - 'numeric string' => '-1.2E2', - 'hexadecimal number string' => '0xFF', - 'float string' => '10100.1', - 'positive float string' => '+10100.1', - 'negative float string' => '-10100.1', ]; } } diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml b/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml index 4b07bbb7da50caaf550f334bc753f1d10bccea98..d0f9015c5a5473f014b1db884937f94722d4dda9 100644 --- a/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml +++ b/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml @@ -18,17 +18,6 @@ <parameter type="string">false</parameter> <parameter type="string">null</parameter> </parameter> - <parameter key="null string" type="string">null</parameter> - <parameter key="string of digits" type="string">123</parameter> - <parameter key="string of digits prefixed with minus character" type="string">-123</parameter> - <parameter key="true string" type="string">true</parameter> - <parameter key="false string" type="string">false</parameter> - <parameter key="binary number string" type="string">0b0110</parameter> - <parameter key="numeric string" type="string">-1.2E2</parameter> - <parameter key="hexadecimal number string" type="string">0xFF</parameter> - <parameter key="float string" type="string">10100.1</parameter> - <parameter key="positive float string" type="string">+10100.1</parameter> - <parameter key="negative float string" type="string">-10100.1</parameter> </parameters> <services> <service id="service_container" class="Symfony\Component\DependencyInjection\ContainerInterface" public="true" synthetic="true"/> diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml b/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml index 002b1d4bcd3a87946f8d31352cbe12a0fc1aa1a1..4e37bc9315c9b7c41cbeb9dd1424988920c5eaaa 100644 --- a/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml +++ b/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml @@ -4,17 +4,6 @@ parameters: bar: 'foo is %%foo bar' escape: '@@escapeme' values: [true, false, null, 0, 1000.3, 'true', 'false', 'null'] - null string: 'null' - string of digits: '123' - string of digits prefixed with minus character: '-123' - true string: 'true' - false string: 'false' - binary number string: '0b0110' - numeric string: '-1.2E2' - hexadecimal number string: '0xFF' - float string: '10100.1' - positive float string: '+10100.1' - negative float string: '-10100.1' services: service_container: diff --git a/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php index cce3921853e5d9adaceb74e3b5ed318db1d8d87f..1d187848b3b39019eab97f50e3a92056fc81944a 100644 --- a/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php +++ b/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php @@ -349,9 +349,6 @@ public function testParsesIteratorArgument() $lazyDefinition = $container->getDefinition('lazy_context'); $this->assertEquals([new IteratorArgument(['k1' => new Reference('foo.baz'), 'k2' => new Reference('service_container')]), new IteratorArgument([])], $lazyDefinition->getArguments(), '->load() parses lazy arguments'); - - $message = 'The "deprecated_service" service is deprecated. You should stop using it, as it will soon be removed.'; - $this->assertSame($message, $container->getDefinition('deprecated_service')->getDeprecationMessage('deprecated_service')); } public function testAutowire() @@ -720,17 +717,4 @@ public function testOverriddenDefaultsBindings() $this->assertSame('overridden', $container->get('bar')->quz); } - - /** - * @group legacy - * @expectedDeprecation The configuration key "factory" is unsupported for the service "foo" which is defined as an alias in %s. - * @expectedDeprecation The configuration key "parent" is unsupported for the service "foo" which is defined as an alias in %s. - */ - public function testAliasDefinitionContainsUnsupportedElements() - { - $container = new ContainerBuilder(); - $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml')); - $loader->load('legacy_invalid_alias_definition.yml'); - $this->assertTrue($container->has('foo')); - } } diff --git a/vendor/symfony/event-dispatcher/LICENSE b/vendor/symfony/event-dispatcher/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/event-dispatcher/LICENSE +++ b/vendor/symfony/event-dispatcher/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/event-dispatcher/README.md b/vendor/symfony/event-dispatcher/README.md index e0d38eed017f8f46eac131d33e05ac2bdac4929b..185c3fecf8fee623ac3b03005fd32ec302147bd4 100644 --- a/vendor/symfony/event-dispatcher/README.md +++ b/vendor/symfony/event-dispatcher/README.md @@ -8,7 +8,7 @@ them. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/event_dispatcher.html) + * [Documentation](https://symfony.com/doc/current/components/event_dispatcher/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/http-foundation/BinaryFileResponse.php b/vendor/symfony/http-foundation/BinaryFileResponse.php index c2f66d6952ab27b7f796c7fd38371381c6aa79e3..f43114111b0761aa3bf01680b5284f231ab53721 100644 --- a/vendor/symfony/http-foundation/BinaryFileResponse.php +++ b/vendor/symfony/http-foundation/BinaryFileResponse.php @@ -217,7 +217,7 @@ public function prepare(Request $request) } if ('x-accel-redirect' === strtolower($type)) { // Do X-Accel-Mapping substitutions. - // @link https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-redirect + // @link http://wiki.nginx.org/X-accel#X-Accel-Redirect foreach (explode(',', $request->headers->get('X-Accel-Mapping', '')) as $mapping) { $mapping = explode('=', $mapping, 2); @@ -348,7 +348,7 @@ public static function trustXSendfileTypeHeader() } /** - * If this is set to true, the file will be unlinked after the request is sent + * If this is set to true, the file will be unlinked after the request is send * Note: If the X-Sendfile header is used, the deleteFileAfterSend setting will not be used. * * @param bool $shouldDelete diff --git a/vendor/symfony/http-foundation/LICENSE b/vendor/symfony/http-foundation/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/http-foundation/LICENSE +++ b/vendor/symfony/http-foundation/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/http-foundation/README.md b/vendor/symfony/http-foundation/README.md index ac98f9b80ad5de3f85f6d797f05b5cfecf382d82..8907f0b9678966d1ca561d4963ddfb239da99609 100644 --- a/vendor/symfony/http-foundation/README.md +++ b/vendor/symfony/http-foundation/README.md @@ -7,7 +7,7 @@ specification. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/http_foundation.html) + * [Documentation](https://symfony.com/doc/current/components/http_foundation/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/http-foundation/RedirectResponse.php b/vendor/symfony/http-foundation/RedirectResponse.php index a19efba3e3d5efacdc279d5ed8806ba1a70fbed4..4e3cb4f77b28b81501cb0f572d40bd8b4b3bffdd 100644 --- a/vendor/symfony/http-foundation/RedirectResponse.php +++ b/vendor/symfony/http-foundation/RedirectResponse.php @@ -93,7 +93,7 @@ public function setTargetUrl($url) <html> <head> <meta charset="UTF-8" /> - <meta http-equiv="refresh" content="0;url=\'%1$s\'" /> + <meta http-equiv="refresh" content="0;url=%1$s" /> <title>Redirecting to %1$s</title> </head> diff --git a/vendor/symfony/http-foundation/ResponseHeaderBag.php b/vendor/symfony/http-foundation/ResponseHeaderBag.php index e11b98a10f65bd8851603365e699ea622d63991b..1dc8dc2c5f65137cf9c05d192e67c159ed5f70c1 100644 --- a/vendor/symfony/http-foundation/ResponseHeaderBag.php +++ b/vendor/symfony/http-foundation/ResponseHeaderBag.php @@ -309,13 +309,13 @@ public function makeDisposition($disposition, $filename, $filenameFallback = '') */ protected function computeCacheControlValue() { - if (!$this->cacheControl) { - if ($this->has('Last-Modified') || $this->has('Expires')) { - return 'private, must-revalidate'; // allows for heuristic expiration (RFC 7234 Section 4.2.2) in the case of "Last-Modified" - } + if (!$this->cacheControl && !$this->has('ETag') && !$this->has('Last-Modified') && !$this->has('Expires')) { + return 'no-cache, private'; + } + if (!$this->cacheControl) { // conservative by default - return 'no-cache, private'; + return 'private, must-revalidate'; } $header = $this->getCacheControlHeader(); diff --git a/vendor/symfony/http-foundation/ServerBag.php b/vendor/symfony/http-foundation/ServerBag.php index f3b64023489ef015627eaaadeeb7323dff3dff1d..4c82b1774873ff32a3a5274a920f17857e44aa06 100644 --- a/vendor/symfony/http-foundation/ServerBag.php +++ b/vendor/symfony/http-foundation/ServerBag.php @@ -46,13 +46,13 @@ public function getHeaders() /* * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default * For this workaround to work, add these lines to your .htaccess file: - * RewriteCond %{HTTP:Authorization} .+ - * RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] + * RewriteCond %{HTTP:Authorization} ^(.+)$ + * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] * * A sample .htaccess file: * RewriteEngine On - * RewriteCond %{HTTP:Authorization} .+ - * RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] + * RewriteCond %{HTTP:Authorization} ^(.+)$ + * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] * RewriteCond %{REQUEST_FILENAME} !-f * RewriteRule ^(.*)$ app.php [QSA,L] */ diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php index 653ca6917bbc168d6fe96cbe5a6953ef1905ff77..f9e5d1e8f04d827b672a6e736402033282454b60 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php @@ -218,7 +218,7 @@ public function createTable() // - trailing space removal // - case-insensitivity // - language processing like é == e - $sql = "CREATE TABLE $this->table ($this->idCol VARBINARY(128) NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol INTEGER UNSIGNED NOT NULL, $this->timeCol INTEGER UNSIGNED NOT NULL) COLLATE utf8mb4_bin, ENGINE = InnoDB"; + $sql = "CREATE TABLE $this->table ($this->idCol VARBINARY(128) NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol MEDIUMINT NOT NULL, $this->timeCol INTEGER UNSIGNED NOT NULL) COLLATE utf8_bin, ENGINE = InnoDB"; break; case 'sqlite': $sql = "CREATE TABLE $this->table ($this->idCol TEXT NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol INTEGER NOT NULL, $this->timeCol INTEGER NOT NULL)"; diff --git a/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php b/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php index df7da3c72f0464eba7ab04e5941eae215a997944..4c5873728a19d6c3b49fa15e3172abbaad74ee52 100644 --- a/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php +++ b/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php @@ -375,11 +375,13 @@ public function setOptions(array $options) * ini_set('session.save_path', '/tmp'); * * or pass in a \SessionHandler instance which configures session.save_handler in the - * constructor, for a template see NativeFileSessionHandler. + * constructor, for a template see NativeFileSessionHandler or use handlers in + * composer package drak/native-session * * @see https://php.net/session-set-save-handler * @see https://php.net/sessionhandlerinterface * @see https://php.net/sessionhandler + * @see https://github.com/zikula/NativeSession * * @param \SessionHandlerInterface|null $saveHandler * diff --git a/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php b/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php index 2bbf5aa1aea5a0a9e87bc7a341a5de5eeb192fbf..e1ff3bf2bdb98ba6374695cc26c0778d811f9591 100644 --- a/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php +++ b/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php @@ -20,7 +20,10 @@ public function testGenerateMetaRedirect() { $response = new RedirectResponse('foo.bar'); - $this->assertRegExp('#<meta http-equiv="refresh" content="\d+;url=\'foo\.bar\'" />#', preg_replace('/\s+/', ' ', $response->getContent())); + $this->assertEquals(1, preg_match( + '#<meta http-equiv="refresh" content="\d+;url=foo\.bar" />#', + preg_replace(['/\s+/', '/\'/'], [' ', '"'], $response->getContent()) + )); } public function testRedirectResponseConstructorNullUrl() diff --git a/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php b/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php index 4e3a6c82b5513dad7145ec7ce0575eb8c1fdde4d..d85f6e112fd12e460a00851d1a8911d36ec6fa96 100644 --- a/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php +++ b/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php @@ -51,9 +51,9 @@ public function testCacheControlHeader() $this->assertTrue($bag->hasCacheControlDirective('public')); $bag = new ResponseHeaderBag(['ETag' => 'abcde']); - $this->assertEquals('no-cache, private', $bag->get('Cache-Control')); + $this->assertEquals('private, must-revalidate', $bag->get('Cache-Control')); $this->assertTrue($bag->hasCacheControlDirective('private')); - $this->assertTrue($bag->hasCacheControlDirective('no-cache')); + $this->assertTrue($bag->hasCacheControlDirective('must-revalidate')); $this->assertFalse($bag->hasCacheControlDirective('max-age')); $bag = new ResponseHeaderBag(['Expires' => 'Wed, 16 Feb 2011 14:17:43 GMT']); diff --git a/vendor/symfony/http-kernel/HttpCache/HttpCache.php b/vendor/symfony/http-kernel/HttpCache/HttpCache.php index da60e74642cb4598cec14f386d2db2d9125a0c59..addeca8bae1435741d50c3861023c96e8067349d 100644 --- a/vendor/symfony/http-kernel/HttpCache/HttpCache.php +++ b/vendor/symfony/http-kernel/HttpCache/HttpCache.php @@ -323,10 +323,6 @@ protected function lookup(Request $request, $catch = false) return $this->validate($request, $entry, $catch); } - if ($entry->headers->hasCacheControlDirective('no-cache')) { - return $this->validate($request, $entry, $catch); - } - $this->record($request, 'fresh'); $entry->headers->set('Age', $entry->getAge()); @@ -356,9 +352,7 @@ protected function validate(Request $request, Response $entry, $catch = false) } // add our cached last-modified validator - if ($entry->headers->has('Last-Modified')) { - $subRequest->headers->set('if_modified_since', $entry->headers->get('Last-Modified')); - } + $subRequest->headers->set('if_modified_since', $entry->headers->get('Last-Modified')); // Add our cached etag validator to the environment. // We keep the etags from the client to handle the case when the client diff --git a/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php b/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php index aee689e1cea3da3892c5a11b26aeba27513b907d..3bdf0f5199891b2cd93031199a39993f50892a45 100644 --- a/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php +++ b/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php @@ -110,6 +110,8 @@ public function update(Response $response) $response->headers->set('Age', $this->age); if ($this->isNotCacheableResponseEmbedded) { + $response->setExpires($response->getDate()); + if ($this->flagDirectives['no-store']) { $response->headers->set('Cache-Control', 'no-cache, no-store, must-revalidate'); } else { diff --git a/vendor/symfony/http-kernel/HttpKernel.php b/vendor/symfony/http-kernel/HttpKernel.php index 9769d5e802b2d95e1abb39d60837afd955c0d1ad..bca2cd1688e8e39164229f98ad7f5bf1ddf97263 100644 --- a/vendor/symfony/http-kernel/HttpKernel.php +++ b/vendor/symfony/http-kernel/HttpKernel.php @@ -62,7 +62,7 @@ public function __construct(EventDispatcherInterface $dispatcher, ControllerReso */ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { - $request->headers->set('X-Php-Ob-Level', (string) ob_get_level()); + $request->headers->set('X-Php-Ob-Level', ob_get_level()); try { return $this->handleRaw($request, $type); diff --git a/vendor/symfony/http-kernel/Kernel.php b/vendor/symfony/http-kernel/Kernel.php index 463b49174fbf3392b6cdfc3090e327e42e3bce25..05b11f3665c5c993fdb2c7f6211736c6ef3d9ae4 100644 --- a/vendor/symfony/http-kernel/Kernel.php +++ b/vendor/symfony/http-kernel/Kernel.php @@ -67,11 +67,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private $requestStackSize = 0; private $resetServices = false; - const VERSION = '3.4.37'; - const VERSION_ID = 30437; + const VERSION = '3.4.35'; + const VERSION_ID = 30435; const MAJOR_VERSION = 3; const MINOR_VERSION = 4; - const RELEASE_VERSION = 37; + const RELEASE_VERSION = 35; const EXTRA_VERSION = ''; const END_OF_MAINTENANCE = '11/2020'; diff --git a/vendor/symfony/http-kernel/LICENSE b/vendor/symfony/http-kernel/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/http-kernel/LICENSE +++ b/vendor/symfony/http-kernel/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/http-kernel/README.md b/vendor/symfony/http-kernel/README.md index abdaf513f9cde11b0993d61a304928eb1dbe7725..cc5e74b6bca3bc4277de7ee05b0bb74aa3835940 100644 --- a/vendor/symfony/http-kernel/README.md +++ b/vendor/symfony/http-kernel/README.md @@ -9,7 +9,7 @@ an advanced CMS system (Drupal). Resources --------- - * [Documentation](https://symfony.com/doc/current/components/http_kernel.html) + * [Documentation](https://symfony.com/doc/current/components/http_kernel/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php index bdb2a00f4be5a8c37c3d02d98657f3d27310c0b8..1f8ddb83143f4abf85799ba6ae0a9eb29735637a 100644 --- a/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php +++ b/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php @@ -71,7 +71,7 @@ public function testGetControllerInvokableService() public function testGetControllerInvokableServiceWithClassNameAsName() { $invokableController = new InvokableController('bar'); - $className = InvokableController::class; + $className = __NAMESPACE__.'\InvokableController'; $container = $this->createMockContainer(); $container->expects($this->once()) diff --git a/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php b/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php index e5c62a87caf743524d380da06bca2db8d96a09fe..1c0c4648a0f2a7772a40ab4e798b07095ce389f9 100644 --- a/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php +++ b/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php @@ -48,7 +48,7 @@ public function testSignature2() $this->assertEquals([ new ArgumentMetadata('foo', self::class, false, true, null, true), - new ArgumentMetadata('bar', FakeClassThatDoesNotExist::class, false, true, null, true), + new ArgumentMetadata('bar', __NAMESPACE__.'\FakeClassThatDoesNotExist', false, true, null, true), new ArgumentMetadata('baz', 'Fake\ImportedAndFake', false, true, null, true), ], $arguments); } @@ -58,7 +58,7 @@ public function testSignature3() $arguments = $this->factory->createArgumentMetadata([$this, 'signature3']); $this->assertEquals([ - new ArgumentMetadata('bar', FakeClassThatDoesNotExist::class, false, false, null), + new ArgumentMetadata('bar', __NAMESPACE__.'\FakeClassThatDoesNotExist', false, false, null), new ArgumentMetadata('baz', 'Fake\ImportedAndFake', false, false, null), ], $arguments); } diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php index 9b6264be3920c7ddd249238ee7d502cb781c1695..5e97267da5423ed195a12fd0811c95c28e3ed327 100644 --- a/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php +++ b/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php @@ -99,7 +99,7 @@ public function provideControllerCallables() '"Regular" callable', [$this, 'testControllerInspection'], [ - 'class' => RequestDataCollectorTest::class, + 'class' => __NAMESPACE__.'\RequestDataCollectorTest', 'method' => 'testControllerInspection', 'file' => __FILE__, 'line' => $r1->getStartLine(), diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php index ef201de6cf15f463c86081fa0244470e37c47d96..a50e09fb14f93d1777822163f06e78348967437c 100644 --- a/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php +++ b/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php @@ -443,22 +443,6 @@ public function testCachesResponsesWithExplicitNoCacheDirective() $this->assertTrue($this->response->headers->has('Age')); } - public function testRevalidatesResponsesWithNoCacheDirectiveEvenIfFresh() - { - $this->setNextResponse(200, ['Cache-Control' => 'public, no-cache, max-age=10', 'ETag' => 'some-etag'], 'OK'); - $this->request('GET', '/'); // warm the cache - - sleep(5); - - $this->setNextResponse(304, ['Cache-Control' => 'public, no-cache, max-age=10', 'ETag' => 'some-etag']); - $this->request('GET', '/'); - - $this->assertHttpKernelIsCalled(); // no-cache -> MUST have revalidated at origin - $this->assertTraceContains('valid'); - $this->assertEquals('OK', $this->response->getContent()); - $this->assertEquals(0, $this->response->getAge()); - } - public function testCachesResponsesWithAnExpirationHeader() { $time = \DateTime::createFromFormat('U', time() + 5); @@ -875,7 +859,6 @@ public function testValidatesCachedResponsesUseSameHttpMethod() public function testValidatesCachedResponsesWithETagAndNoFreshnessInformation() { $this->setNextResponse(200, [], 'Hello World', function ($request, $response) { - $this->assertFalse($request->headers->has('If-Modified-Since')); $response->headers->set('Cache-Control', 'public'); $response->headers->set('ETag', '"12345"'); if ($response->getETag() == $request->headers->get('IF_NONE_MATCH')) { @@ -1258,6 +1241,7 @@ public function testEsiCacheForceValidation() $this->request('GET', '/', [], [], true); $this->assertEquals('Hello World! My name is Bobby.', $this->response->getContent()); $this->assertNull($this->response->getTtl()); + $this->assertTrue($this->response->mustRevalidate()); $this->assertTrue($this->response->headers->hasCacheControlDirective('private')); $this->assertTrue($this->response->headers->hasCacheControlDirective('no-cache')); } @@ -1288,6 +1272,7 @@ public function testEsiCacheForceValidationForHeadRequests() // This can neither be cached nor revalidated, so it should be private/no cache $this->assertEmpty($this->response->getContent()); $this->assertNull($this->response->getTtl()); + $this->assertTrue($this->response->mustRevalidate()); $this->assertTrue($this->response->headers->hasCacheControlDirective('private')); $this->assertTrue($this->response->headers->hasCacheControlDirective('no-cache')); } diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json index 2596c745d52577c4f8b0b924926984f5dd37977c..090f923ef1dcb151a058806d94a8c658e4889136 100644 --- a/vendor/symfony/polyfill-ctype/composer.json +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } } } diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/translit.php b/vendor/symfony/polyfill-iconv/Resources/charset/translit.php index ed59858dc4ee1bb7b94ef4c5f1ab633722e795ce..829ea127595175645282934f798c4f5c16098ede 100644 --- a/vendor/symfony/polyfill-iconv/Resources/charset/translit.php +++ b/vendor/symfony/polyfill-iconv/Resources/charset/translit.php @@ -866,7 +866,6 @@ '㋼' => '(ヰ)', '㋽' => '(ヱ)', '㋾' => '(ヲ)', - '㋿' => '令和', '㌀' => 'アパート', '㌁' => 'アルファ', '㌂' => 'アンペア', @@ -3134,7 +3133,6 @@ '🈸' => '申', '🈹' => '割', '🈺' => '営', - '🈻' => '配', '🉀' => '〔本〕', '🉁' => '〔三〕', '🉂' => '〔二〕', @@ -3880,104 +3878,6 @@ 'ỽ' => 'v', 'Ỿ' => 'Y', 'ỿ' => 'y', - 'Ⱡ' => 'L', - 'ⱡ' => 'l', - 'Ɫ' => 'L', - 'Ᵽ' => 'P', - 'Ɽ' => 'R', - 'ⱥ' => 'a', - 'ⱦ' => 't', - 'Ⱨ' => 'H', - 'ⱨ' => 'h', - 'Ⱪ' => 'K', - 'ⱪ' => 'k', - 'Ⱬ' => 'Z', - 'ⱬ' => 'z', - 'Ɱ' => 'M', - 'ⱱ' => 'v', - 'Ⱳ' => 'W', - 'ⱳ' => 'w', - 'ⱴ' => 'v', - 'ⱸ' => 'e', - 'ⱺ' => 'o', - 'Ȿ' => 'S', - 'Ɀ' => 'Z', - 'ꜰ' => 'F', - 'ꜱ' => 'S', - 'Ꜳ' => 'AA', - 'ꜳ' => 'aa', - 'Ꜵ' => 'AO', - 'ꜵ' => 'ao', - 'Ꜷ' => 'AU', - 'ꜷ' => 'au', - 'Ꜹ' => 'AV', - 'ꜹ' => 'av', - 'Ꜻ' => 'AV', - 'ꜻ' => 'av', - 'Ꜽ' => 'AY', - 'ꜽ' => 'ay', - 'Ꝁ' => 'K', - 'ꝁ' => 'k', - 'Ꝃ' => 'K', - 'ꝃ' => 'k', - 'Ꝅ' => 'K', - 'ꝅ' => 'k', - 'Ꝇ' => 'L', - 'ꝇ' => 'l', - 'Ꝉ' => 'L', - 'ꝉ' => 'l', - 'Ꝋ' => 'O', - 'ꝋ' => 'o', - 'Ꝍ' => 'O', - 'ꝍ' => 'o', - 'Ꝏ' => 'OO', - 'ꝏ' => 'oo', - 'Ꝑ' => 'P', - 'ꝑ' => 'p', - 'Ꝓ' => 'P', - 'ꝓ' => 'p', - 'Ꝕ' => 'P', - 'ꝕ' => 'p', - 'Ꝗ' => 'Q', - 'ꝗ' => 'q', - 'Ꝙ' => 'Q', - 'ꝙ' => 'q', - 'Ꝟ' => 'V', - 'ꝟ' => 'v', - 'Ꝡ' => 'VY', - 'ꝡ' => 'vy', - 'Ꝥ' => 'TH', - 'ꝥ' => 'th', - 'Ꝧ' => 'TH', - 'ꝧ' => 'th', - 'ꝱ' => 'd', - 'ꝲ' => 'l', - 'ꝳ' => 'm', - 'ꝴ' => 'n', - 'ꝵ' => 'r', - 'ꝶ' => 'R', - 'ꝷ' => 't', - 'Ꝺ' => 'D', - 'ꝺ' => 'd', - 'Ꝼ' => 'F', - 'ꝼ' => 'f', - 'Ꞇ' => 'T', - 'ꞇ' => 't', - 'Ꞑ' => 'N', - 'ꞑ' => 'n', - 'Ꞓ' => 'C', - 'ꞓ' => 'c', - 'Ꞡ' => 'G', - 'ꞡ' => 'g', - 'Ꞣ' => 'K', - 'ꞣ' => 'k', - 'Ꞥ' => 'N', - 'ꞥ' => 'n', - 'Ꞧ' => 'R', - 'ꞧ' => 'r', - 'Ꞩ' => 'S', - 'ꞩ' => 's', - 'Ɦ' => 'H', '©' => '(C)', '®' => '(R)', '₠' => 'CE', @@ -3987,28 +3887,8 @@ '₧' => 'Pts', '₺' => 'TL', '₹' => 'Rs', - '℗' => '(P)', - '℘' => 'P', '℞' => 'Rx', '〇' => '0', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - 'ʹ' => '\'', - 'ʺ' => '"', - 'ʻ' => '\'', - 'ʼ' => '\'', - 'ʽ' => '\'', - 'ˈ' => '\'', - 'ˋ' => '`', '‘' => '\'', '’' => '\'', '‚' => ',', @@ -4024,7 +3904,6 @@ '»' => '>>', '‹' => '<', '›' => '>', - '' => '-', '‐' => '-', '‑' => '-', '‒' => '-', @@ -4033,12 +3912,6 @@ '―' => '-', '︱' => '-', '︲' => '-', - '˂' => '<', - '˃' => '>', - '˄' => '^', - 'ˆ' => '^', - 'ː' => ':', - '˜' => '~', '‖' => '||', '⁄' => '/', '⁅' => '[', @@ -4079,8 +3952,6 @@ '﹈' => ']', '×' => '*', '÷' => '/', - '˖' => '+', - '˗' => '-', '−' => '-', '∕' => '/', '∖' => '\\', diff --git a/vendor/symfony/polyfill-iconv/composer.json b/vendor/symfony/polyfill-iconv/composer.json index fca6f0eb36d329af8936ebbb22771b3b3b7c8fad..0c23267cbe3400460de51b8c711e9bc3d1ab9435 100644 --- a/vendor/symfony/polyfill-iconv/composer.json +++ b/vendor/symfony/polyfill-iconv/composer.json @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } } } diff --git a/vendor/symfony/polyfill-intl-idn/Idn.php b/vendor/symfony/polyfill-intl-idn/Idn.php deleted file mode 100644 index adb718d29652ecc3897c8dbb7d502462ea32a8c4..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-intl-idn/Idn.php +++ /dev/null @@ -1,283 +0,0 @@ -<?php - -/* - * Copyright (c) 2014 TrueServer B.V. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * Originally forked from - * https://github.com/true/php-punycode/blob/v2.1.1/src/Punycode.php - */ - -namespace Symfony\Polyfill\Intl\Idn; - -/** - * Partial intl implementation in pure PHP. - * - * Implemented: - * - idn_to_ascii - Convert domain name to IDNA ASCII form - * - idn_to_utf8 - Convert domain name from IDNA ASCII to Unicode - * - * @author Renan Gonçalves <renan.saddam@gmail.com> - * @author Sebastian Kroczek <sk@xbug.de> - * @author Dmitry Lukashin <dmitry@lukashin.ru> - * @author Laurent Bassin <laurent@bassin.info> - * - * @internal - */ -final class Idn -{ - const INTL_IDNA_VARIANT_2003 = 0; - const INTL_IDNA_VARIANT_UTS46 = 1; - - private static $encodeTable = array( - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - ); - - private static $decodeTable = array( - 'a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4, 'f' => 5, - 'g' => 6, 'h' => 7, 'i' => 8, 'j' => 9, 'k' => 10, 'l' => 11, - 'm' => 12, 'n' => 13, 'o' => 14, 'p' => 15, 'q' => 16, 'r' => 17, - 's' => 18, 't' => 19, 'u' => 20, 'v' => 21, 'w' => 22, 'x' => 23, - 'y' => 24, 'z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, - '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35, - ); - - public static function idn_to_ascii($domain, $options, $variant, &$idna_info = array()) - { - if (\PHP_VERSION_ID >= 70200 && self::INTL_IDNA_VARIANT_2003 === $variant) { - @trigger_error('idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); - } - - if (self::INTL_IDNA_VARIANT_UTS46 === $variant) { - $domain = mb_strtolower($domain, 'utf-8'); - } - - $parts = explode('.', $domain); - - foreach ($parts as $i => &$part) { - if ('' === $part && \count($parts) > 1 + $i) { - return false; - } - if (false === $part = self::encodePart($part)) { - return false; - } - } - - $output = implode('.', $parts); - - $idna_info = array( - 'result' => \strlen($output) > 255 ? false : $output, - 'isTransitionalDifferent' => false, - 'errors' => 0, - ); - - return $idna_info['result']; - } - - public static function idn_to_utf8($domain, $options, $variant, &$idna_info = array()) - { - if (\PHP_VERSION_ID >= 70200 && self::INTL_IDNA_VARIANT_2003 === $variant) { - @trigger_error('idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); - } - - $parts = explode('.', $domain); - - foreach ($parts as &$part) { - $length = \strlen($part); - if ($length < 1 || 63 < $length) { - continue; - } - if (0 !== strpos($part, 'xn--')) { - continue; - } - - $part = substr($part, 4); - $part = self::decodePart($part); - } - - $output = implode('.', $parts); - - $idna_info = array( - 'result' => \strlen($output) > 255 ? false : $output, - 'isTransitionalDifferent' => false, - 'errors' => 0, - ); - - return $idna_info['result']; - } - - private static function encodePart($input) - { - $codePoints = self::listCodePoints($input); - - $n = 128; - $bias = 72; - $delta = 0; - $h = $b = \count($codePoints['basic']); - - $output = ''; - foreach ($codePoints['basic'] as $code) { - $output .= mb_chr($code, 'utf-8'); - } - if ($input === $output) { - return $output; - } - if ($b > 0) { - $output .= '-'; - } - - $codePoints['nonBasic'] = array_unique($codePoints['nonBasic']); - sort($codePoints['nonBasic']); - - $i = 0; - $length = mb_strlen($input, 'utf-8'); - while ($h < $length) { - $m = $codePoints['nonBasic'][$i++]; - $delta += ($m - $n) * ($h + 1); - $n = $m; - - foreach ($codePoints['all'] as $c) { - if ($c < $n || $c < 128) { - ++$delta; - } - if ($c === $n) { - $q = $delta; - for ($k = 36;; $k += 36) { - $t = self::calculateThreshold($k, $bias); - if ($q < $t) { - break; - } - - $code = $t + (($q - $t) % (36 - $t)); - $output .= self::$encodeTable[$code]; - - $q = ($q - $t) / (36 - $t); - } - - $output .= self::$encodeTable[$q]; - $bias = self::adapt($delta, $h + 1, ($h === $b)); - $delta = 0; - ++$h; - } - } - - ++$delta; - ++$n; - } - - $output = 'xn--'.$output; - - return \strlen($output) < 1 || 63 < \strlen($output) ? false : strtolower($output); - } - - private static function listCodePoints($input) - { - $codePoints = array( - 'all' => array(), - 'basic' => array(), - 'nonBasic' => array(), - ); - - $length = mb_strlen($input, 'utf-8'); - for ($i = 0; $i < $length; ++$i) { - $char = mb_substr($input, $i, 1, 'utf-8'); - $code = mb_ord($char, 'utf-8'); - if ($code < 128) { - $codePoints['all'][] = $codePoints['basic'][] = $code; - } else { - $codePoints['all'][] = $codePoints['nonBasic'][] = $code; - } - } - - return $codePoints; - } - - private static function calculateThreshold($k, $bias) - { - if ($k <= $bias + 1) { - return 1; - } - if ($k >= $bias + 26) { - return 26; - } - - return $k - $bias; - } - - private static function adapt($delta, $numPoints, $firstTime) - { - $delta = (int) ($firstTime ? $delta / 700 : $delta / 2); - $delta += (int) ($delta / $numPoints); - - $k = 0; - while ($delta > 35 * 13) { - $delta = (int) ($delta / 35); - $k = $k + 36; - } - - return $k + (int) (36 * $delta / ($delta + 38)); - } - - private static function decodePart($input) - { - $n = 128; - $i = 0; - $bias = 72; - $output = ''; - - $pos = strrpos($input, '-'); - if (false !== $pos) { - $output = substr($input, 0, $pos++); - } else { - $pos = 0; - } - - $outputLength = \strlen($output); - $inputLength = \strlen($input); - - while ($pos < $inputLength) { - $oldi = $i; - $w = 1; - - for ($k = 36;; $k += 36) { - $digit = self::$decodeTable[$input[$pos++]]; - $i += $digit * $w; - $t = self::calculateThreshold($k, $bias); - - if ($digit < $t) { - break; - } - - $w *= 36 - $t; - } - - $bias = self::adapt($i - $oldi, ++$outputLength, 0 === $oldi); - $n = $n + (int) ($i / $outputLength); - $i = $i % $outputLength; - $output = mb_substr($output, 0, $i, 'utf-8').mb_chr($n, 'utf-8').mb_substr($output, $i, $outputLength - 1, 'utf-8'); - - ++$i; - } - - return $output; - } -} diff --git a/vendor/symfony/polyfill-intl-idn/LICENSE b/vendor/symfony/polyfill-intl-idn/LICENSE deleted file mode 100644 index 3f853aaf35fe186d4016761eb6e8a403de3e6e0d..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-intl-idn/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2019 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/symfony/polyfill-intl-idn/README.md b/vendor/symfony/polyfill-intl-idn/README.md deleted file mode 100644 index 5fd8c6e97834a0bcbbaad627e34b8e35307a1de8..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-intl-idn/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Symfony Polyfill / Intl: Idn -============================ - -This component provides `idn_to_ascii` and `idn_to_utf8` functions to users who run php versions without the intl extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-intl-idn/bootstrap.php b/vendor/symfony/polyfill-intl-idn/bootstrap.php deleted file mode 100644 index c6e3921d764c903257ed9cde7000e1751f5537c0..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-intl-idn/bootstrap.php +++ /dev/null @@ -1,59 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Intl\Idn as p; - -if (!function_exists('idn_to_ascii')) { - define('U_IDNA_PROHIBITED_ERROR', 66560); - define('U_IDNA_ERROR_START', 66560); - define('U_IDNA_UNASSIGNED_ERROR', 66561); - define('U_IDNA_CHECK_BIDI_ERROR', 66562); - define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563); - define('U_IDNA_ACE_PREFIX_ERROR', 66564); - define('U_IDNA_VERIFICATION_ERROR', 66565); - define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566); - define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567); - define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568); - define('U_IDNA_ERROR_LIMIT', 66569); - define('U_STRINGPREP_PROHIBITED_ERROR', 66560); - define('U_STRINGPREP_UNASSIGNED_ERROR', 66561); - define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562); - define('IDNA_DEFAULT', 0); - define('IDNA_ALLOW_UNASSIGNED', 1); - define('IDNA_USE_STD3_RULES', 2); - define('IDNA_CHECK_BIDI', 4); - define('IDNA_CHECK_CONTEXTJ', 8); - define('IDNA_NONTRANSITIONAL_TO_ASCII', 16); - define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32); - define('INTL_IDNA_VARIANT_2003', 0); - define('INTL_IDNA_VARIANT_UTS46', 1); - define('IDNA_ERROR_EMPTY_LABEL', 1); - define('IDNA_ERROR_LABEL_TOO_LONG', 2); - define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4); - define('IDNA_ERROR_LEADING_HYPHEN', 8); - define('IDNA_ERROR_TRAILING_HYPHEN', 16); - define('IDNA_ERROR_HYPHEN_3_4', 32); - define('IDNA_ERROR_LEADING_COMBINING_MARK', 64); - define('IDNA_ERROR_DISALLOWED', 128); - define('IDNA_ERROR_PUNYCODE', 256); - define('IDNA_ERROR_LABEL_HAS_DOT', 512); - define('IDNA_ERROR_INVALID_ACE_LABEL', 1024); - define('IDNA_ERROR_BIDI', 2048); - define('IDNA_ERROR_CONTEXTJ', 4096); - - if (PHP_VERSION_ID < 70400) { - function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } - function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } - } else { - function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } - function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } - } -} diff --git a/vendor/symfony/polyfill-intl-idn/composer.json b/vendor/symfony/polyfill-intl-idn/composer.json deleted file mode 100644 index 403f4aa713c4a884e5439eff888c4426524b340e..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-intl-idn/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/polyfill-intl-idn", - "type": "library", - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "idn"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-intl": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.14-dev" - } - } -} diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php index 15503bc9dd3a0ca943356e84cffcd69069ec4566..1fc4feea72cd8ba056ebb794a97a5a6254be08c7 100644 --- a/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -512,9 +512,7 @@ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = n $offset = 0; } elseif ($offset = (int) $offset) { if ($offset < 0) { - if (0 > $offset += self::mb_strlen($needle)) { - $haystack = self::mb_substr($haystack, 0, $offset, $encoding); - } + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); $offset = 0; } else { $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); @@ -534,7 +532,7 @@ public static function mb_str_split($string, $split_length = 1, $encoding = null return null; } - if (1 > $split_length = (int) $split_length) { + if ($split_length < 1) { trigger_error('The length of each segment must be greater than zero', E_USER_WARNING); return false; @@ -544,17 +542,6 @@ public static function mb_str_split($string, $split_length = 1, $encoding = null $encoding = mb_internal_encoding(); } - if ('UTF-8' === $encoding = self::getEncoding($encoding)) { - $rx = '/('; - while (65535 < $split_length) { - $rx .= '.{65535}'; - $split_length -= 65535; - } - $rx .= '.{'.$split_length.'})/us'; - - return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - } - $result = array(); $length = mb_strlen($string, $encoding); @@ -828,16 +815,11 @@ private static function getEncoding($encoding) return self::$internalEncoding; } - if ('UTF-8' === $encoding) { - return 'UTF-8'; - } - $encoding = strtoupper($encoding); if ('8BIT' === $encoding || 'BINARY' === $encoding) { return 'CP850'; } - if ('UTF8' === $encoding) { return 'UTF-8'; } diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json index 1a8bec5c012f5f143f1ee077bfa398bf4e3f5679..308f009a10a0dab6632cc54d286a0c115295df2f 100644 --- a/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } } } diff --git a/vendor/symfony/polyfill-php56/composer.json b/vendor/symfony/polyfill-php56/composer.json index e44ba9561120c6102ae64022f0ecc490ef07d629..81f58fb46244b933d8e33203b973560ef184e413 100644 --- a/vendor/symfony/polyfill-php56/composer.json +++ b/vendor/symfony/polyfill-php56/composer.json @@ -26,7 +26,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } } } diff --git a/vendor/symfony/polyfill-php70/composer.json b/vendor/symfony/polyfill-php70/composer.json index 9769a77aaedbf0fc8953a70515e2deea6aedf0f9..4f10a7226c58a393306f224f6d72c0608541cd1b 100644 --- a/vendor/symfony/polyfill-php70/composer.json +++ b/vendor/symfony/polyfill-php70/composer.json @@ -27,7 +27,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } } } diff --git a/vendor/symfony/polyfill-php72/LICENSE b/vendor/symfony/polyfill-php72/LICENSE deleted file mode 100644 index 4cd8bdd3007da4d62985ec9e5ca81a1e18ae34d1..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-php72/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/symfony/polyfill-php72/Php72.php b/vendor/symfony/polyfill-php72/Php72.php deleted file mode 100644 index d531e8441bff9f706fe9de1a0a76f27201b7fbe8..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-php72/Php72.php +++ /dev/null @@ -1,216 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php72; - -/** - * @author Nicolas Grekas <p@tchwork.com> - * @author Dariusz Rumiński <dariusz.ruminski@gmail.com> - * - * @internal - */ -final class Php72 -{ - private static $hashMask; - - public static function utf8_encode($s) - { - $s .= $s; - $len = \strlen($s); - - for ($i = $len >> 1, $j = 0; $i < $len; ++$i, ++$j) { - switch (true) { - case $s[$i] < "\x80": $s[$j] = $s[$i]; break; - case $s[$i] < "\xC0": $s[$j] = "\xC2"; $s[++$j] = $s[$i]; break; - default: $s[$j] = "\xC3"; $s[++$j] = \chr(\ord($s[$i]) - 64); break; - } - } - - return substr($s, 0, $j); - } - - public static function utf8_decode($s) - { - $s = (string) $s; - $len = \strlen($s); - - for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) { - switch ($s[$i] & "\xF0") { - case "\xC0": - case "\xD0": - $c = (\ord($s[$i] & "\x1F") << 6) | \ord($s[++$i] & "\x3F"); - $s[$j] = $c < 256 ? \chr($c) : '?'; - break; - - case "\xF0": - ++$i; - // no break - - case "\xE0": - $s[$j] = '?'; - $i += 2; - break; - - default: - $s[$j] = $s[$i]; - } - } - - return substr($s, 0, $j); - } - - public static function php_os_family() - { - if ('\\' === \DIRECTORY_SEPARATOR) { - return 'Windows'; - } - - $map = array( - 'Darwin' => 'Darwin', - 'DragonFly' => 'BSD', - 'FreeBSD' => 'BSD', - 'NetBSD' => 'BSD', - 'OpenBSD' => 'BSD', - 'Linux' => 'Linux', - 'SunOS' => 'Solaris', - ); - - return isset($map[PHP_OS]) ? $map[PHP_OS] : 'Unknown'; - } - - public static function spl_object_id($object) - { - if (null === self::$hashMask) { - self::initHashMask(); - } - if (null === $hash = spl_object_hash($object)) { - return; - } - - return self::$hashMask ^ hexdec(substr($hash, 16 - \PHP_INT_SIZE, \PHP_INT_SIZE)); - } - - public static function sapi_windows_vt100_support($stream, $enable = null) - { - if (!\is_resource($stream)) { - trigger_error('sapi_windows_vt100_support() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); - - return false; - } - - $meta = stream_get_meta_data($stream); - - if ('STDIO' !== $meta['stream_type']) { - trigger_error('sapi_windows_vt100_support() was not able to analyze the specified stream', E_USER_WARNING); - - return false; - } - - // We cannot actually disable vt100 support if it is set - if (false === $enable || !self::stream_isatty($stream)) { - return false; - } - - // The native function does not apply to stdin - $meta = array_map('strtolower', $meta); - $stdin = 'php://stdin' === $meta['uri'] || 'php://fd/0' === $meta['uri']; - - return !$stdin - && (false !== getenv('ANSICON') - || 'ON' === getenv('ConEmuANSI') - || 'xterm' === getenv('TERM') - || 'Hyper' === getenv('TERM_PROGRAM')); - } - - public static function stream_isatty($stream) - { - if (!\is_resource($stream)) { - trigger_error('stream_isatty() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); - - return false; - } - - if ('\\' === \DIRECTORY_SEPARATOR) { - $stat = @fstat($stream); - // Check if formatted mode is S_IFCHR - return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; - } - - return \function_exists('posix_isatty') && @posix_isatty($stream); - } - - private static function initHashMask() - { - $obj = (object) array(); - self::$hashMask = -1; - - // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below - $obFuncs = array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'); - foreach (debug_backtrace(\PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS : false) as $frame) { - if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) { - $frame['line'] = 0; - break; - } - } - if (!empty($frame['line'])) { - ob_start(); - debug_zval_dump($obj); - self::$hashMask = (int) substr(ob_get_clean(), 17); - } - - self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - \PHP_INT_SIZE, \PHP_INT_SIZE)); - } - - public static function mb_chr($code, $encoding = null) - { - if (0x80 > $code %= 0x200000) { - $s = \chr($code); - } elseif (0x800 > $code) { - $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); - } elseif (0x10000 > $code) { - $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } else { - $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } - - if ('UTF-8' !== $encoding) { - $s = mb_convert_encoding($s, $encoding, 'UTF-8'); - } - - return $s; - } - - public static function mb_ord($s, $encoding = null) - { - if (null == $encoding) { - $s = mb_convert_encoding($s, 'UTF-8'); - } elseif ('UTF-8' !== $encoding) { - $s = mb_convert_encoding($s, 'UTF-8', $encoding); - } - - if (1 === \strlen($s)) { - return \ord($s); - } - - $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; - if (0xF0 <= $code) { - return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; - } - if (0xE0 <= $code) { - return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; - } - if (0xC0 <= $code) { - return (($code - 0xC0) << 6) + $s[2] - 0x80; - } - - return $code; - } -} diff --git a/vendor/symfony/polyfill-php72/README.md b/vendor/symfony/polyfill-php72/README.md deleted file mode 100644 index 82c45f7a58609564f91c44767789c3ee0664991c..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-php72/README.md +++ /dev/null @@ -1,27 +0,0 @@ -Symfony Polyfill / Php72 -======================== - -This component provides functions added to PHP 7.2 core: - -- [`spl_object_id`](https://php.net/spl_object_id) -- [`stream_isatty`](https://php.net/stream_isatty) - -On Windows only: - -- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support) - -Moved to core since 7.2 (was in the optional XML extension earlier): - -- [`utf8_encode`](https://php.net/utf8_encode) -- [`utf8_decode`](https://php.net/utf8_decode) - -Also, it provides a constant added to PHP 7.2: -- [`PHP_OS_FAMILY`](http://php.net/manual/en/reserved.constants.php#constant.php-os-family) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-php72/bootstrap.php b/vendor/symfony/polyfill-php72/bootstrap.php deleted file mode 100644 index 519056de4aa1ec2b25b06b77b4dad800720c5016..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-php72/bootstrap.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php72 as p; - -if (PHP_VERSION_ID < 70200) { - if ('\\' === DIRECTORY_SEPARATOR && !function_exists('sapi_windows_vt100_support')) { - function sapi_windows_vt100_support($stream, $enable = null) { return p\Php72::sapi_windows_vt100_support($stream, $enable); } - } - if (!function_exists('stream_isatty')) { - function stream_isatty($stream) { return p\Php72::stream_isatty($stream); } - } - if (!function_exists('utf8_encode')) { - function utf8_encode($s) { return p\Php72::utf8_encode($s); } - function utf8_decode($s) { return p\Php72::utf8_decode($s); } - } - if (!function_exists('spl_object_id')) { - function spl_object_id($s) { return p\Php72::spl_object_id($s); } - } - if (!defined('PHP_OS_FAMILY')) { - define('PHP_OS_FAMILY', p\Php72::php_os_family()); - } - if (!function_exists('mb_chr')) { - function mb_ord($s, $enc = null) { return p\Php72::mb_ord($s, $enc); } - function mb_chr($code, $enc = null) { return p\Php72::mb_chr($code, $enc); } - function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } - } -} diff --git a/vendor/symfony/polyfill-php72/composer.json b/vendor/symfony/polyfill-php72/composer.json deleted file mode 100644 index d2f8464154386ea26323ff1f72db87046f999547..0000000000000000000000000000000000000000 --- a/vendor/symfony/polyfill-php72/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "symfony/polyfill-php72", - "type": "library", - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, - "files": [ "bootstrap.php" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.14-dev" - } - } -} diff --git a/vendor/symfony/polyfill-util/TestListenerForV7.php b/vendor/symfony/polyfill-util/TestListenerForV7.php index a5c3759b22e2b048c3eeb6b59267bcafe6a29ce1..b304bfaeacaef464bbd4eabafb62d8f734798fed 100644 --- a/vendor/symfony/polyfill-util/TestListenerForV7.php +++ b/vendor/symfony/polyfill-util/TestListenerForV7.php @@ -81,7 +81,7 @@ public function endTest(Test $test, float $time): void public static function warning($message): WarningTestCase { - return new WarningTestCase($message); + return parent::warning($message); } protected function setUp(): void diff --git a/vendor/symfony/polyfill-util/composer.json b/vendor/symfony/polyfill-util/composer.json index b53063efdd56d8594dc5ef1c092f496d9fa03fdb..fa9132bd7258bc56aceaa1a0d9d84c90a5cdc78f 100644 --- a/vendor/symfony/polyfill-util/composer.json +++ b/vendor/symfony/polyfill-util/composer.json @@ -24,7 +24,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.12-dev" } } } diff --git a/vendor/symfony/process/LICENSE b/vendor/symfony/process/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/process/LICENSE +++ b/vendor/symfony/process/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/routing/LICENSE b/vendor/symfony/routing/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/routing/LICENSE +++ b/vendor/symfony/routing/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/routing/Matcher/UrlMatcher.php b/vendor/symfony/routing/Matcher/UrlMatcher.php index b8599b23ad759d27a7db8db287741c86241e0121..663ebcbefaaecfbee96232b951019d5d41620984 100644 --- a/vendor/symfony/routing/Matcher/UrlMatcher.php +++ b/vendor/symfony/routing/Matcher/UrlMatcher.php @@ -80,7 +80,9 @@ public function match($pathinfo) throw new NoConfigurationException(); } - throw 0 < \count($this->allow) ? new MethodNotAllowedException(array_unique($this->allow)) : new ResourceNotFoundException(sprintf('No routes found for "%s".', $pathinfo)); + throw 0 < \count($this->allow) + ? new MethodNotAllowedException(array_unique($this->allow)) + : new ResourceNotFoundException(sprintf('No routes found for "%s".', $pathinfo)); } /** diff --git a/vendor/symfony/routing/README.md b/vendor/symfony/routing/README.md index a16d9d7fcbbbb83e903fa596405722671ba37bb0..88fb1fde5a7bdc716a76b150b189a64b3dd84cdd 100644 --- a/vendor/symfony/routing/README.md +++ b/vendor/symfony/routing/README.md @@ -6,7 +6,7 @@ The Routing component maps an HTTP request to a set of configuration variables. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/routing.html) + * [Documentation](https://symfony.com/doc/current/components/routing/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/routing/RequestContext.php b/vendor/symfony/routing/RequestContext.php index ed50cd70d835a8454b5f89e9cd907e2fc159f8be..8ebad8e2538db9804ea4e872f8ccaf12ffcda6fa 100644 --- a/vendor/symfony/routing/RequestContext.php +++ b/vendor/symfony/routing/RequestContext.php @@ -67,8 +67,8 @@ public function fromRequest(Request $request) $this->setMethod($request->getMethod()); $this->setHost($request->getHost()); $this->setScheme($request->getScheme()); - $this->setHttpPort($request->isSecure() || null === $request->getPort() ? $this->httpPort : $request->getPort()); - $this->setHttpsPort($request->isSecure() && null !== $request->getPort() ? $request->getPort() : $this->httpsPort); + $this->setHttpPort($request->isSecure() ? $this->httpPort : $request->getPort()); + $this->setHttpsPort($request->isSecure() ? $request->getPort() : $this->httpsPort); $this->setQueryString($request->server->get('QUERY_STRING', '')); return $this; diff --git a/vendor/symfony/serializer/LICENSE b/vendor/symfony/serializer/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/serializer/LICENSE +++ b/vendor/symfony/serializer/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php b/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php index 5c58476383427dc204a84ce9252e054db658890d..73c02a647c57ee9cdf96320fe0d07d0dc5c72b99 100644 --- a/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php +++ b/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php @@ -29,7 +29,7 @@ trait ClassResolverTrait * * @return string * - * @throws InvalidArgumentException If the class does not exist + * @throws InvalidArgumentException If the class does not exists */ private function getClass($value) { diff --git a/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php b/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php index d9d5a586e123a4391807a4adecff61dbc52b94f6..39c31f00f1590fd7f0085130f96976b744c5982d 100644 --- a/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php +++ b/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php @@ -101,7 +101,13 @@ public function denormalize($data, $type, $format = null, array $context = []) $dateTimeErrors = \DateTime::class === $type ? \DateTime::getLastErrors() : \DateTimeImmutable::getLastErrors(); - throw new NotNormalizableValueException(sprintf('Parsing datetime string "%s" using format "%s" resulted in %d errors:'."\n".'%s', $data, $dateTimeFormat, $dateTimeErrors['error_count'], implode("\n", $this->formatDateTimeErrors($dateTimeErrors['errors'])))); + throw new NotNormalizableValueException(sprintf( + 'Parsing datetime string "%s" using format "%s" resulted in %d errors:'."\n".'%s', + $data, + $dateTimeFormat, + $dateTimeErrors['error_count'], + implode("\n", $this->formatDateTimeErrors($dateTimeErrors['errors'])) + )); } try { diff --git a/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php b/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php index 5c2cd7af1cc00f10b76032f1fe13133dd7ed592e..c1b3dd260e2436d9304ef67b8ba8df51158c09e3 100644 --- a/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php +++ b/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php @@ -83,14 +83,8 @@ protected function extractAttributes($object, $format = null, array $context = [ } } - $checkPropertyInitialization = \PHP_VERSION_ID >= 70400; - // properties foreach ($reflClass->getProperties(\ReflectionProperty::IS_PUBLIC) as $reflProperty) { - if ($checkPropertyInitialization && !$reflProperty->isInitialized($object)) { - continue; - } - if ($reflProperty->isStatic() || !$this->isAllowedAttribute($object, $reflProperty->name, $format, $context)) { continue; } diff --git a/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php b/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php index be6634b4932047f4ca2c7cb08cc215df0ee1283a..46faa1e7e9dfdfdfa30fd72ec7603f45a61a4ddf 100644 --- a/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php +++ b/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php @@ -99,20 +99,9 @@ protected function extractAttributes($object, $format = null, array $context = [ { $reflectionObject = new \ReflectionObject($object); $attributes = []; - $checkPropertyInitialization = \PHP_VERSION_ID >= 70400; do { foreach ($reflectionObject->getProperties() as $property) { - if ($checkPropertyInitialization) { - if (!$property->isPublic()) { - $property->setAccessible(true); - } - - if (!$property->isInitialized($object)) { - continue; - } - } - if (!$this->isAllowedAttribute($reflectionObject->getName(), $property->name, $format, $context)) { continue; } diff --git a/vendor/symfony/serializer/Tests/Fixtures/Php74Dummy.php b/vendor/symfony/serializer/Tests/Fixtures/Php74Dummy.php deleted file mode 100644 index e8cebd9b45e9581d4643a3e58ea07210cde12156..0000000000000000000000000000000000000000 --- a/vendor/symfony/serializer/Tests/Fixtures/Php74Dummy.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Serializer\Tests\Fixtures; - -/** - * @author Valentin Udaltsov <udaltsov.valentin@gmail.com> - */ -final class Php74Dummy -{ - public string $uninitializedProperty; - - public string $initializedProperty = 'defaultValue'; -} diff --git a/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index d5d7cace362e401e19f41124628631c936b8af62..4895526c45c0a3f06905a38a08421a799800342d 100644 --- a/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -29,7 +29,7 @@ class AbstractObjectNormalizerTest extends TestCase public function testDenormalize() { $normalizer = new AbstractObjectNormalizerDummy(); - $normalizedData = $normalizer->denormalize(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz'], Dummy::class); + $normalizedData = $normalizer->denormalize(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz'], __NAMESPACE__.'\Dummy'); $this->assertSame('foo', $normalizedData->foo); $this->assertNull($normalizedData->bar); @@ -39,12 +39,12 @@ public function testDenormalize() public function testInstantiateObjectDenormalizer() { $data = ['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']; - $class = Dummy::class; + $class = __NAMESPACE__.'\Dummy'; $context = []; $normalizer = new AbstractObjectNormalizerDummy(); - $this->assertInstanceOf(Dummy::class, $normalizer->instantiateObject($data, $class, $context, new \ReflectionClass($class), [])); + $this->assertInstanceOf(__NAMESPACE__.'\Dummy', $normalizer->instantiateObject($data, $class, $context, new \ReflectionClass($class), [])); } public function testDenormalizeWithExtraAttributes() @@ -55,7 +55,7 @@ public function testDenormalizeWithExtraAttributes() $normalizer = new AbstractObjectNormalizerDummy($factory); $normalizer->denormalize( ['fooFoo' => 'foo', 'fooBar' => 'bar'], - Dummy::class, + __NAMESPACE__.'\Dummy', 'any', ['allow_extra_attributes' => false] ); diff --git a/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php index 825ebd20b6f770b7bc7dec38ffceb77fa88688de..27bd361d3acb34302b83f5fb7648b30dce064186 100644 --- a/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php +++ b/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php @@ -68,7 +68,7 @@ public function testSupportsValidArray() { $this->serializer->expects($this->once()) ->method('supportsDenormalization') - ->with($this->anything(), ArrayDummy::class, $this->anything()) + ->with($this->anything(), __NAMESPACE__.'\ArrayDummy', $this->anything()) ->willReturn(true); $this->assertTrue( @@ -104,7 +104,7 @@ public function testSupportsNoArray() $this->assertFalse( $this->denormalizer->supportsDenormalization( ['foo' => 'one', 'bar' => 'two'], - ArrayDummy::class + __NAMESPACE__.'\ArrayDummy' ) ); } diff --git a/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index 43536e8144149c52cf031420a056c431d8e56712..13a244e72eb1cb3e1fa23bd6bb6fa003f82a2c9b 100644 --- a/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -38,7 +38,7 @@ class GetSetMethodNormalizerTest extends TestCase protected function setUp() { - $this->serializer = $this->getMockBuilder(SerializerNormalizer::class)->getMock(); + $this->serializer = $this->getMockBuilder(__NAMESPACE__.'\SerializerNormalizer')->getMock(); $this->normalizer = new GetSetMethodNormalizer(); $this->normalizer->setSerializer($this->serializer); } @@ -83,7 +83,7 @@ public function testDenormalize() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'], - GetSetDummy::class, + __NAMESPACE__.'\GetSetDummy', 'any' ); $this->assertEquals('foo', $obj->getFoo()); @@ -114,21 +114,21 @@ public function testDenormalizeWithObject() $data->foo = 'foo'; $data->bar = 'bar'; $data->fooBar = 'foobar'; - $obj = $this->normalizer->denormalize($data, GetSetDummy::class, 'any'); + $obj = $this->normalizer->denormalize($data, __NAMESPACE__.'\GetSetDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->getBar()); } public function testDenormalizeNull() { - $this->assertEquals(new GetSetDummy(), $this->normalizer->denormalize(null, GetSetDummy::class)); + $this->assertEquals(new GetSetDummy(), $this->normalizer->denormalize(null, __NAMESPACE__.'\GetSetDummy')); } public function testConstructorDenormalize() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'], - GetConstructorDummy::class, 'any'); + __NAMESPACE__.'\GetConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->getBar()); $this->assertTrue($obj->isBaz()); @@ -138,7 +138,7 @@ public function testConstructorDenormalizeWithNullArgument() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => null, 'baz' => true], - GetConstructorDummy::class, 'any'); + __NAMESPACE__.'\GetConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertNull($obj->getBar()); $this->assertTrue($obj->isBaz()); @@ -148,7 +148,7 @@ public function testConstructorDenormalizeWithMissingOptionalArgument() { $obj = $this->normalizer->denormalize( ['foo' => 'test', 'baz' => [1, 2, 3]], - GetConstructorOptionalArgsDummy::class, 'any'); + __NAMESPACE__.'\GetConstructorOptionalArgsDummy', 'any'); $this->assertEquals('test', $obj->getFoo()); $this->assertEquals([], $obj->getBar()); $this->assertEquals([1, 2, 3], $obj->getBaz()); @@ -158,7 +158,7 @@ public function testConstructorDenormalizeWithOptionalDefaultArgument() { $obj = $this->normalizer->denormalize( ['bar' => 'test'], - GetConstructorArgsWithDefaultValueDummy::class, 'any'); + __NAMESPACE__.'\GetConstructorArgsWithDefaultValueDummy', 'any'); $this->assertEquals([], $obj->getFoo()); $this->assertEquals('test', $obj->getBar()); } @@ -192,14 +192,14 @@ public function testConstructorWithObjectDenormalize() $data->bar = 'bar'; $data->baz = true; $data->fooBar = 'foobar'; - $obj = $this->normalizer->denormalize($data, GetConstructorDummy::class, 'any'); + $obj = $this->normalizer->denormalize($data, __NAMESPACE__.'\GetConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->getBar()); } public function testConstructorWArgWithPrivateMutator() { - $obj = $this->normalizer->denormalize(['foo' => 'bar'], ObjectConstructorArgsWithPrivateMutatorDummy::class, 'any'); + $obj = $this->normalizer->denormalize(['foo' => 'bar'], __NAMESPACE__.'\ObjectConstructorArgsWithPrivateMutatorDummy', 'any'); $this->assertEquals('bar', $obj->getFoo()); } @@ -466,7 +466,7 @@ public function testObjectToPopulate() $obj = $this->normalizer->denormalize( ['bar' => 'bar'], - GetSetDummy::class, + __NAMESPACE__.'\GetSetDummy', null, [GetSetMethodNormalizer::OBJECT_TO_POPULATE => $dummy] ); @@ -480,13 +480,13 @@ public function testDenormalizeNonExistingAttribute() { $this->assertEquals( new GetSetDummy(), - $this->normalizer->denormalize(['non_existing' => true], GetSetDummy::class) + $this->normalizer->denormalize(['non_existing' => true], __NAMESPACE__.'\GetSetDummy') ); } public function testDenormalizeShouldNotSetStaticAttribute() { - $obj = $this->normalizer->denormalize(['staticObject' => true], GetSetDummy::class); + $obj = $this->normalizer->denormalize(['staticObject' => true], __NAMESPACE__.'\GetSetDummy'); $this->assertEquals(new GetSetDummy(), $obj); $this->assertNull(GetSetDummy::getStaticObject()); @@ -504,7 +504,7 @@ public function testNoStaticGetSetSupport() public function testPrivateSetter() { - $obj = $this->normalizer->denormalize(['foo' => 'foobar'], ObjectWithPrivateSetterDummy::class); + $obj = $this->normalizer->denormalize(['foo' => 'foobar'], __NAMESPACE__.'\ObjectWithPrivateSetterDummy'); $this->assertEquals('bar', $obj->getFoo()); } diff --git a/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php index 62082e0cd28831b5f403204ae686bc7f7120a7fe..765db4c82bbae96aa1a08add3fc51dff3f19750c 100644 --- a/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -28,7 +28,6 @@ use Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy; use Symfony\Component\Serializer\Tests\Fixtures\GroupDummy; use Symfony\Component\Serializer\Tests\Fixtures\MaxDepthDummy; -use Symfony\Component\Serializer\Tests\Fixtures\Php74Dummy; use Symfony\Component\Serializer\Tests\Fixtures\SiblingHolder; /** @@ -47,7 +46,7 @@ class ObjectNormalizerTest extends TestCase protected function setUp() { - $this->serializer = $this->getMockBuilder(ObjectSerializerNormalizer::class)->getMock(); + $this->serializer = $this->getMockBuilder(__NAMESPACE__.'\ObjectSerializerNormalizer')->getMock(); $this->normalizer = new ObjectNormalizer(); $this->normalizer->setSerializer($this->serializer); } @@ -82,23 +81,11 @@ public function testNormalize() ); } - /** - * @requires PHP 7.4 - */ - public function testNormalizeObjectWithUninitializedProperties() - { - $obj = new Php74Dummy(); - $this->assertEquals( - ['initializedProperty' => 'defaultValue'], - $this->normalizer->normalize($obj, 'any') - ); - } - public function testDenormalize() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'], - ObjectDummy::class, + __NAMESPACE__.'\ObjectDummy', 'any' ); $this->assertEquals('foo', $obj->getFoo()); @@ -112,21 +99,21 @@ public function testDenormalizeWithObject() $data->foo = 'foo'; $data->bar = 'bar'; $data->fooBar = 'foobar'; - $obj = $this->normalizer->denormalize($data, ObjectDummy::class, 'any'); + $obj = $this->normalizer->denormalize($data, __NAMESPACE__.'\ObjectDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->bar); } public function testDenormalizeNull() { - $this->assertEquals(new ObjectDummy(), $this->normalizer->denormalize(null, ObjectDummy::class)); + $this->assertEquals(new ObjectDummy(), $this->normalizer->denormalize(null, __NAMESPACE__.'\ObjectDummy')); } public function testConstructorDenormalize() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'], - ObjectConstructorDummy::class, 'any'); + __NAMESPACE__.'\ObjectConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->bar); $this->assertTrue($obj->isBaz()); @@ -136,7 +123,7 @@ public function testConstructorDenormalizeWithNullArgument() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => null, 'baz' => true], - ObjectConstructorDummy::class, 'any'); + __NAMESPACE__.'\ObjectConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertNull($obj->bar); $this->assertTrue($obj->isBaz()); @@ -146,7 +133,7 @@ public function testConstructorDenormalizeWithMissingOptionalArgument() { $obj = $this->normalizer->denormalize( ['foo' => 'test', 'baz' => [1, 2, 3]], - ObjectConstructorOptionalArgsDummy::class, 'any'); + __NAMESPACE__.'\ObjectConstructorOptionalArgsDummy', 'any'); $this->assertEquals('test', $obj->getFoo()); $this->assertEquals([], $obj->bar); $this->assertEquals([1, 2, 3], $obj->getBaz()); @@ -156,7 +143,7 @@ public function testConstructorDenormalizeWithOptionalDefaultArgument() { $obj = $this->normalizer->denormalize( ['bar' => 'test'], - ObjectConstructorArgsWithDefaultValueDummy::class, 'any'); + __NAMESPACE__.'\ObjectConstructorArgsWithDefaultValueDummy', 'any'); $this->assertEquals([], $obj->getFoo()); $this->assertEquals('test', $obj->getBar()); } @@ -168,7 +155,7 @@ public function testConstructorWithObjectDenormalize() $data->bar = 'bar'; $data->baz = true; $data->fooBar = 'foobar'; - $obj = $this->normalizer->denormalize($data, ObjectConstructorDummy::class, 'any'); + $obj = $this->normalizer->denormalize($data, __NAMESPACE__.'\ObjectConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->bar); } @@ -410,7 +397,7 @@ public function testIgnoredAttributesDenormalize() $this->assertEquals( $obj, - $this->normalizer->denormalize(['fooBar' => 'fooBar', 'foo' => 'foo', 'baz' => 'baz'], ObjectDummy::class) + $this->normalizer->denormalize(['fooBar' => 'fooBar', 'foo' => 'foo', 'baz' => 'baz'], __NAMESPACE__.'\ObjectDummy') ); } @@ -534,7 +521,7 @@ public function testDenormalizeNonExistingAttribute() { $this->assertEquals( new ObjectDummy(), - $this->normalizer->denormalize(['non_existing' => true], ObjectDummy::class) + $this->normalizer->denormalize(['non_existing' => true], __NAMESPACE__.'\ObjectDummy') ); } diff --git a/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php index d0e31ab4df783467da946f32180c60a948a943dc..4b138fca7ba9840a0b391f9d4d3a5058059bc35a 100644 --- a/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php +++ b/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php @@ -22,7 +22,6 @@ use Symfony\Component\Serializer\Tests\Fixtures\GroupDummy; use Symfony\Component\Serializer\Tests\Fixtures\GroupDummyChild; use Symfony\Component\Serializer\Tests\Fixtures\MaxDepthDummy; -use Symfony\Component\Serializer\Tests\Fixtures\Php74Dummy; use Symfony\Component\Serializer\Tests\Fixtures\PropertyCircularReferenceDummy; use Symfony\Component\Serializer\Tests\Fixtures\PropertySiblingHolder; @@ -56,23 +55,11 @@ public function testNormalize() ); } - /** - * @requires PHP 7.4 - */ - public function testNormalizeObjectWithUninitializedProperties() - { - $obj = new Php74Dummy(); - $this->assertEquals( - ['initializedProperty' => 'defaultValue'], - $this->normalizer->normalize($obj, 'any') - ); - } - public function testDenormalize() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => 'bar'], - PropertyDummy::class, + __NAMESPACE__.'\PropertyDummy', 'any' ); $this->assertEquals('foo', $obj->foo); @@ -111,7 +98,7 @@ public function testConstructorDenormalize() { $obj = $this->normalizer->denormalize( ['foo' => 'foo', 'bar' => 'bar'], - PropertyConstructorDummy::class, + __NAMESPACE__.'\PropertyConstructorDummy', 'any' ); $this->assertEquals('foo', $obj->getFoo()); @@ -122,7 +109,7 @@ public function testConstructorDenormalizeWithNullArgument() { $obj = $this->normalizer->denormalize( ['foo' => null, 'bar' => 'bar'], - PropertyConstructorDummy::class, ' + __NAMESPACE__.'\PropertyConstructorDummy', ' any' ); $this->assertNull($obj->getFoo()); @@ -376,13 +363,13 @@ public function testDenormalizeNonExistingAttribute() { $this->assertEquals( new PropertyDummy(), - $this->normalizer->denormalize(['non_existing' => true], PropertyDummy::class) + $this->normalizer->denormalize(['non_existing' => true], __NAMESPACE__.'\PropertyDummy') ); } public function testDenormalizeShouldIgnoreStaticProperty() { - $obj = $this->normalizer->denormalize(['outOfScope' => true], PropertyDummy::class); + $obj = $this->normalizer->denormalize(['outOfScope' => true], __NAMESPACE__.'\PropertyDummy'); $this->assertEquals(new PropertyDummy(), $obj); $this->assertEquals('out_of_scope', PropertyDummy::$outOfScope); diff --git a/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/vendor/symfony/translation/DataCollector/TranslationDataCollector.php index 5b96a22f350016464e718b005a0115fceaa6740c..fc713463a0bc36f9870df6b8047aa6efb62a6fc6 100644 --- a/vendor/symfony/translation/DataCollector/TranslationDataCollector.php +++ b/vendor/symfony/translation/DataCollector/TranslationDataCollector.php @@ -16,7 +16,6 @@ use Symfony\Component\HttpKernel\DataCollector\DataCollector; use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface; use Symfony\Component\Translation\DataCollectorTranslator; -use Symfony\Component\VarDumper\Cloner\Data; /** * @author Abdellatif Ait boudad <a.aitboudad@gmail.com> diff --git a/vendor/symfony/translation/Dumper/XliffFileDumper.php b/vendor/symfony/translation/Dumper/XliffFileDumper.php index f933be8b258df062b11c3959adf71c11d48864b7..cd867b0967908ece7d6592786f7d976757edd217 100644 --- a/vendor/symfony/translation/Dumper/XliffFileDumper.php +++ b/vendor/symfony/translation/Dumper/XliffFileDumper.php @@ -41,7 +41,7 @@ public function formatCatalogue(MessageCatalogue $messages, $domain, array $opti return $this->dumpXliff1($defaultLocale, $messages, $domain, $options); } if ('2.0' === $xliffVersion) { - return $this->dumpXliff2($defaultLocale, $messages, $domain); + return $this->dumpXliff2($defaultLocale, $messages, $domain, $options); } throw new InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion)); @@ -129,7 +129,7 @@ private function dumpXliff1($defaultLocale, MessageCatalogue $messages, $domain, return $dom->saveXML(); } - private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain) + private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain, array $options = []) { $dom = new \DOMDocument('1.0', 'utf-8'); $dom->formatOutput = true; diff --git a/vendor/symfony/translation/LICENSE b/vendor/symfony/translation/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/translation/LICENSE +++ b/vendor/symfony/translation/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/translation/Loader/PhpFileLoader.php b/vendor/symfony/translation/Loader/PhpFileLoader.php index 0991c3d3a28c636860419bbbed70da86c6674691..a0050e8db1e19679417fcbd3d5746516aa2b3efe 100644 --- a/vendor/symfony/translation/Loader/PhpFileLoader.php +++ b/vendor/symfony/translation/Loader/PhpFileLoader.php @@ -18,25 +18,11 @@ */ class PhpFileLoader extends FileLoader { - private static $cache = []; - /** * {@inheritdoc} */ protected function loadResource($resource) { - if ([] === self::$cache && \function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN) && (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) || filter_var(ini_get('opcache.enable_cli'), FILTER_VALIDATE_BOOLEAN))) { - self::$cache = null; - } - - if (null === self::$cache) { - return require $resource; - } - - if (isset(self::$cache[$resource])) { - return self::$cache[$resource]; - } - - return self::$cache[$resource] = require $resource; + return require $resource; } } diff --git a/vendor/symfony/translation/MessageCatalogue.php b/vendor/symfony/translation/MessageCatalogue.php index cc4a0bfaba9d398344d10f0c5f3625b73e4698ca..9b59c87d2f919faa5c655ff0105c8b78b0671a61 100644 --- a/vendor/symfony/translation/MessageCatalogue.php +++ b/vendor/symfony/translation/MessageCatalogue.php @@ -130,9 +130,7 @@ public function add($messages, $domain = 'messages') if (!isset($this->messages[$domain])) { $this->messages[$domain] = $messages; } else { - foreach ($messages as $id => $message) { - $this->messages[$domain][$id] = $message; - } + $this->messages[$domain] = array_replace($this->messages[$domain], $messages); } } diff --git a/vendor/symfony/translation/README.md b/vendor/symfony/translation/README.md index e80a70cad033ebad90e2b7a88f7187ef49a53800..46f3d1f2f25e6ee24e4e531546065c677f48511f 100644 --- a/vendor/symfony/translation/README.md +++ b/vendor/symfony/translation/README.md @@ -6,7 +6,7 @@ The Translation component provides tools to internationalize your application. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/translation.html) + * [Documentation](https://symfony.com/doc/current/components/translation/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/translation/Tests/TranslatorTest.php b/vendor/symfony/translation/Tests/TranslatorTest.php index 68122b2915970f884b415b2ebf605689bd543460..77af7de33efea4a4bd152806a2c3db1562c51e3d 100644 --- a/vendor/symfony/translation/Tests/TranslatorTest.php +++ b/vendor/symfony/translation/Tests/TranslatorTest.php @@ -234,38 +234,15 @@ public function testTransWithFallbackLocaleFile($format, $loader) $this->assertEquals('bar', $translator->trans('foo', [], 'resources')); } - /** - * @dataProvider getFallbackLocales - */ - public function testTransWithFallbackLocaleBis($expectedLocale, $locale) + public function testTransWithFallbackLocaleBis() { - $translator = new Translator($locale); + $translator = new Translator('en_US'); $translator->addLoader('array', new ArrayLoader()); - $translator->addResource('array', ['foo' => 'foofoo'], $locale); - $translator->addResource('array', ['bar' => 'foobar'], $expectedLocale); + $translator->addResource('array', ['foo' => 'foofoo'], 'en_US'); + $translator->addResource('array', ['bar' => 'foobar'], 'en'); $this->assertEquals('foobar', $translator->trans('bar')); } - public function getFallbackLocales() - { - $locales = [ - ['en', 'en_US'], - ['en', 'en-US'], - ['sl_Latn_IT', 'sl_Latn_IT_nedis'], - ['sl_Latn', 'sl_Latn_IT'], - ]; - - if (\function_exists('locale_parse')) { - $locales[] = ['sl_Latn_IT', 'sl-Latn-IT-nedis']; - $locales[] = ['sl_Latn', 'sl-Latn-IT']; - } else { - $locales[] = ['sl-Latn-IT', 'sl-Latn-IT-nedis']; - $locales[] = ['sl-Latn', 'sl-Latn-IT']; - } - - return $locales; - } - public function testTransWithFallbackLocaleTer() { $translator = new Translator('fr_FR'); diff --git a/vendor/symfony/translation/Translator.php b/vendor/symfony/translation/Translator.php index 1bda62d1b11af2f1cda9f0f6538767e5264a6644..e72d20a86f512e0dc76fbb9d2c7dd55fbd200ccd 100644 --- a/vendor/symfony/translation/Translator.php +++ b/vendor/symfony/translation/Translator.php @@ -412,19 +412,8 @@ protected function computeFallbackLocales($locale) $locales[] = $fallback; } - if (\function_exists('locale_parse')) { - $localeSubTags = locale_parse($locale); - if (1 < \count($localeSubTags)) { - array_pop($localeSubTags); - $fallback = locale_compose($localeSubTags); - if (false !== $fallback) { - array_unshift($locales, $fallback); - } - } - } elseif (false !== strrchr($locale, '_')) { + if (false !== strrchr($locale, '_')) { array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '_')))); - } elseif (false !== strrchr($locale, '-')) { - array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '-')))); } return array_unique($locales); diff --git a/vendor/symfony/validator/ConstraintValidator.php b/vendor/symfony/validator/ConstraintValidator.php index 458351fe2ee00c25a6c025c6d5100a9225340ec4..93cca2ea74a5ed4514e8ddeddcbffdf56c88e65a 100644 --- a/vendor/symfony/validator/ConstraintValidator.php +++ b/vendor/symfony/validator/ConstraintValidator.php @@ -87,12 +87,19 @@ protected function formatValue($value, $format = 0) { if (($format & self::PRETTY_DATE) && $value instanceof \DateTimeInterface) { if (class_exists('IntlDateFormatter')) { - $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT, 'UTC'); - - return $formatter->format(new \DateTime( - $value->format('Y-m-d H:i:s.u'), - new \DateTimeZone('UTC') - )); + $locale = \Locale::getDefault(); + $formatter = new \IntlDateFormatter($locale, \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT, $value->getTimezone()); + + // neither the native nor the stub IntlDateFormatter support + // DateTimeImmutable as of yet + if (!$value instanceof \DateTime) { + $value = new \DateTime( + $value->format('Y-m-d H:i:s.u e'), + $value->getTimezone() + ); + } + + return $formatter->format($value); } return $value->format('Y-m-d H:i:s'); diff --git a/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php b/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php index f04db3cc2d1b90f79f50bd20627b0907e4c70b1b..cd96bc9df75f8a76ed73498d858b7b6dd00cd40a 100644 --- a/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php +++ b/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php @@ -40,7 +40,7 @@ public function __construct(PropertyAccessorInterface $propertyAccessor = null) public function validate($value, Constraint $constraint) { if (!$constraint instanceof AbstractComparison) { - throw new UnexpectedTypeException($constraint, AbstractComparison::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\AbstractComparison'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/AllValidator.php b/vendor/symfony/validator/Constraints/AllValidator.php index cd539104ad97fb46eb4f5888845b5ded73da6c67..97de37058f6508ed531fd08b8ad77228f374b409 100644 --- a/vendor/symfony/validator/Constraints/AllValidator.php +++ b/vendor/symfony/validator/Constraints/AllValidator.php @@ -26,7 +26,7 @@ class AllValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof All) { - throw new UnexpectedTypeException($constraint, All::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\All'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/BicValidator.php b/vendor/symfony/validator/Constraints/BicValidator.php index fe6e83a203def6dc9ea43edefbd599b5454cadb8..fc363461587e578abb94aa715676bab892a13d52 100644 --- a/vendor/symfony/validator/Constraints/BicValidator.php +++ b/vendor/symfony/validator/Constraints/BicValidator.php @@ -28,7 +28,7 @@ class BicValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Bic) { - throw new UnexpectedTypeException($constraint, Bic::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Bic'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/BlankValidator.php b/vendor/symfony/validator/Constraints/BlankValidator.php index 3fd7fcc9fe1c637dad4a2c0c37507753298c02ba..ca999b5aa39618ba874b1f7adede7b19a0b63e60 100644 --- a/vendor/symfony/validator/Constraints/BlankValidator.php +++ b/vendor/symfony/validator/Constraints/BlankValidator.php @@ -26,7 +26,7 @@ class BlankValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Blank) { - throw new UnexpectedTypeException($constraint, Blank::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Blank'); } if ('' !== $value && null !== $value) { diff --git a/vendor/symfony/validator/Constraints/CallbackValidator.php b/vendor/symfony/validator/Constraints/CallbackValidator.php index 5b51869ab12464dfa38691dbf466e023a73e826f..a66840eae1338b09810028e3361042e3d7720eec 100644 --- a/vendor/symfony/validator/Constraints/CallbackValidator.php +++ b/vendor/symfony/validator/Constraints/CallbackValidator.php @@ -29,7 +29,7 @@ class CallbackValidator extends ConstraintValidator public function validate($object, Constraint $constraint) { if (!$constraint instanceof Callback) { - throw new UnexpectedTypeException($constraint, Callback::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Callback'); } $method = $constraint->callback; diff --git a/vendor/symfony/validator/Constraints/CardSchemeValidator.php b/vendor/symfony/validator/Constraints/CardSchemeValidator.php index a4cb9f5c1fb7aee6960f9cb2b3a2673e0d759868..d39c87319a59420c136eb8929c534f420ea1258b 100644 --- a/vendor/symfony/validator/Constraints/CardSchemeValidator.php +++ b/vendor/symfony/validator/Constraints/CardSchemeValidator.php @@ -91,7 +91,7 @@ class CardSchemeValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof CardScheme) { - throw new UnexpectedTypeException($constraint, CardScheme::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\CardScheme'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/ChoiceValidator.php b/vendor/symfony/validator/Constraints/ChoiceValidator.php index 9ec0fc6703586ba916356798159199bb182dc010..00577ef462518c859d2ce14f6e724077b8d1c572 100644 --- a/vendor/symfony/validator/Constraints/ChoiceValidator.php +++ b/vendor/symfony/validator/Constraints/ChoiceValidator.php @@ -31,7 +31,7 @@ class ChoiceValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Choice) { - throw new UnexpectedTypeException($constraint, Choice::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Choice'); } if (!\is_array($constraint->choices) && !$constraint->callback) { diff --git a/vendor/symfony/validator/Constraints/CollectionValidator.php b/vendor/symfony/validator/Constraints/CollectionValidator.php index f8859b48eb5ef14795cd57c30088dd5358d93216..3b67e40a5c3d4ad9d9f9fdca67514ab6c7974dec 100644 --- a/vendor/symfony/validator/Constraints/CollectionValidator.php +++ b/vendor/symfony/validator/Constraints/CollectionValidator.php @@ -26,7 +26,7 @@ class CollectionValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Collection) { - throw new UnexpectedTypeException($constraint, Collection::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Collection'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/CountValidator.php b/vendor/symfony/validator/Constraints/CountValidator.php index a81419bae6cd93131dbafa11eb3aa77e14f93612..01f82a346600b8e5390d35d63a5a8f1399bb05f9 100644 --- a/vendor/symfony/validator/Constraints/CountValidator.php +++ b/vendor/symfony/validator/Constraints/CountValidator.php @@ -26,7 +26,7 @@ class CountValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Count) { - throw new UnexpectedTypeException($constraint, Count::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Count'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/CountryValidator.php b/vendor/symfony/validator/Constraints/CountryValidator.php index 8116495f2e8aecae61e3669fde1041e232d1655f..46585da8b969700e5abc8795d3a00de05af5bc9c 100644 --- a/vendor/symfony/validator/Constraints/CountryValidator.php +++ b/vendor/symfony/validator/Constraints/CountryValidator.php @@ -29,7 +29,7 @@ class CountryValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Country) { - throw new UnexpectedTypeException($constraint, Country::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Country'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/CurrencyValidator.php b/vendor/symfony/validator/Constraints/CurrencyValidator.php index de9d12cb1964de2736605ede776156756fcf7196..42fa8cfa456827fd68af9de5c8b2a2318704e4e1 100644 --- a/vendor/symfony/validator/Constraints/CurrencyValidator.php +++ b/vendor/symfony/validator/Constraints/CurrencyValidator.php @@ -30,7 +30,7 @@ class CurrencyValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Currency) { - throw new UnexpectedTypeException($constraint, Currency::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Currency'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/DateTimeValidator.php b/vendor/symfony/validator/Constraints/DateTimeValidator.php index bad043f20e6ea052ce4831ce601271d1acaad753..a632a34e43784f7e7a0ce91178898e871dac9443 100644 --- a/vendor/symfony/validator/Constraints/DateTimeValidator.php +++ b/vendor/symfony/validator/Constraints/DateTimeValidator.php @@ -31,7 +31,7 @@ class DateTimeValidator extends DateValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof DateTime) { - throw new UnexpectedTypeException($constraint, DateTime::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\DateTime'); } if (null === $value || '' === $value || $value instanceof \DateTimeInterface) { diff --git a/vendor/symfony/validator/Constraints/DateValidator.php b/vendor/symfony/validator/Constraints/DateValidator.php index c1c3bc9f8991fa3dc5be3f34ca8ac423e39a6c40..a1492c54c9a0344d96cd8d8593f7d2abe32b4cd5 100644 --- a/vendor/symfony/validator/Constraints/DateValidator.php +++ b/vendor/symfony/validator/Constraints/DateValidator.php @@ -44,7 +44,7 @@ public static function checkDate($year, $month, $day) public function validate($value, Constraint $constraint) { if (!$constraint instanceof Date) { - throw new UnexpectedTypeException($constraint, Date::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Date'); } if (null === $value || '' === $value || $value instanceof \DateTimeInterface) { diff --git a/vendor/symfony/validator/Constraints/EmailValidator.php b/vendor/symfony/validator/Constraints/EmailValidator.php index 1eb6a98bb89f24651f411145e69e10074b6a6acf..8fb4b886727af7e93161c24ceffd9d85767bb148 100644 --- a/vendor/symfony/validator/Constraints/EmailValidator.php +++ b/vendor/symfony/validator/Constraints/EmailValidator.php @@ -39,7 +39,7 @@ public function __construct($strict = false) public function validate($value, Constraint $constraint) { if (!$constraint instanceof Email) { - throw new UnexpectedTypeException($constraint, Email::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Email'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/ExpressionValidator.php b/vendor/symfony/validator/Constraints/ExpressionValidator.php index 7ef552dd4045f3858d609b78c2593f4dbeb0d257..a4dfadbfc03ba78ca22c12925ee711fac363ce32 100644 --- a/vendor/symfony/validator/Constraints/ExpressionValidator.php +++ b/vendor/symfony/validator/Constraints/ExpressionValidator.php @@ -36,7 +36,7 @@ public function __construct($propertyAccessor = null, ExpressionLanguage $expres public function validate($value, Constraint $constraint) { if (!$constraint instanceof Expression) { - throw new UnexpectedTypeException($constraint, Expression::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Expression'); } $variables = []; diff --git a/vendor/symfony/validator/Constraints/FileValidator.php b/vendor/symfony/validator/Constraints/FileValidator.php index 199d7676a6bbb4e2029c0a1a3938db3f316c34cc..0a58cd2d687a061bcba93c4abedaf455415bc7c8 100644 --- a/vendor/symfony/validator/Constraints/FileValidator.php +++ b/vendor/symfony/validator/Constraints/FileValidator.php @@ -41,7 +41,7 @@ class FileValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof File) { - throw new UnexpectedTypeException($constraint, File::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\File'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php b/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php index 290408ac0cc3f39a5cb5fbe3bb424db0160f9253..e196e688f3476347ba08b427531bf92fa96916a2 100644 --- a/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php +++ b/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php @@ -24,7 +24,7 @@ class GreaterThanOrEqualValidator extends AbstractComparisonValidator */ protected function compareValues($value1, $value2) { - return null === $value2 || $value1 >= $value2; + return $value1 >= $value2; } /** diff --git a/vendor/symfony/validator/Constraints/GreaterThanValidator.php b/vendor/symfony/validator/Constraints/GreaterThanValidator.php index 062503ab3f426a52b2d8ba452db3472df4cee0b6..9029e8fc46a80a4d9c7cde1b4b59d736ba4a119f 100644 --- a/vendor/symfony/validator/Constraints/GreaterThanValidator.php +++ b/vendor/symfony/validator/Constraints/GreaterThanValidator.php @@ -24,7 +24,7 @@ class GreaterThanValidator extends AbstractComparisonValidator */ protected function compareValues($value1, $value2) { - return null === $value2 || $value1 > $value2; + return $value1 > $value2; } /** diff --git a/vendor/symfony/validator/Constraints/IbanValidator.php b/vendor/symfony/validator/Constraints/IbanValidator.php index d4f8455bb7827f21154454929e025b84887aba17..3dcedb47dc1ea1637260ce8e2156e3e8d07eb12e 100644 --- a/vendor/symfony/validator/Constraints/IbanValidator.php +++ b/vendor/symfony/validator/Constraints/IbanValidator.php @@ -142,7 +142,7 @@ class IbanValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Iban) { - throw new UnexpectedTypeException($constraint, Iban::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Iban'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/ImageValidator.php b/vendor/symfony/validator/Constraints/ImageValidator.php index 7ca0cd32b3a43cd6825035c6f0c393efbaf5a0f9..4b6a6f3b20c6a4e6439d58d4d9f8d415a09342a2 100644 --- a/vendor/symfony/validator/Constraints/ImageValidator.php +++ b/vendor/symfony/validator/Constraints/ImageValidator.php @@ -31,7 +31,7 @@ class ImageValidator extends FileValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Image) { - throw new UnexpectedTypeException($constraint, Image::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Image'); } $violations = \count($this->context->getViolations()); diff --git a/vendor/symfony/validator/Constraints/IpValidator.php b/vendor/symfony/validator/Constraints/IpValidator.php index b978d1daaece434925ffb39c24d3094d73c9af78..5c687b900fdbb7aab26b8a0cc789a19971b99fe3 100644 --- a/vendor/symfony/validator/Constraints/IpValidator.php +++ b/vendor/symfony/validator/Constraints/IpValidator.php @@ -29,7 +29,7 @@ class IpValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Ip) { - throw new UnexpectedTypeException($constraint, Ip::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Ip'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/IsFalseValidator.php b/vendor/symfony/validator/Constraints/IsFalseValidator.php index 79c42348fec6827abe590a5cc8ef8240236de410..95245fb97bd9d7b7d02dda756efd23196f175f35 100644 --- a/vendor/symfony/validator/Constraints/IsFalseValidator.php +++ b/vendor/symfony/validator/Constraints/IsFalseValidator.php @@ -26,7 +26,7 @@ class IsFalseValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof IsFalse) { - throw new UnexpectedTypeException($constraint, IsFalse::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\IsFalse'); } if (null === $value || false === $value || 0 === $value || '0' === $value) { diff --git a/vendor/symfony/validator/Constraints/IsNullValidator.php b/vendor/symfony/validator/Constraints/IsNullValidator.php index b6e78170f92de4ce82dc99ab13b39c361bc71cb0..01b9d1e40a05e7a2dda01ea9cb082476760ce619 100644 --- a/vendor/symfony/validator/Constraints/IsNullValidator.php +++ b/vendor/symfony/validator/Constraints/IsNullValidator.php @@ -26,7 +26,7 @@ class IsNullValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof IsNull) { - throw new UnexpectedTypeException($constraint, IsNull::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\IsNull'); } if (null !== $value) { diff --git a/vendor/symfony/validator/Constraints/IsTrueValidator.php b/vendor/symfony/validator/Constraints/IsTrueValidator.php index 6088f6d7a7a64cee88fe8deb6dc2e212ff73ce34..89aa337d2c054375aeb73c1aa98c81c361d35882 100644 --- a/vendor/symfony/validator/Constraints/IsTrueValidator.php +++ b/vendor/symfony/validator/Constraints/IsTrueValidator.php @@ -26,7 +26,7 @@ class IsTrueValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof IsTrue) { - throw new UnexpectedTypeException($constraint, IsTrue::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\IsTrue'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/IsbnValidator.php b/vendor/symfony/validator/Constraints/IsbnValidator.php index 5810c4df69a5c43696d0e1a270da32e62f089ff9..9f0d1fa1a35a18d6b8ceadde10c791f10087a6f7 100644 --- a/vendor/symfony/validator/Constraints/IsbnValidator.php +++ b/vendor/symfony/validator/Constraints/IsbnValidator.php @@ -32,7 +32,7 @@ class IsbnValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Isbn) { - throw new UnexpectedTypeException($constraint, Isbn::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Isbn'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/IssnValidator.php b/vendor/symfony/validator/Constraints/IssnValidator.php index 50818d7bacf1fd1f66076458781720d4fecfd6ca..41da39ebd87bc170a76a8cb2e13d57d9b8a2f47e 100644 --- a/vendor/symfony/validator/Constraints/IssnValidator.php +++ b/vendor/symfony/validator/Constraints/IssnValidator.php @@ -31,7 +31,7 @@ class IssnValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Issn) { - throw new UnexpectedTypeException($constraint, Issn::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Issn'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/LanguageValidator.php b/vendor/symfony/validator/Constraints/LanguageValidator.php index 971e3c795f256305256205c80b297cce91ca7f86..1722034720c60734761335955437f77be55b294d 100644 --- a/vendor/symfony/validator/Constraints/LanguageValidator.php +++ b/vendor/symfony/validator/Constraints/LanguageValidator.php @@ -29,7 +29,7 @@ class LanguageValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Language) { - throw new UnexpectedTypeException($constraint, Language::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Language'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/LengthValidator.php b/vendor/symfony/validator/Constraints/LengthValidator.php index 01955ed035710f86aaa30a8f9518916679363b9f..d8cb09ccb65f813976ae256ba8b9fdd5c8312b65 100644 --- a/vendor/symfony/validator/Constraints/LengthValidator.php +++ b/vendor/symfony/validator/Constraints/LengthValidator.php @@ -26,7 +26,7 @@ class LengthValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Length) { - throw new UnexpectedTypeException($constraint, Length::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Length'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php b/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php index f7f4c8be5f326560562f14076c470506529f6616..54281eef5a673230ea53470dc81a1781e8c2ad42 100644 --- a/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php +++ b/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php @@ -24,7 +24,7 @@ class LessThanOrEqualValidator extends AbstractComparisonValidator */ protected function compareValues($value1, $value2) { - return null === $value2 || $value1 <= $value2; + return $value1 <= $value2; } /** diff --git a/vendor/symfony/validator/Constraints/LessThanValidator.php b/vendor/symfony/validator/Constraints/LessThanValidator.php index 64e107547ac8389f9c5708dc41405d02cf258703..ef7535fc9914316ceab5488eca62f11d2ca01177 100644 --- a/vendor/symfony/validator/Constraints/LessThanValidator.php +++ b/vendor/symfony/validator/Constraints/LessThanValidator.php @@ -24,7 +24,7 @@ class LessThanValidator extends AbstractComparisonValidator */ protected function compareValues($value1, $value2) { - return null === $value2 || $value1 < $value2; + return $value1 < $value2; } /** diff --git a/vendor/symfony/validator/Constraints/LocaleValidator.php b/vendor/symfony/validator/Constraints/LocaleValidator.php index 29c569c288e03d27ac119163835e261734a7da6f..40d63970e25a6ecb5f9ab5025f334b02d1283c85 100644 --- a/vendor/symfony/validator/Constraints/LocaleValidator.php +++ b/vendor/symfony/validator/Constraints/LocaleValidator.php @@ -29,7 +29,7 @@ class LocaleValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Locale) { - throw new UnexpectedTypeException($constraint, Locale::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Locale'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/LuhnValidator.php b/vendor/symfony/validator/Constraints/LuhnValidator.php index 2f652b3f6b62dd8acc31d5ca80c577d8780cb01b..89ebfdcc5c54d32b669f6f6faf992d3196ab431b 100644 --- a/vendor/symfony/validator/Constraints/LuhnValidator.php +++ b/vendor/symfony/validator/Constraints/LuhnValidator.php @@ -39,7 +39,7 @@ class LuhnValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Luhn) { - throw new UnexpectedTypeException($constraint, Luhn::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Luhn'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/NotBlankValidator.php b/vendor/symfony/validator/Constraints/NotBlankValidator.php index f862da1ec14f8e53a7599136c1385c841a5cef77..1d6c5bc983a373f94e2c3708f3d121f117fd9aca 100644 --- a/vendor/symfony/validator/Constraints/NotBlankValidator.php +++ b/vendor/symfony/validator/Constraints/NotBlankValidator.php @@ -26,7 +26,7 @@ class NotBlankValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof NotBlank) { - throw new UnexpectedTypeException($constraint, NotBlank::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\NotBlank'); } if (false === $value || (empty($value) && '0' != $value)) { diff --git a/vendor/symfony/validator/Constraints/NotNullValidator.php b/vendor/symfony/validator/Constraints/NotNullValidator.php index d02fcc43988a627120f5281555416a3173bd3bcd..d6f620713e6a606807eff2ebc186ea3cb7989d86 100644 --- a/vendor/symfony/validator/Constraints/NotNullValidator.php +++ b/vendor/symfony/validator/Constraints/NotNullValidator.php @@ -26,7 +26,7 @@ class NotNullValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof NotNull) { - throw new UnexpectedTypeException($constraint, NotNull::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\NotNull'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/RangeValidator.php b/vendor/symfony/validator/Constraints/RangeValidator.php index 43394601d7279e29bec955a7a2999640fff9a177..ea7d2778088c309209fb227affc345a7b101c7d5 100644 --- a/vendor/symfony/validator/Constraints/RangeValidator.php +++ b/vendor/symfony/validator/Constraints/RangeValidator.php @@ -27,7 +27,7 @@ class RangeValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Range) { - throw new UnexpectedTypeException($constraint, Range::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Range'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/RegexValidator.php b/vendor/symfony/validator/Constraints/RegexValidator.php index 62829ec5d083c2595ddbd6862f4b5633aaacafe8..c6b70feb7f0e14891e948360a83eef8814837218 100644 --- a/vendor/symfony/validator/Constraints/RegexValidator.php +++ b/vendor/symfony/validator/Constraints/RegexValidator.php @@ -29,7 +29,7 @@ class RegexValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Regex) { - throw new UnexpectedTypeException($constraint, Regex::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Regex'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/TimeValidator.php b/vendor/symfony/validator/Constraints/TimeValidator.php index 1c59d9e5e567ae234e7b775a7acc3e5adba99ae3..b1ee40c53051b241b94617a29e4b88937515215e 100644 --- a/vendor/symfony/validator/Constraints/TimeValidator.php +++ b/vendor/symfony/validator/Constraints/TimeValidator.php @@ -44,7 +44,7 @@ public static function checkTime($hour, $minute, $second) public function validate($value, Constraint $constraint) { if (!$constraint instanceof Time) { - throw new UnexpectedTypeException($constraint, Time::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Time'); } if (null === $value || '' === $value || $value instanceof \DateTimeInterface) { diff --git a/vendor/symfony/validator/Constraints/TypeValidator.php b/vendor/symfony/validator/Constraints/TypeValidator.php index ecd7cd8cf7e3768007f71a3e680fa37a233340fd..206836d3617fc6e0500bceb7c10014fd92630165 100644 --- a/vendor/symfony/validator/Constraints/TypeValidator.php +++ b/vendor/symfony/validator/Constraints/TypeValidator.php @@ -26,7 +26,7 @@ class TypeValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Type) { - throw new UnexpectedTypeException($constraint, Type::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Type'); } if (null === $value) { diff --git a/vendor/symfony/validator/Constraints/UrlValidator.php b/vendor/symfony/validator/Constraints/UrlValidator.php index 72affdf7b646c2551236b19a7f5a290d9959d045..b77701dd7ecec73ecfbf41af1c02c72b2999b1a2 100644 --- a/vendor/symfony/validator/Constraints/UrlValidator.php +++ b/vendor/symfony/validator/Constraints/UrlValidator.php @@ -23,7 +23,7 @@ class UrlValidator extends ConstraintValidator { const PATTERN = '~^ (%s):// # protocol - (([\_\.\pL\pN-]+:)?([\_\.\pL\pN-]+)@)? # basic auth + (([\.\pL\pN-]+:)?([\.\pL\pN-]+)@)? # basic auth ( ([\pL\pN\pS\-\_\.])+(\.?([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name | # or @@ -45,7 +45,7 @@ class UrlValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Url) { - throw new UnexpectedTypeException($constraint, Url::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Url'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/UuidValidator.php b/vendor/symfony/validator/Constraints/UuidValidator.php index a1f5e7fb523722c512624217eeaad7ed76ce900a..26de4614f324f0bdbec468e5d4b1fdbbbc5eafe1 100644 --- a/vendor/symfony/validator/Constraints/UuidValidator.php +++ b/vendor/symfony/validator/Constraints/UuidValidator.php @@ -67,7 +67,7 @@ class UuidValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Uuid) { - throw new UnexpectedTypeException($constraint, Uuid::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Uuid'); } if (null === $value || '' === $value) { diff --git a/vendor/symfony/validator/Constraints/ValidValidator.php b/vendor/symfony/validator/Constraints/ValidValidator.php index 85eabb80ae8e29a5e19101c46c5ffa1ba5d06995..695ec822540ed622cab3160ce33c6302fdb9823c 100644 --- a/vendor/symfony/validator/Constraints/ValidValidator.php +++ b/vendor/symfony/validator/Constraints/ValidValidator.php @@ -23,7 +23,7 @@ class ValidValidator extends ConstraintValidator public function validate($value, Constraint $constraint) { if (!$constraint instanceof Valid) { - throw new UnexpectedTypeException($constraint, Valid::class); + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Valid'); } if (null === $value) { diff --git a/vendor/symfony/validator/LICENSE b/vendor/symfony/validator/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/validator/LICENSE +++ b/vendor/symfony/validator/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/validator/Resources/translations/validators.ar.xlf b/vendor/symfony/validator/Resources/translations/validators.ar.xlf index 79dab63d7de58ea0540a9c50493f617ee8e3d641..12f26fdc886881d1885039f6128e62aaac892707 100644 --- a/vendor/symfony/validator/Resources/translations/validators.ar.xlf +++ b/vendor/symfony/validator/Resources/translations/validators.ar.xlf @@ -334,38 +334,6 @@ <source>This value should be valid JSON.</source> <target>هذه القيمة يجب أن تكون صالحة ل JSON.</target> </trans-unit> - <trans-unit id="87"> - <source>This collection should contain only unique elements.</source> - <target>يجب أن تحتوي هذه المجموعة علي عناصر فريدة فقط.</target> - </trans-unit> - <trans-unit id="88"> - <source>This value should be positive.</source> - <target>يجب أن تكون هذه القيمة موجبة.</target> - </trans-unit> - <trans-unit id="89"> - <source>This value should be either positive or zero.</source> - <target>يجب أن تكون هذه القيمة إما موجبة او صفر.</target> - </trans-unit> - <trans-unit id="90"> - <source>This value should be negative.</source> - <target>يجب أن تكون هذه القيمة سالبة.</target> - </trans-unit> - <trans-unit id="91"> - <source>This value should be either negative or zero.</source> - <target>يجب أن تكون هذه القيمة إما سالبة او صفر.</target> - </trans-unit> - <trans-unit id="92"> - <source>This value is not a valid timezone.</source> - <target>هذه القيمة ليست منطقة زمنية صحيحة.</target> - </trans-unit> - <trans-unit id="93"> - <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source> - <target>تم تسريب كلمة المرور هذه في خرق للبيانات، ويجب عدم استخدامها. يرجي استخدام كلمة مرور أخري.</target> - </trans-unit> - <trans-unit id="94"> - <source>This value should be between {{ min }} and {{ max }}.</source> - <target>يجب أن تكون هذه القيمة بين {{ min }} و {{ max }}.</target> - </trans-unit> </body> </file> </xliff> diff --git a/vendor/symfony/validator/Resources/translations/validators.ja.xlf b/vendor/symfony/validator/Resources/translations/validators.ja.xlf index 21e2392c7d96c53126ef2be1e5ae6d0e7d8e919b..5a391a2e6626e0417da5fbe633bcb1469040c5b0 100644 --- a/vendor/symfony/validator/Resources/translations/validators.ja.xlf +++ b/vendor/symfony/validator/Resources/translations/validators.ja.xlf @@ -362,10 +362,6 @@ <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source> <target>このパスワードは漏洩している為使用できません。</target> </trans-unit> - <trans-unit id="94"> - <source>This value should be between {{ min }} and {{ max }}.</source> - <target>{{ min }}以上{{ max }}以下でなければなりません。</target> - </trans-unit> </body> </file> </xliff> diff --git a/vendor/symfony/validator/Resources/translations/validators.sl.xlf b/vendor/symfony/validator/Resources/translations/validators.sl.xlf index cb12a8a9daa4d3ab15d88947fe6dc840c5b1ebad..6f5fd98ca192ef0b94508f81f190db754920a615 100644 --- a/vendor/symfony/validator/Resources/translations/validators.sl.xlf +++ b/vendor/symfony/validator/Resources/translations/validators.sl.xlf @@ -318,54 +318,6 @@ <source>Error</source> <target>Napaka</target> </trans-unit> - <trans-unit id="83"> - <source>This is not a valid UUID.</source> - <target>To ni veljaven UUID.</target> - </trans-unit> - <trans-unit id="84"> - <source>This value should be a multiple of {{ compared_value }}.</source> - <target>Ta vrednost bi morala biti večkratnik od {{ compared_value }}.</target> - </trans-unit> - <trans-unit id="85"> - <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source> - <target>Ta poslovna identifikacijska koda (BIC) ni povezana z IBAN {{ iban }}.</target> - </trans-unit> - <trans-unit id="86"> - <source>This value should be valid JSON.</source> - <target>Ta vrednost bi morala biti veljaven JSON.</target> - </trans-unit> - <trans-unit id="87"> - <source>This collection should contain only unique elements.</source> - <target>Ta zbirka bi morala vsebovati samo edinstvene elemente.</target> - </trans-unit> - <trans-unit id="88"> - <source>This value should be positive.</source> - <target>Ta vrednost bi morala biti pozitivna.</target> - </trans-unit> - <trans-unit id="89"> - <source>This value should be either positive or zero.</source> - <target>Ta vrednost bi morala biti pozitivna ali enaka nič.</target> - </trans-unit> - <trans-unit id="90"> - <source>This value should be negative.</source> - <target>Ta vrednost bi morala biti negativna.</target> - </trans-unit> - <trans-unit id="91"> - <source>This value should be either negative or zero.</source> - <target>Ta vrednost bi morala biti negativna ali enaka nič.</target> - </trans-unit> - <trans-unit id="92"> - <source>This value is not a valid timezone.</source> - <target>Ta vrednost ni veljaven časovni pas.</target> - </trans-unit> - <trans-unit id="93"> - <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source> - <target>To geslo je ušlo pri kršitvi varnosti podatkov in ga ne smete uporabljati. Prosimo, uporabite drugo geslo.</target> - </trans-unit> - <trans-unit id="94"> - <source>This value should be between {{ min }} and {{ max }}.</source> - <target>Ta vrednost bi morala biti med {{ min }} in {{ max }}.</target> - </trans-unit> </body> </file> </xliff> diff --git a/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf b/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf index 20dff43c6d904277e3a95f4a9357921fb20a1548..018dd1233ac61e77a9f52b4d6efcee3c7977de2f 100644 --- a/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf +++ b/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf @@ -24,11 +24,11 @@ </trans-unit> <trans-unit id="6"> <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> - <target>Morate odabrati bar {{ limit }} mogućnost.|Morate odabrati bar {{ limit }} mogućnosti.|Morate odabrati bar {{ limit }} mogućnosti.</target> + <target>Morate odabrati bar {{ limit }} mogućnost.|Morate odabrati bar {{ limit }} mogućnosti.</target> </trans-unit> <trans-unit id="7"> <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> - <target>Morate odabrati najviše {{ limit }} mogućnost.|Morate odabrati najviše {{ limit }} mogućnosti.|Morate odabrati najviše {{ limit }} mogućnosti.</target> + <target>Morate odabrati najviše {{ limit }} mogućnost.|Morate odabrati najviše {{ limit }} mogućnosti.</target> </trans-unit> <trans-unit id="8"> <source>One or more of the given values is invalid.</source> @@ -76,7 +76,7 @@ </trans-unit> <trans-unit id="19"> <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> - <target>Vrednost je predugačka. Trebalo bi da ima {{ limit }} karakter ili manje.|Vrednost je predugačka. Trebalo bi da ima {{ limit }} karaktera ili manje.|Vrednost je predugačka. Trebalo bi da ima {{ limit }} karaktera ili manje.</target> + <target>Vrednost je predugačka. Trebalo bi da ima {{ limit }} karakter ili manje.|Vrednost je predugačka. Trebalo bi da ima {{ limit }} karaktera ili manje.</target> </trans-unit> <trans-unit id="20"> <source>This value should be {{ limit }} or more.</source> @@ -84,7 +84,7 @@ </trans-unit> <trans-unit id="21"> <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> - <target>Vrednost je prekratka. Trebalo bi da ima {{ limit }} karakter ili više.|Vrednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili više.|Vrednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili više.</target> + <target>Vrednost je prekratka. Trebalo bi da ima {{ limit }} karakter ili više.|Vrednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili više.</target> </trans-unit> <trans-unit id="22"> <source>This value should not be blank.</source> @@ -180,7 +180,7 @@ </trans-unit> <trans-unit id="48"> <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> - <target>Vrednost bi trebalo da ima tačno {{ limit }} karakter.|Vrednost bi trebalo da ima tačno {{ limit }} karaktera.|Vrednost bi trebalo da ima tačno {{ limit }} karaktera.</target> + <target>Vrednost bi trebalo da ima tačno {{ limit }} karakter.|Vrednost bi trebalo da ima tačno {{ limit }} karaktera.</target> </trans-unit> <trans-unit id="49"> <source>The file was only partially uploaded.</source> @@ -204,15 +204,15 @@ </trans-unit> <trans-unit id="54"> <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> - <target>Ova kolekcija bi trebalo da sadrži {{ limit }} ili više elemenata.|Ova kolekcija bi trebalo da sadrži {{ limit }} ili više elemenata.|Ova kolekcija bi trebalo da sadrži {{ limit }} ili više elemenata.</target> + <target>Ova kolekcija bi trebalo da sadrži {{ limit }} ili više elemenata.|Ova kolekcija bi trebalo da sadrži {{ limit }} ili više elemenata.</target> </trans-unit> <trans-unit id="55"> <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> - <target>Ova kolekcija bi trebalo da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija bi trebalo da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija bi trebalo da sadrži {{ limit }} ili manje elemenata.</target> + <target>Ova kolekcija bi trebalo da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija bi trebalo da sadrži {{ limit }} ili manje elemenata.</target> </trans-unit> <trans-unit id="56"> <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> - <target>Ova kolekcija bi trebalo da sadrži tačno {{ limit }} element.|Ova kolekcija bi trebalo da sadrži tačno {{ limit }} elementa.|Ova kolekcija bi trebalo da sadrži tačno {{ limit }} elemenata.</target> + <target>Ova kolekcija bi trebalo da sadrži tačno {{ limit }} element.|Ova kolekcija bi trebalo da sadrži tačno {{ limit }} elemenata.</target> </trans-unit> <trans-unit id="57"> <source>Invalid card number.</source> diff --git a/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf b/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf index 7cef875f5812e68edd0a110d99b4ef0da8431e65..d9d5f2f622b43fc5c155e0a08e781807f30e58e8 100644 --- a/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf +++ b/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf @@ -278,94 +278,6 @@ <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> <target>該值不應與 {{ compared_value_type }} {{ compared_value }} 相同。</target> </trans-unit> - <trans-unit id="73"> - <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> - <target>圖像格式過大 ({{ ratio }})。 最大允許尺寸 {{ max_ratio }}。</target> - </trans-unit> - <trans-unit id="74"> - <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> - <target>圖像格式過小 ({{ ratio }})。最小尺寸 {{ min_ratio }}。</target> - </trans-unit> - <trans-unit id="75"> - <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> - <target>方形圖像 ({{ width }}x{{ height }}px)。不接受方形圖像。</target> - </trans-unit> - <trans-unit id="76"> - <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> - <target>紀念冊布局圖像 ({{ width }}x{{ height }}px)。 不接受紀念冊布局圖像。</target> - </trans-unit> - <trans-unit id="77"> - <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> - <target>書籍布局圖像 ({{ width }}x{{ height }}px)。不接受圖像書籍布局。</target> - </trans-unit> - <trans-unit id="78"> - <source>An empty file is not allowed.</source> - <target>不接受空白文件。</target> - </trans-unit> - <trans-unit id="79"> - <source>The host could not be resolved.</source> - <target>未找到服務器。</target> - </trans-unit> - <trans-unit id="80"> - <source>This value does not match the expected {{ charset }} charset.</source> - <target>該數值不符合預期 {{ charset }} 符號編碼。</target> - </trans-unit> - <trans-unit id="81"> - <source>This is not a valid Business Identifier Code (BIC).</source> - <target>無效企業識別碼 (BIC)。</target> - </trans-unit> - <trans-unit id="82"> - <source>Error.</source> - <target>錯誤。</target> - </trans-unit> - <trans-unit id="83"> - <source>This is not a valid UUID.</source> - <target>無效的通用唯壹標識符 (UUID)。</target> - </trans-unit> - <trans-unit id="84"> - <source>This value should be a multiple of {{ compared_value }}.</source> - <target>該值必須是倍數 {{ compared_value }}。</target> - </trans-unit> - <trans-unit id="85"> - <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source> - <target>該企業識別碼 (BIC) 與銀行賬戶國際編號不壹致 (IBAN) {{ iban }}。</target> - </trans-unit> - <trans-unit id="86"> - <source>This value should be valid JSON.</source> - <target>該數值必須序列化為JSON格式。</target> - </trans-unit> - <trans-unit id="87"> - <source>This collection should contain only unique elements.</source> - <target>該集合應僅包含唯壹元素。</target> - </trans-unit> - <trans-unit id="88"> - <source>This value should be positive.</source> - <target>數值應為正數。</target> - </trans-unit> - <trans-unit id="89"> - <source>This value should be either positive or zero.</source> - <target>數值應或未正數,或為零。</target> - </trans-unit> - <trans-unit id="90"> - <source>This value should be negative.</source> - <target>數值應為負數。</target> - </trans-unit> - <trans-unit id="91"> - <source>This value should be either negative or zero.</source> - <target>數值應或未負數,或為零。</target> - </trans-unit> - <trans-unit id="92"> - <source>This value is not a valid timezone.</source> - <target>無效時區。</target> - </trans-unit> - <trans-unit id="93"> - <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source> - <target>依據您的密碼,發生數據泄露,請勿使用改密碼。請更換密碼。</target> - </trans-unit> - <trans-unit id="94"> - <source>This value should be between {{ min }} and {{ max }}.</source> - <target>該數值應在 {{ min }} 和 {{ max }} 之間。</target> - </trans-unit> </body> </file> </xliff> diff --git a/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php b/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php index ed57d396ae00e066314fa99bd95734b847e1c491..18705b7987efe49e1607eb885aa9d68865b45051 100644 --- a/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php +++ b/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php @@ -177,8 +177,7 @@ protected function expectValidateAt($i, $propertyPath, $value, $group) ->willReturn($validator); $validator->expects($this->at(2 * $i + 1)) ->method('validate') - ->with($value, $this->logicalOr(null, [], $this->isInstanceOf('\Symfony\Component\Validator\Constraints\Valid')), $group) - ->willReturn($validator); + ->with($value, $this->logicalOr(null, [], $this->isInstanceOf('\Symfony\Component\Validator\Constraints\Valid')), $group); } protected function expectValidateValueAt($i, $propertyPath, $value, $constraints, $group = null) @@ -190,8 +189,7 @@ protected function expectValidateValueAt($i, $propertyPath, $value, $constraints ->willReturn($contextualValidator); $contextualValidator->expects($this->at(2 * $i + 1)) ->method('validate') - ->with($value, $constraints, $group) - ->willReturn($contextualValidator); + ->with($value, $constraints, $group); } protected function assertNoViolation() diff --git a/vendor/symfony/validator/Tests/ConstraintValidatorTest.php b/vendor/symfony/validator/Tests/ConstraintValidatorTest.php index 6ca3eab41fd6edade96545fa3cc067a6d2911da9..96af6f13eb4e77e802d1be9d591e5df847a9c440 100644 --- a/vendor/symfony/validator/Tests/ConstraintValidatorTest.php +++ b/vendor/symfony/validator/Tests/ConstraintValidatorTest.php @@ -27,9 +27,6 @@ public function testFormatValue($expected, $value, $format = 0) public function formatValueProvider() { - $defaultTimezone = date_default_timezone_get(); - date_default_timezone_set('Europe/Moscow'); // GMT+3 - $data = [ ['true', true], ['false', false], @@ -39,15 +36,10 @@ public function formatValueProvider() ['array', []], ['object', $toString = new TestToStringObject()], ['ccc', $toString, ConstraintValidator::OBJECT_TO_STRING], - ['object', $dateTime = new \DateTimeImmutable('1971-02-02T08:00:00UTC')], - [class_exists(\IntlDateFormatter::class) ? 'Oct 4, 2019, 11:02 AM' : '2019-10-04 11:02:03', new \DateTimeImmutable('2019-10-04T11:02:03+09:00'), ConstraintValidator::PRETTY_DATE], - [class_exists(\IntlDateFormatter::class) ? 'Feb 2, 1971, 8:00 AM' : '1971-02-02 08:00:00', $dateTime, ConstraintValidator::PRETTY_DATE], - [class_exists(\IntlDateFormatter::class) ? 'Jan 1, 1970, 6:00 AM' : '1970-01-01 06:00:00', new \DateTimeImmutable('1970-01-01T06:00:00Z'), ConstraintValidator::PRETTY_DATE], - [class_exists(\IntlDateFormatter::class) ? 'Jan 1, 1970, 3:00 PM' : '1970-01-01 15:00:00', (new \DateTimeImmutable('1970-01-01T23:00:00'))->setTimezone(new \DateTimeZone('America/New_York')), ConstraintValidator::PRETTY_DATE], + ['object', $dateTime = (new \DateTimeImmutable('@0'))->setTimezone(new \DateTimeZone('UTC'))], + [class_exists(\IntlDateFormatter::class) ? 'Jan 1, 1970, 12:00 AM' : '1970-01-01 00:00:00', $dateTime, ConstraintValidator::PRETTY_DATE], ]; - date_default_timezone_set($defaultTimezone); - return $data; } } diff --git a/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php b/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php index 3e8a9dcd7b8291cd0deb1fd87b4686a52cda6d96..b02e57cfa235855e6e48199ef3795b5f268e313d 100644 --- a/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php +++ b/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php @@ -53,7 +53,10 @@ protected static function addPhp5Dot5Comparisons(array $comparisons) foreach ($comparison as $i => $value) { if ($value instanceof \DateTime) { - $comparison[$i] = new \DateTimeImmutable($value->format('Y-m-d H:i:s.u e')); + $comparison[$i] = new \DateTimeImmutable( + $value->format('Y-m-d H:i:s.u e'), + $value->getTimezone() + ); $add = true; } elseif ('DateTime' === $value) { $comparison[$i] = 'DateTimeImmutable'; @@ -234,31 +237,6 @@ public function throwsOnInvalidStringDatesProvider() ]; } - /** - * @dataProvider provideComparisonsToNullValueAtPropertyPath - */ - public function testCompareWithNullValueAtPropertyAt($dirtyValue, $dirtyValueAsString, $isValid) - { - $constraint = $this->createConstraint(['propertyPath' => 'value']); - $constraint->message = 'Constraint Message'; - - $object = new ComparisonTest_Class(null); - $this->setObject($object); - - $this->validator->validate($dirtyValue, $constraint); - - if ($isValid) { - $this->assertNoViolation(); - } else { - $this->buildViolation('Constraint Message') - ->setParameter('{{ value }}', $dirtyValueAsString) - ->setParameter('{{ compared_value }}', 'null') - ->setParameter('{{ compared_value_type }}', 'NULL') - ->setCode($this->getErrorCode()) - ->assertRaised(); - } - } - /** * @return array */ @@ -280,8 +258,6 @@ public function provideAllInvalidComparisons() */ abstract public function provideInvalidComparisons(); - abstract public function provideComparisonsToNullValueAtPropertyPath(); - /** * @param array|null $options Options for the constraint * diff --git a/vendor/symfony/validator/Tests/Constraints/EqualToValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/EqualToValidatorTest.php index 880dbd7795c2e870708853005fcab61c8693f953..c1eb2f93ad75416c8eefb7f3758bf1f1cf11e2c0 100644 --- a/vendor/symfony/validator/Tests/Constraints/EqualToValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/EqualToValidatorTest.php @@ -75,11 +75,4 @@ public function provideInvalidComparisons() [new ComparisonTest_Class(4), '4', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', false], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php index 043c02e7a72d4fa89310e5f8751f6bb06384ea43..d8d8eab8bdeeed1a08c5605183df84f4df5e3658 100644 --- a/vendor/symfony/validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php @@ -78,11 +78,4 @@ public function provideInvalidComparisons() ['b', '"b"', 'c', '"c"', 'string'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', true], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/GreaterThanValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/GreaterThanValidatorTest.php index 119c162edb5e2a900866851fc5a5a7873a35947f..e678496c41e68198cf036ec6ccf185409e6fbcda 100644 --- a/vendor/symfony/validator/Tests/Constraints/GreaterThanValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/GreaterThanValidatorTest.php @@ -80,11 +80,4 @@ public function provideInvalidComparisons() ['22', '"22"', '22', '"22"', 'string'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', true], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/IdenticalToValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/IdenticalToValidatorTest.php index 1d3662f49ae45a118c270d8bf59be2f26c300b36..c96ac16a919309832c28310e739bd7611b673d3a 100644 --- a/vendor/symfony/validator/Tests/Constraints/IdenticalToValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/IdenticalToValidatorTest.php @@ -93,11 +93,4 @@ public function provideInvalidComparisons() [new ComparisonTest_Class(4), '4', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', false], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/LessThanOrEqualValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/LessThanOrEqualValidatorTest.php index 9311706e7df389651522edab7090ed323f59c39b..b77deff6163d632b0c9635ca24299dd00d589792 100644 --- a/vendor/symfony/validator/Tests/Constraints/LessThanOrEqualValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/LessThanOrEqualValidatorTest.php @@ -81,11 +81,4 @@ public function provideInvalidComparisons() ['c', '"c"', 'b', '"b"', 'string'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', true], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/LessThanValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/LessThanValidatorTest.php index c40389440df50164841cfc80ad5dda03e82ff5c4..7d209ed5d4719297708a44821c4cbf1974d1e0f7 100644 --- a/vendor/symfony/validator/Tests/Constraints/LessThanValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/LessThanValidatorTest.php @@ -79,11 +79,4 @@ public function provideInvalidComparisons() ['333', '"333"', '22', '"22"', 'string'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', true], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/NotEqualToValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/NotEqualToValidatorTest.php index 8577159583defcdc334589bbb439d1f557cee293..810f7a175f10416530a307992a0c41135a5fe6b0 100644 --- a/vendor/symfony/validator/Tests/Constraints/NotEqualToValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/NotEqualToValidatorTest.php @@ -75,11 +75,4 @@ public function provideInvalidComparisons() [new ComparisonTest_Class(5), '5', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'], ]; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', true], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/NotIdenticalToValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/NotIdenticalToValidatorTest.php index f14c5bd0dce8a5fca8bc51f7b6e84c431d661818..0cb9ec543114c9e3811441348116d22d8bb1d7af 100644 --- a/vendor/symfony/validator/Tests/Constraints/NotIdenticalToValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/NotIdenticalToValidatorTest.php @@ -93,11 +93,4 @@ public function provideInvalidComparisons() return $comparisons; } - - public function provideComparisonsToNullValueAtPropertyPath() - { - return [ - [5, '5', true], - ]; - } } diff --git a/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php index 0357172680c612cacf81d7b4a1cfb31901631042..f04dd44bc961d613b629dfd707352c210717904a 100644 --- a/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php +++ b/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php @@ -117,11 +117,9 @@ public function getValidUrls() ['http://☎.com/'], ['http://username:password@symfony.com'], ['http://user.name:password@symfony.com'], - ['http://user_name:pass_word@symfony.com'], ['http://username:pass.word@symfony.com'], ['http://user.name:pass.word@symfony.com'], ['http://user-name@symfony.com'], - ['http://user_name@symfony.com'], ['http://symfony.com?'], ['http://symfony.com?query=1'], ['http://symfony.com/?query=1'], diff --git a/vendor/symfony/validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php b/vendor/symfony/validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php index c5c3b4e1966d2ad23c72df208b164525200b4ad7..069ccd322929ea5a486f189c6c1ef9fb6dad436b 100644 --- a/vendor/symfony/validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php +++ b/vendor/symfony/validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php @@ -33,7 +33,7 @@ protected function tearDown() public function testLoadClassMetadataReturnsTrueIfSuccessful() { $loader = new StaticMethodLoader('loadMetadata'); - $metadata = new ClassMetadata(StaticLoaderEntity::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderEntity'); $this->assertTrue($loader->loadClassMetadata($metadata)); } @@ -49,7 +49,7 @@ public function testLoadClassMetadataReturnsFalseIfNotSuccessful() public function testLoadClassMetadata() { $loader = new StaticMethodLoader('loadMetadata'); - $metadata = new ClassMetadata(StaticLoaderEntity::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderEntity'); $loader->loadClassMetadata($metadata); @@ -59,12 +59,12 @@ public function testLoadClassMetadata() public function testLoadClassMetadataDoesNotRepeatLoadWithParentClasses() { $loader = new StaticMethodLoader('loadMetadata'); - $metadata = new ClassMetadata(StaticLoaderDocument::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderDocument'); $loader->loadClassMetadata($metadata); $this->assertCount(0, $metadata->getConstraints()); $loader = new StaticMethodLoader('loadMetadata'); - $metadata = new ClassMetadata(BaseStaticLoaderDocument::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\BaseStaticLoaderDocument'); $loader->loadClassMetadata($metadata); $this->assertCount(1, $metadata->getConstraints()); } @@ -72,7 +72,7 @@ public function testLoadClassMetadataDoesNotRepeatLoadWithParentClasses() public function testLoadClassMetadataIgnoresInterfaces() { $loader = new StaticMethodLoader('loadMetadata'); - $metadata = new ClassMetadata(StaticLoaderInterface::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderInterface'); $loader->loadClassMetadata($metadata); @@ -82,7 +82,7 @@ public function testLoadClassMetadataIgnoresInterfaces() public function testLoadClassMetadataInAbstractClasses() { $loader = new StaticMethodLoader('loadMetadata'); - $metadata = new ClassMetadata(AbstractStaticLoader::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticLoader'); $loader->loadClassMetadata($metadata); @@ -95,7 +95,7 @@ public function testLoadClassMetadataIgnoresAbstractMethods() // strict standards error error_reporting(0); - $metadata = new ClassMetadata(AbstractStaticMethodLoader::class); + $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticMethodLoader'); $loader = new StaticMethodLoader('loadMetadata'); $loader->loadClassMetadata($metadata); diff --git a/vendor/symfony/yaml/Dumper.php b/vendor/symfony/yaml/Dumper.php index 641dcd7f5419cbc9c28b7e7e77b7ef006fc51249..a496dcc88ec2f7ea8f817a894d8199aa4b1ac5d3 100644 --- a/vendor/symfony/yaml/Dumper.php +++ b/vendor/symfony/yaml/Dumper.php @@ -105,7 +105,7 @@ public function dump($input, $inline = 0, $indent = 0, $flags = 0) $blockIndentationIndicator = (' ' === substr($value, 0, 1)) ? (string) $this->indentation : ''; $output .= sprintf("%s%s%s |%s\n", $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator); - foreach (explode("\n", $value) as $row) { + foreach (preg_split('/\n|\r\n/', $value) as $row) { $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row); } @@ -115,19 +115,6 @@ public function dump($input, $inline = 0, $indent = 0, $flags = 0) if ($value instanceof TaggedValue) { $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); - if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) { - // If the first line starts with a space character, the spec requires a blockIndicationIndicator - // http://www.yaml.org/spec/1.2/spec.html#id2793979 - $blockIndentationIndicator = (' ' === substr($value->getValue(), 0, 1)) ? (string) $this->indentation : ''; - $output .= sprintf(" |%s\n", $blockIndentationIndicator); - - foreach (explode("\n", $value->getValue()) as $row) { - $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row); - } - - continue; - } - if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) { $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; } else { diff --git a/vendor/symfony/yaml/Inline.php b/vendor/symfony/yaml/Inline.php index 73aba3cb8b0dcf75c7e36a2c0731080a83737efc..7d3218a35e187b7f9974faf1cc128cf854f8c62a 100644 --- a/vendor/symfony/yaml/Inline.php +++ b/vendor/symfony/yaml/Inline.php @@ -504,11 +504,6 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = [] $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false, [], true); - if ('!php/const' === $key) { - $key .= self::parseScalar($mapping, $flags, [':', ' '], $i, false, [], true); - $key = self::evaluateScalar($key, $flags); - } - if (':' !== $key && false === $i = strpos($mapping, ':', $i)) { break; } @@ -740,11 +735,11 @@ private static function evaluateScalar($scalar, $flags, $references = []) // Optimize for returning strings. // no break case '+' === $scalar[0] || '-' === $scalar[0] || '.' === $scalar[0] || is_numeric($scalar[0]): - if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { - $scalar = str_replace('_', '', (string) $scalar); - } - switch (true) { + case Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar): + $scalar = str_replace('_', '', (string) $scalar); + // omitting the break / return as integers are handled in the next case + // no break case ctype_digit($scalar): $raw = $scalar; $cast = (int) $scalar; @@ -754,7 +749,7 @@ private static function evaluateScalar($scalar, $flags, $references = []) $raw = $scalar; $cast = (int) $scalar; - return '0' == $scalar[1] ? -octdec(substr($scalar, 1)) : (($raw === (string) $cast) ? $cast : $raw); + return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw === (string) $cast) ? $cast : $raw); case is_numeric($scalar): case Parser::preg_match(self::getHexRegex(), $scalar): $scalar = str_replace('_', '', $scalar); diff --git a/vendor/symfony/yaml/LICENSE b/vendor/symfony/yaml/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..a677f43763ca467472898351b328aee41e2edd7c 100644 --- a/vendor/symfony/yaml/LICENSE +++ b/vendor/symfony/yaml/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/yaml/README.md b/vendor/symfony/yaml/README.md index b914e7836c7a51977ae37d3815af90ddeca7ba25..0d324881ce5e41c67ab20e2700f9640748d8c2fa 100644 --- a/vendor/symfony/yaml/README.md +++ b/vendor/symfony/yaml/README.md @@ -6,7 +6,7 @@ The Yaml component loads and dumps YAML files. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/yaml.html) + * [Documentation](https://symfony.com/doc/current/components/yaml/index.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) diff --git a/vendor/symfony/yaml/Tests/DumperTest.php b/vendor/symfony/yaml/Tests/DumperTest.php index 231cf9a838fc7443dc3b2aec18184ab4095c21fc..1a1ef25a5a4bc052a81ce99ae33ec154d5b7717b 100644 --- a/vendor/symfony/yaml/Tests/DumperTest.php +++ b/vendor/symfony/yaml/Tests/DumperTest.php @@ -553,39 +553,6 @@ public function testDumpingNotInlinedNullTaggedValue() $this->assertSame($expected, $this->dumper->dump($data, 2)); } - public function testDumpingMultiLineStringAsScalarBlockTaggedValue() - { - $data = [ - 'foo' => new TaggedValue('bar', "foo\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz"), - ]; - $expected = <<<YAML -foo: !bar | - foo - line with trailing spaces: - - bar - integer like line: - 123456789 - empty line: - - baz - -YAML; - - $this->assertSame($expected, $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK)); - } - - public function testDumpingInlinedMultiLineIfRnBreakLineInTaggedValue() - { - $data = [ - 'data' => [ - 'foo' => new TaggedValue('bar', "foo\r\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz"), - ], - ]; - - $this->assertSame(file_get_contents(__DIR__.'/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml'), $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK)); - } - public function testDumpMultiLineStringAsScalarBlock() { $data = [ diff --git a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml b/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml deleted file mode 100644 index f8c9112fd52a5b1462115155a32a240503d8a0a8..0000000000000000000000000000000000000000 --- a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml +++ /dev/null @@ -1,2 +0,0 @@ -data: - foo: !bar "foo\r\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz" diff --git a/vendor/symfony/yaml/Tests/InlineTest.php b/vendor/symfony/yaml/Tests/InlineTest.php index 54372d69505bc81f3b907ef7ac4bbdac03056af0..014a12a706723b27205d6de7fd3cae534000c821 100644 --- a/vendor/symfony/yaml/Tests/InlineTest.php +++ b/vendor/symfony/yaml/Tests/InlineTest.php @@ -58,7 +58,6 @@ public function getTestsForParsePhpConstants() ['!php/const PHP_INT_MAX', PHP_INT_MAX], ['[!php/const PHP_INT_MAX]', [PHP_INT_MAX]], ['{ foo: !php/const PHP_INT_MAX }', ['foo' => PHP_INT_MAX]], - ['{ !php/const PHP_INT_MAX: foo }', [PHP_INT_MAX => 'foo']], ['!php/const NULL', null], ]; } @@ -94,7 +93,6 @@ public function getTestsForParseLegacyPhpConstants() ['!php/const:PHP_INT_MAX', PHP_INT_MAX], ['[!php/const:PHP_INT_MAX]', [PHP_INT_MAX]], ['{ foo: !php/const:PHP_INT_MAX }', ['foo' => PHP_INT_MAX]], - ['{ !php/const:PHP_INT_MAX: foo }', [PHP_INT_MAX => 'foo']], ['!php/const:NULL', null], ]; } @@ -783,20 +781,4 @@ public function testUnfinishedInlineMap() $this->expectExceptionMessage('Unexpected end of line, expected one of ",}" at line 1 (near "{abc: \'def\'").'); Inline::parse("{abc: 'def'"); } - - /** - * @dataProvider getTestsForOctalNumbers - */ - public function testParseOctalNumbers($expected, $yaml) - { - self::assertSame($expected, Inline::parse($yaml)); - } - - public function getTestsForOctalNumbers() - { - return [ - 'positive octal number' => [28, '034'], - 'negative octal number' => [-28, '-034'], - ]; - } } diff --git a/vendor/twig/twig/.gitattributes b/vendor/twig/twig/.gitattributes deleted file mode 100644 index 3a3ce6e7ce246aa8a0760f07b39a3c39b11d5a4f..0000000000000000000000000000000000000000 --- a/vendor/twig/twig/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -/tests export-ignore -/phpunit.xml.dist export-ignore diff --git a/vendor/twig/twig/CHANGELOG b/vendor/twig/twig/CHANGELOG index e549c930723aa58941da3e23aeca60083bde056f..6ca3d45a1c7e389382b521f339d75cfb774a73ed 100644 --- a/vendor/twig/twig/CHANGELOG +++ b/vendor/twig/twig/CHANGELOG @@ -1,12 +1,3 @@ -* 1.42.5 (2020-02-11) - - * Fix implementation of case-insensitivity for method names - -* 1.42.4 (2019-11-11) - - * optimized "block('foo') ?? 'bar" - * added supported for exponential numbers - * 1.42.3 (2019-08-24) * fixed the "split" filter when the delimiter is "0" diff --git a/vendor/twig/twig/LICENSE b/vendor/twig/twig/LICENSE index 5e8a0b8b9f8140d804e33417f7f2baf2a51c9d2f..d06ced2a39c59b2112fb5524ddde48234fc7cee4 100644 --- a/vendor/twig/twig/LICENSE +++ b/vendor/twig/twig/LICENSE @@ -1,4 +1,6 @@ -Copyright (c) 2009-2020 by the Twig Team. +Copyright (c) 2009-2019 by the Twig Team. + +Some rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/vendor/twig/twig/composer.json b/vendor/twig/twig/composer.json index c306353a9da0ad251bea843d8f5f09a493d950b6..9807aa7711b96176b9710723130c8d76905a4f7a 100644 --- a/vendor/twig/twig/composer.json +++ b/vendor/twig/twig/composer.json @@ -14,6 +14,7 @@ }, { "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -27,7 +28,8 @@ "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4@dev|^5.0", + "symfony/debug": "^3.4|^4.2", "psr/container": "^1.0" }, "autoload": { diff --git a/vendor/twig/twig/doc/advanced.rst b/vendor/twig/twig/doc/advanced.rst index 2b0053b6eff42cfbabf905018fb054e21f1a94be..e253294191dab84c3c46424ca816f970f62a6ddf 100644 --- a/vendor/twig/twig/doc/advanced.rst +++ b/vendor/twig/twig/doc/advanced.rst @@ -584,6 +584,11 @@ to host all the specific tags and filters you want to add to Twig. recompile your templates whenever you make a change to it (when ``auto_reload`` is enabled). +.. note:: + + Before writing your own extensions, have a look at the Twig official + extension repository: https://github.com/twigphp/Twig-extensions. + An extension is a class that implements the following interface:: interface Twig_ExtensionInterface @@ -660,7 +665,7 @@ An extension is a class that implements the following interface:: To keep your extension class clean and lean, inherit from the built-in ``\Twig\Extension\AbstractExtension`` class instead of implementing the interface as it provides -empty implementations for all methods:: +empty implementations for all methods: class Project_Twig_Extension extends \Twig\Extension\AbstractExtension { diff --git a/vendor/twig/twig/doc/advanced_legacy.rst b/vendor/twig/twig/doc/advanced_legacy.rst index 409b9144058e78d28f19833e3f865138eea2f1bd..cc87b9c9e8435ad170c6034d82dfee934ef46f8c 100644 --- a/vendor/twig/twig/doc/advanced_legacy.rst +++ b/vendor/twig/twig/doc/advanced_legacy.rst @@ -524,6 +524,11 @@ to host all the specific tags and filters you want to add to Twig. recompile your templates whenever you make a change to it (when the ``auto_reload`` is enabled). +.. note:: + + Before writing your own extensions, have a look at the Twig official + extension repository: https://github.com/twigphp/Twig-extensions. + An extension is a class that implements the following interface:: interface Twig_ExtensionInterface diff --git a/vendor/twig/twig/doc/api.rst b/vendor/twig/twig/doc/api.rst index 40ccd6992eae2ce5e88e02a3e7222bf7c068bf68..b96b0d4e7f3e4fa96178f48e25f7211009666be6 100644 --- a/vendor/twig/twig/doc/api.rst +++ b/vendor/twig/twig/doc/api.rst @@ -19,7 +19,8 @@ to have multiple environments side by side, with different configurations. The typical way to configure Twig to load templates for an application looks roughly like this:: - require_once '/path/to/vendor/autoload.php'; + require_once '/path/to/lib/Twig/Autoloader.php'; + Twig_Autoloader::register(); $loader = new \Twig\Loader\FilesystemLoader('/path/to/templates'); $twig = new \Twig\Environment($loader, [ @@ -356,8 +357,8 @@ This section describes the features added by the built-in extensions. .. tip:: - Read the chapter about :doc:`extending Twig <advanced>` to learn how to - create your own extensions. + Read the chapter about extending Twig to learn how to create your own + extensions. Core Extension ~~~~~~~~~~~~~~ @@ -416,7 +417,7 @@ The escaping rules are implemented as follows: {% set text = "Twig<br />" %} {{ text }} {# will be escaped #} -* Expressions which the result is a literal or a variable marked safe +* Expressions which the result is always a literal or a variable marked safe are never automatically escaped: .. code-block:: twig @@ -424,12 +425,14 @@ The escaping rules are implemented as follows: {{ foo ? "Twig<br />" : "<br />Twig" }} {# won't be escaped #} {% set text = "Twig<br />" %} - {{ true ? text : "<br />Twig" }} {# will be escaped #} - {{ false ? text : "<br />Twig" }} {# won't be escaped #} + {{ foo ? text : "<br />Twig" }} {# will be escaped #} {% set text = "Twig<br />" %} {{ foo ? text|raw : "<br />Twig" }} {# won't be escaped #} + {% set text = "Twig<br />" %} + {{ foo ? text|escape : "<br />Twig" }} {# the result of the expression won't be escaped #} + * Escaping is applied before printing, after any other filter is applied: .. code-block:: twig diff --git a/vendor/twig/twig/doc/filters/batch.rst b/vendor/twig/twig/doc/filters/batch.rst index a1271735e496a2f1e9e396d74073fb5fb3a84523..cc50ec8e8570be22b6aefa45a11966d83a5b822b 100644 --- a/vendor/twig/twig/doc/filters/batch.rst +++ b/vendor/twig/twig/doc/filters/batch.rst @@ -49,4 +49,3 @@ Arguments * ``size``: The size of the batch; fractional numbers will be rounded up * ``fill``: Used to fill in missing items -* ``preserve_keys``: Whether to preserve keys or not diff --git a/vendor/twig/twig/doc/filters/filter.rst b/vendor/twig/twig/doc/filters/filter.rst index e9f968290f08be9c30621e779f106b40a57f0faf..310e63a73e499cdd63488f47d3660fa284e28ab6 100644 --- a/vendor/twig/twig/doc/filters/filter.rst +++ b/vendor/twig/twig/doc/filters/filter.rst @@ -1,5 +1,5 @@ ``filter`` -========== +========= .. versionadded:: 1.41 The ``filter`` filter was added in Twig 1.41 and 2.10. diff --git a/vendor/twig/twig/doc/filters/map.rst b/vendor/twig/twig/doc/filters/map.rst index e983e33b4846abc85c85955783871070971e435b..9b1f5d738ec972101e020f731230f0c2b298eae0 100644 --- a/vendor/twig/twig/doc/filters/map.rst +++ b/vendor/twig/twig/doc/filters/map.rst @@ -34,4 +34,5 @@ Note that the arrow function has access to the current context. Arguments --------- +* ``array``: The sequence or mapping * ``arrow``: The arrow function diff --git a/vendor/twig/twig/doc/filters/reduce.rst b/vendor/twig/twig/doc/filters/reduce.rst index af6164a95f72d3a0c1fd4a0d8f28233dbdf6e450..7d04d6c7b086026fe0397f9e3424f4f54e053a48 100644 --- a/vendor/twig/twig/doc/filters/reduce.rst +++ b/vendor/twig/twig/doc/filters/reduce.rst @@ -1,5 +1,5 @@ ``reduce`` -========== +========= .. versionadded:: 1.41 The ``reduce`` filter was added in Twig 1.41 and 2.10. @@ -28,5 +28,6 @@ Note that the arrow function has access to the current context. Arguments --------- +* ``array``: The sequence or mapping * ``arrow``: The arrow function * ``initial``: The initial value diff --git a/vendor/twig/twig/doc/functions/block.rst b/vendor/twig/twig/doc/functions/block.rst index 927fc321fff08740c181b2ca1b5ea9771bc0731f..c62614822a6aad0d3c2dcaa0b870fd411269a244 100644 --- a/vendor/twig/twig/doc/functions/block.rst +++ b/vendor/twig/twig/doc/functions/block.rst @@ -1,10 +1,10 @@ ``block`` ========= -.. versionadded:: 1.28 +.. versionadded: 1.28 Using ``block`` with the ``defined`` test was added in Twig 1.28. -.. versionadded:: 1.28 +.. versionadded: 1.28 Support for the template argument was added in Twig 1.28. When a template uses inheritance and if you want to print a block multiple diff --git a/vendor/twig/twig/doc/functions/constant.rst b/vendor/twig/twig/doc/functions/constant.rst index bb19858c223e04bbef44a1d4a7d453a970ff8101..f9d836cd1c6aec17dfc0357ca341af21a110205b 100644 --- a/vendor/twig/twig/doc/functions/constant.rst +++ b/vendor/twig/twig/doc/functions/constant.rst @@ -1,10 +1,10 @@ ``constant`` ============ -.. versionadded:: 1.12.1 +.. versionadded: 1.12.1 constant now accepts object instances as the second argument. -.. versionadded:: 1.28 +.. versionadded: 1.28 Using ``constant`` with the ``defined`` test was added in Twig 1.28. ``constant`` returns the constant value for a given string: diff --git a/vendor/twig/twig/doc/templates.rst b/vendor/twig/twig/doc/templates.rst index adf2b5395d5387d0d8fcf9d2e97382a862613b9c..168a8f7085a19da7b34886c2e9655c94215bc153 100644 --- a/vendor/twig/twig/doc/templates.rst +++ b/vendor/twig/twig/doc/templates.rst @@ -865,8 +865,11 @@ the modifiers on one side of a tag or on both sides: Extensions ---------- -Twig can be extended. If you want to create your own extensions, read the -:ref:`Creating an Extension <creating_extensions>` chapter. +Twig can be extended. If you are looking for new tags, filters, or functions, +have a look at the Twig official `extension repository`_. + +If you want to create your own, read the :ref:`Creating an +Extension<creating_extensions>` chapter. .. _`Twig bundle`: https://github.com/Anomareh/PHP-Twig.tmbundle .. _`Jinja syntax plugin`: http://jinja.pocoo.org/docs/integration/#vim @@ -874,6 +877,7 @@ Twig can be extended. If you want to create your own extensions, read the .. _`Twig syntax plugin`: http://plugins.netbeans.org/plugin/37069/php-twig .. _`Twig plugin`: https://github.com/pulse00/Twig-Eclipse-Plugin .. _`Twig language definition`: https://github.com/gabrielcorpse/gedit-twig-template-language +.. _`extension repository`: https://github.com/twigphp/Twig-extensions .. _`Twig syntax mode`: https://github.com/bobthecow/Twig-HTML.mode .. _`other Twig syntax mode`: https://github.com/muxx/Twig-HTML.mode .. _`Notepad++ Twig Highlighter`: https://github.com/Banane9/notepadplusplus-twig diff --git a/vendor/twig/twig/doc/tests/constant.rst b/vendor/twig/twig/doc/tests/constant.rst index 5dc87e3ecd121e92852997a24ec6c2850ccb6b01..98abf4d45dd7524a78841555febe345190748b26 100644 --- a/vendor/twig/twig/doc/tests/constant.rst +++ b/vendor/twig/twig/doc/tests/constant.rst @@ -1,7 +1,7 @@ ``constant`` ============ -.. versionadded:: 1.13.1 +.. versionadded: 1.13.1 constant now accepts object instances as the second argument. ``constant`` checks if a variable has the exact same value as a constant. You diff --git a/vendor/twig/twig/doc/tests/sameas.rst b/vendor/twig/twig/doc/tests/sameas.rst index b400b89c5530f8072bd969a51b47aed9e031d74c..4fc267dbcba6ad9266390f19e5cae177858839f2 100644 --- a/vendor/twig/twig/doc/tests/sameas.rst +++ b/vendor/twig/twig/doc/tests/sameas.rst @@ -5,7 +5,7 @@ The ``same as`` test was added in Twig 1.14.2 as an alias for ``sameas``. ``same as`` checks if a variable is the same as another variable. -This is equivalent to ``===`` in PHP: +This is the equivalent to ``===`` in PHP: .. code-block:: twig diff --git a/vendor/twig/twig/drupal_test.sh b/vendor/twig/twig/drupal_test.sh index d71aad8daf3bfac96026a34ee236e7704cd424f0..0374593c209106dc68a6b97b102462d2b9f451da 100755 --- a/vendor/twig/twig/drupal_test.sh +++ b/vendor/twig/twig/drupal_test.sh @@ -17,6 +17,7 @@ wget https://get.symfony.com/cli/installer -O - | bash export PATH="$HOME/.symfony/bin:$PATH" symfony server:start -d --no-tls +ENDPOINT=`symfony server:status -no-ansi | sed -E 's/^.+ http/http/'` curl -OLsS https://get.blackfire.io/blackfire-player.phar chmod +x blackfire-player.phar @@ -46,5 +47,5 @@ click link('Structure') expect status_code() == 200 EOF -./blackfire-player.phar run drupal-tests.bkf --endpoint=`symfony var:export SYMFONY_DEFAULT_ROUTE_URL` --variable name=$DRUPAL_Username --variable pass=$DRUPAL_Password +./blackfire-player.phar run drupal-tests.bkf --endpoint=$ENDPOINT --variable name=$DRUPAL_Username --variable pass=$DRUPAL_Password symfony server:stop diff --git a/vendor/twig/twig/ext/twig/php_twig.h b/vendor/twig/twig/ext/twig/php_twig.h index 344539abaac2281c62721840d7425fc1e40ddf77..79ac938df534b57217c957e3fffb4f2f30889793 100644 --- a/vendor/twig/twig/ext/twig/php_twig.h +++ b/vendor/twig/twig/ext/twig/php_twig.h @@ -15,7 +15,7 @@ #ifndef PHP_TWIG_H #define PHP_TWIG_H -#define PHP_TWIG_VERSION "1.42.5-DEV" +#define PHP_TWIG_VERSION "1.42.3" #include "php.h" diff --git a/vendor/twig/twig/phpunit.xml.dist b/vendor/twig/twig/phpunit.xml.dist new file mode 100644 index 0000000000000000000000000000000000000000..391f244a7f48ad377cd4ef9048eb85b94f878750 --- /dev/null +++ b/vendor/twig/twig/phpunit.xml.dist @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<phpunit backupGlobals="false" + backupStaticAttributes="false" + colors="true" + convertErrorsToExceptions="true" + convertNoticesToExceptions="true" + convertWarningsToExceptions="true" + processIsolation="false" + stopOnFailure="false" + bootstrap="vendor/autoload.php" +> + <testsuites> + <testsuite name="Twig Test Suite"> + <directory>./tests/</directory> + </testsuite> + </testsuites> + + <php> + <ini name="error_reporting" value="-1" /> + <ini name="xdebug.overload_var_dump" value="0" /> + </php> + + <listeners> + <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" /> + </listeners> + + <filter> + <whitelist> + <directory suffix=".php">./src/</directory> + </whitelist> + </filter> +</phpunit> diff --git a/vendor/twig/twig/src/Environment.php b/vendor/twig/twig/src/Environment.php index 97fa4c4db94318850d49c589d71463aeeba904fc..acd8233a7f9de1121dafdf9c396592b37f90e44f 100644 --- a/vendor/twig/twig/src/Environment.php +++ b/vendor/twig/twig/src/Environment.php @@ -41,11 +41,11 @@ */ class Environment { - const VERSION = '1.42.5'; - const VERSION_ID = 14205; + const VERSION = '1.42.3'; + const VERSION_ID = 14203; const MAJOR_VERSION = 1; const MINOR_VERSION = 42; - const RELEASE_VERSION = 5; + const RELEASE_VERSION = 3; const EXTRA_VERSION = ''; protected $charset; @@ -515,7 +515,7 @@ public function loadClass($cls, $name, $index = null) * * This method should not be used as a generic way to load templates. * - * @param string $template The template source + * @param string $template The template name * @param string $name An optional name of the template to be used in error messages * * @return TemplateWrapper A template instance representing the given template name diff --git a/vendor/twig/twig/src/ExpressionParser.php b/vendor/twig/twig/src/ExpressionParser.php index a3ff72530b85f5808b644ffdcf71aefe11399161..9066ade169587d4f787676b3c5a7c21db916461d 100644 --- a/vendor/twig/twig/src/ExpressionParser.php +++ b/vendor/twig/twig/src/ExpressionParser.php @@ -657,7 +657,7 @@ public function parseAssignmentExpression() $stream->expect(Token::NAME_TYPE, null, 'Only variables can be assigned to'); } $value = $token->getValue(); - if (\in_array(strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), ['true', 'false', 'none', 'null'])) { + if (\in_array(strtolower($value), ['true', 'false', 'none', 'null'])) { throw new SyntaxError(sprintf('You cannot assign a value to "%s".', $value), $token->getLine(), $stream->getSourceContext()); } $targets[] = new AssignNameExpression($value, $token->getLine()); diff --git a/vendor/twig/twig/src/Extension/CoreExtension.php b/vendor/twig/twig/src/Extension/CoreExtension.php index 5ff1e39ee6f92524fc4fc4571cade0fe132bc18d..5f3cc24a1954b15bfeec95f8b585117a2ff39cc2 100644 --- a/vendor/twig/twig/src/Extension/CoreExtension.php +++ b/vendor/twig/twig/src/Extension/CoreExtension.php @@ -459,7 +459,7 @@ function twig_date_modify_filter(Environment $env, $date, $modifier) * @param \DateTime|\DateTimeInterface|string|null $date A date * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged * - * @return \DateTimeInterface + * @return \DateTime */ function twig_date_converter(Environment $env, $date = null, $timezone = null) { diff --git a/vendor/twig/twig/src/Lexer.php b/vendor/twig/twig/src/Lexer.php index 697a6cfa1d1b5c7f2b98d456c49e34dd31c914eb..8cae3597f12494f85cb71daba00a3f36d50dae42 100644 --- a/vendor/twig/twig/src/Lexer.php +++ b/vendor/twig/twig/src/Lexer.php @@ -47,7 +47,7 @@ class Lexer implements \Twig_LexerInterface const STATE_INTERPOLATION = 4; const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A'; - const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?([Ee][\+\-][0-9]+)?/A'; + const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?/A'; const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As'; const REGEX_DQ_STRING_DELIM = '/"/A'; const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As'; diff --git a/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php b/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php index 917d31a3b27a74082294684f5d44460229582692..49326d467dbefe9f40fcbb44396a11965f2fc3dc 100644 --- a/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php +++ b/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php @@ -22,15 +22,11 @@ class NullCoalesceExpression extends ConditionalExpression { public function __construct(\Twig_NodeInterface $left, \Twig_NodeInterface $right, $lineno) { - $test = new DefinedTest(clone $left, 'defined', new Node(), $left->getTemplateLine()); - // for "block()", we don't need the null test as the return value is always a string - if (!$left instanceof BlockReferenceExpression) { - $test = new AndBinary( - $test, - new NotUnary(new NullTest($left, 'null', new Node(), $left->getTemplateLine()), $left->getTemplateLine()), - $left->getTemplateLine() - ); - } + $test = new AndBinary( + new DefinedTest(clone $left, 'defined', new Node(), $left->getTemplateLine()), + new NotUnary(new NullTest($left, 'null', new Node(), $left->getTemplateLine()), $left->getTemplateLine()), + $left->getTemplateLine() + ); parent::__construct($test, $left, $right, $lineno); } diff --git a/vendor/twig/twig/src/Parser.php b/vendor/twig/twig/src/Parser.php index 9fb6a83a4e683ba7f49d683677b31d1ea6068f87..0ea102cc811255d0cde675376e6ba3de84d881fd 100644 --- a/vendor/twig/twig/src/Parser.php +++ b/vendor/twig/twig/src/Parser.php @@ -299,7 +299,7 @@ public function isReservedMacroName($name) $this->reservedMacroNames = []; $r = new \ReflectionClass($this->env->getBaseTemplateClass()); foreach ($r->getMethods() as $method) { - $methodName = strtr($method->getName(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + $methodName = strtolower($method->getName()); if ('get' === substr($methodName, 0, 3) && isset($methodName[3])) { $this->reservedMacroNames[] = substr($methodName, 3); @@ -307,7 +307,7 @@ public function isReservedMacroName($name) } } - return \in_array(strtr($name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), $this->reservedMacroNames); + return \in_array(strtolower($name), $this->reservedMacroNames); } public function addTrait($trait) diff --git a/vendor/twig/twig/src/Sandbox/SecurityPolicy.php b/vendor/twig/twig/src/Sandbox/SecurityPolicy.php index 603843591af624a59472370a511895fc880dc880..31b6c34833230b7c8a54d0ac16e6b642ad8939aa 100644 --- a/vendor/twig/twig/src/Sandbox/SecurityPolicy.php +++ b/vendor/twig/twig/src/Sandbox/SecurityPolicy.php @@ -51,7 +51,7 @@ public function setAllowedMethods(array $methods) { $this->allowedMethods = []; foreach ($methods as $class => $m) { - $this->allowedMethods[$class] = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, \is_array($m) ? $m : [$m]); + $this->allowedMethods[$class] = array_map('strtolower', \is_array($m) ? $m : [$m]); } } @@ -93,7 +93,7 @@ public function checkMethodAllowed($obj, $method) } $allowed = false; - $method = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + $method = strtolower($method); foreach ($this->allowedMethods as $class => $methods) { if ($obj instanceof $class) { $allowed = \in_array($method, $methods); diff --git a/vendor/twig/twig/src/Template.php b/vendor/twig/twig/src/Template.php index 704125e5387aa6718a201270b16b6288059ba360..3f7447c126cf5bab09e62ca7f77006d916a17c3e 100644 --- a/vendor/twig/twig/src/Template.php +++ b/vendor/twig/twig/src/Template.php @@ -628,7 +628,7 @@ protected function getAttribute($object, $item, array $arguments = [], $type = s foreach ($ref->getMethods(\ReflectionMethod::IS_PUBLIC) as $refMethod) { // Accessing the environment from templates is forbidden to prevent untrusted changes to the environment - if ('getenvironment' !== strtr($refMethod->name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')) { + if ('getenvironment' !== strtolower($refMethod->name)) { $methods[] = $refMethod->name; } } @@ -642,7 +642,7 @@ protected function getAttribute($object, $item, array $arguments = [], $type = s foreach ($methods as $method) { $cache[$method] = $method; - $cache[$lcName = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')] = $method; + $cache[$lcName = strtolower($method)] = $method; if ('g' === $lcName[0] && 0 === strpos($lcName, 'get')) { $name = substr($method, 3); @@ -670,7 +670,7 @@ protected function getAttribute($object, $item, array $arguments = [], $type = s $call = false; if (isset(self::$cache[$class][$item])) { $method = self::$cache[$class][$item]; - } elseif (isset(self::$cache[$class][$lcItem = strtr($item, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')])) { + } elseif (isset(self::$cache[$class][$lcItem = strtolower($item)])) { $method = self::$cache[$class][$lcItem]; } elseif (isset(self::$cache[$class]['__call'])) { $method = $item; diff --git a/vendor/twig/twig/tests/AutoloaderTest.php b/vendor/twig/twig/tests/AutoloaderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9bf538aee239f2711a1ed6767864ecad239fb5b5 --- /dev/null +++ b/vendor/twig/twig/tests/AutoloaderTest.php @@ -0,0 +1,26 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +class AutoloaderTest extends \PHPUnit\Framework\TestCase +{ + /** + * @group legacy + */ + public function testAutoload() + { + $this->assertFalse(class_exists('FooBarFoo'), '->autoload() does not try to load classes that does not begin with Twig'); + + $autoloader = new \Twig_Autoloader(); + $this->assertNull($autoloader->autoload('Foo'), '->autoload() returns false if it is not able to load a class'); + } +} diff --git a/vendor/twig/twig/tests/Cache/FilesystemTest.php b/vendor/twig/twig/tests/Cache/FilesystemTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c810caed988206b707555cff634a0ef265d9559a --- /dev/null +++ b/vendor/twig/twig/tests/Cache/FilesystemTest.php @@ -0,0 +1,193 @@ +<?php + +namespace Twig\Tests\Cache; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Cache\FilesystemCache; +use Twig\Tests\FilesystemHelper; + +class FilesystemTest extends \PHPUnit\Framework\TestCase +{ + private $classname; + private $directory; + private $cache; + + protected function setUp() + { + $nonce = hash('sha256', uniqid(mt_rand(), true)); + $this->classname = '__Twig_Tests_Cache_FilesystemTest_Template_'.$nonce; + $this->directory = sys_get_temp_dir().'/twig-test'; + $this->cache = new FilesystemCache($this->directory); + } + + protected function tearDown() + { + if (file_exists($this->directory)) { + FilesystemHelper::removeDir($this->directory); + } + } + + public function testLoad() + { + $key = $this->directory.'/cache/cachefile.php'; + + $dir = \dirname($key); + @mkdir($dir, 0777, true); + $this->assertDirectoryExists($dir); + $this->assertFalse(class_exists($this->classname, false)); + + $content = $this->generateSource(); + file_put_contents($key, $content); + + $this->cache->load($key); + + $this->assertTrue(class_exists($this->classname, false)); + } + + public function testLoadMissing() + { + $key = $this->directory.'/cache/cachefile.php'; + + $this->assertFalse(class_exists($this->classname, false)); + + $this->cache->load($key); + + $this->assertFalse(class_exists($this->classname, false)); + } + + public function testWrite() + { + $key = $this->directory.'/cache/cachefile.php'; + $content = $this->generateSource(); + + $this->assertFileNotExists($key); + $this->assertFileNotExists($this->directory); + + $this->cache->write($key, $content); + + $this->assertFileExists($this->directory); + $this->assertFileExists($key); + $this->assertSame(file_get_contents($key), $content); + } + + public function testWriteFailMkdir() + { + $this->expectException('\RuntimeException'); + $this->expectExceptionMessage('Unable to create the cache directory'); + + if (\defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->markTestSkipped('Read-only directories not possible on Windows.'); + } + + $key = $this->directory.'/cache/cachefile.php'; + $content = $this->generateSource(); + + $this->assertFileNotExists($key); + + // Create read-only root directory. + @mkdir($this->directory, 0555, true); + $this->assertDirectoryExists($this->directory); + + $this->cache->write($key, $content); + } + + public function testWriteFailDirWritable() + { + $this->expectException('\RuntimeException'); + $this->expectExceptionMessage('Unable to write in the cache directory'); + + if (\defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->markTestSkipped('Read-only directories not possible on Windows.'); + } + + $key = $this->directory.'/cache/cachefile.php'; + $content = $this->generateSource(); + + $this->assertFileNotExists($key); + + // Create root directory. + @mkdir($this->directory, 0777, true); + // Create read-only subdirectory. + @mkdir($this->directory.'/cache', 0555); + $this->assertDirectoryExists($this->directory.'/cache'); + + $this->cache->write($key, $content); + } + + public function testWriteFailWriteFile() + { + $this->expectException('\RuntimeException'); + $this->expectExceptionMessage('Failed to write cache file'); + + $key = $this->directory.'/cache/cachefile.php'; + $content = $this->generateSource(); + + $this->assertFileNotExists($key); + + // Create a directory in the place of the cache file. + @mkdir($key, 0777, true); + $this->assertDirectoryExists($key); + + $this->cache->write($key, $content); + } + + public function testGetTimestamp() + { + $key = $this->directory.'/cache/cachefile.php'; + + $dir = \dirname($key); + @mkdir($dir, 0777, true); + $this->assertDirectoryExists($dir); + + // Create the file with a specific modification time. + touch($key, 1234567890); + + $this->assertSame(1234567890, $this->cache->getTimestamp($key)); + } + + public function testGetTimestampMissingFile() + { + $key = $this->directory.'/cache/cachefile.php'; + $this->assertSame(0, $this->cache->getTimestamp($key)); + } + + /** + * Test file cache is tolerant towards trailing (back)slashes on the configured cache directory. + * + * @dataProvider provideDirectories + */ + public function testGenerateKey($expected, $input) + { + $cache = new FilesystemCache($input); + $this->assertRegExp($expected, $cache->generateKey('_test_', \get_class($this))); + } + + public function provideDirectories() + { + $pattern = '#a/b/[a-zA-Z0-9]+/[a-zA-Z0-9]+.php$#'; + + return [ + [$pattern, 'a/b'], + [$pattern, 'a/b/'], + [$pattern, 'a/b\\'], + [$pattern, 'a/b\\/'], + [$pattern, 'a/b\\//'], + ['#/'.substr($pattern, 1), '/a/b'], + ]; + } + + private function generateSource() + { + return strtr('<?php class {{classname}} {}', [ + '{{classname}}' => $this->classname, + ]); + } +} diff --git a/vendor/twig/twig/tests/CompilerTest.php b/vendor/twig/twig/tests/CompilerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..cc462c25199c76a659255cf93378e37bf1f38dc4 --- /dev/null +++ b/vendor/twig/twig/tests/CompilerTest.php @@ -0,0 +1,38 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Compiler; +use Twig\Environment; + +class CompilerTest extends \PHPUnit\Framework\TestCase +{ + public function testReprNumericValueWithLocale() + { + $compiler = new Compiler(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + + $locale = setlocale(LC_NUMERIC, 0); + if (false === $locale) { + $this->markTestSkipped('Your platform does not support locales.'); + } + + $required_locales = ['fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252']; + if (false === setlocale(LC_NUMERIC, $required_locales)) { + $this->markTestSkipped('Could not set any of required locales: '.implode(', ', $required_locales)); + } + + $this->assertEquals('1.2', $compiler->repr(1.2)->getSource()); + $this->assertStringContainsString('fr', strtolower(setlocale(LC_NUMERIC, 0))); + + setlocale(LC_NUMERIC, $locale); + } +} diff --git a/vendor/twig/twig/tests/ContainerRuntimeLoaderTest.php b/vendor/twig/twig/tests/ContainerRuntimeLoaderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c85648342f39ca4a9627a2d28db34ea3cf99035f --- /dev/null +++ b/vendor/twig/twig/tests/ContainerRuntimeLoaderTest.php @@ -0,0 +1,44 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\RuntimeLoader\ContainerRuntimeLoader; + +class ContainerRuntimeLoaderTest extends \PHPUnit\Framework\TestCase +{ + /** + * @requires PHP 5.3 + */ + public function testLoad() + { + $container = $this->createMock('Psr\Container\ContainerInterface'); + $container->expects($this->once())->method('has')->with('stdClass')->willReturn(true); + $container->expects($this->once())->method('get')->with('stdClass')->willReturn(new \stdClass()); + + $loader = new ContainerRuntimeLoader($container); + + $this->assertInstanceOf('stdClass', $loader->load('stdClass')); + } + + /** + * @requires PHP 5.3 + */ + public function testLoadUnknownRuntimeReturnsNull() + { + $container = $this->createMock('Psr\Container\ContainerInterface'); + $container->expects($this->once())->method('has')->with('Foo'); + $container->expects($this->never())->method('get'); + + $loader = new ContainerRuntimeLoader($container); + $this->assertNull($loader->load('Foo')); + } +} diff --git a/vendor/twig/twig/tests/CustomExtensionTest.php b/vendor/twig/twig/tests/CustomExtensionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b45e1434f25157d3c5dc1526bd7c3a89bf24cd67 --- /dev/null +++ b/vendor/twig/twig/tests/CustomExtensionTest.php @@ -0,0 +1,94 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Extension\ExtensionInterface; + +class CustomExtensionTest extends \PHPUnit\Framework\TestCase +{ + /** + * @requires PHP 5.3 + * @dataProvider provideInvalidExtensions + */ + public function testGetInvalidOperators(ExtensionInterface $extension, $expectedExceptionMessage) + { + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($expectedExceptionMessage); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $env->addExtension($extension); + $env->getUnaryOperators(); + } + + public function provideInvalidExtensions() + { + return [ + [new InvalidOperatorExtension(new \stdClass()), '"Twig\Tests\InvalidOperatorExtension::getOperators()" must return an array with operators, got "stdClass".'], + [new InvalidOperatorExtension([1, 2, 3]), '"Twig\Tests\InvalidOperatorExtension::getOperators()" must return an array of 2 elements, got 3.'], + ]; + } +} + +class InvalidOperatorExtension implements ExtensionInterface +{ + private $operators; + + public function __construct($operators) + { + $this->operators = $operators; + } + + public function initRuntime(Environment $environment) + { + } + + public function getTokenParsers() + { + return []; + } + + public function getNodeVisitors() + { + return []; + } + + public function getFilters() + { + return []; + } + + public function getTests() + { + return []; + } + + public function getFunctions() + { + return []; + } + + public function getGlobals() + { + return []; + } + + public function getOperators() + { + return $this->operators; + } + + public function getName() + { + return __CLASS__; + } +} diff --git a/vendor/twig/twig/tests/EnvironmentTest.php b/vendor/twig/twig/tests/EnvironmentTest.php new file mode 100644 index 0000000000000000000000000000000000000000..54a894506cba8735c5c34b0fe6ee6a898a88ca01 --- /dev/null +++ b/vendor/twig/twig/tests/EnvironmentTest.php @@ -0,0 +1,678 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Cache\FilesystemCache; +use Twig\Environment; +use Twig\Extension\AbstractExtension; +use Twig\Extension\GlobalsInterface; +use Twig\Extension\InitRuntimeInterface; +use Twig\Loader\ArrayLoader; +use Twig\Loader\LoaderInterface; +use Twig\Loader\SourceContextLoaderInterface; +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\Source; +use Twig\Token; +use Twig\TokenParser\AbstractTokenParser; +use Twig\TwigFilter; +use Twig\TwigFunction; +use Twig\TwigTest; + +class EnvironmentTest extends \PHPUnit\Framework\TestCase +{ + private $deprecations = []; + + /** + * @group legacy + */ + public function testLegacyTokenizeSignature() + { + $env = new Environment(); + $stream = $env->tokenize('{{ foo }}', 'foo'); + $this->assertEquals('{{ foo }}', $stream->getSource()); + $this->assertEquals('foo', $stream->getFilename()); + } + + /** + * @group legacy + */ + public function testLegacyCompileSourceSignature() + { + $loader = new ArrayLoader(['foo' => '{{ foo }}']); + $env = new Environment($loader); + $this->assertStringContainsString('getTemplateName', $env->compileSource('{{ foo }}', 'foo')); + } + + /** + * @group legacy + */ + public function testRenderNoLoader() + { + $this->expectException('\LogicException'); + $this->expectExceptionMessage('You must set a loader first.'); + + $env = new Environment(); + $env->render('test'); + } + + public function testAutoescapeOption() + { + $loader = new ArrayLoader([ + 'html' => '{{ foo }} {{ foo }}', + 'js' => '{{ bar }} {{ bar }}', + ]); + + $twig = new Environment($loader, [ + 'debug' => true, + 'cache' => false, + 'autoescape' => [$this, 'escapingStrategyCallback'], + ]); + + $this->assertEquals('foo<br/ > foo<br/ >', $twig->render('html', ['foo' => 'foo<br/ >'])); + $this->assertEquals('foo\u003Cbr\/\u0020\u003E foo\u003Cbr\/\u0020\u003E', $twig->render('js', ['bar' => 'foo<br/ >'])); + } + + public function escapingStrategyCallback($name) + { + return $name; + } + + public function testGlobals() + { + // to be removed in 2.0 + $loader = $this->createMock('\Twig\Tests\EnvironmentTestLoaderInterface'); + //$loader = $this->createMock(['\Twig\Loader\LoaderInterface', '\Twig\Loader\SourceContextLoaderInterface']); + $loader->expects($this->any())->method('getSourceContext')->willReturn(new Source('', '')); + + // globals can be added after calling getGlobals + + $twig = new Environment($loader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->addGlobal('foo', 'bar'); + $globals = $twig->getGlobals(); + $this->assertEquals('bar', $globals['foo']); + + // globals can be modified after a template has been loaded + $twig = new Environment($loader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->load('index'); + $twig->addGlobal('foo', 'bar'); + $globals = $twig->getGlobals(); + $this->assertEquals('bar', $globals['foo']); + + // globals can be modified after extensions init + $twig = new Environment($loader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->getFunctions(); + $twig->addGlobal('foo', 'bar'); + $globals = $twig->getGlobals(); + $this->assertEquals('bar', $globals['foo']); + + // globals can be modified after extensions and a template has been loaded + $arrayLoader = new ArrayLoader(['index' => '{{foo}}']); + $twig = new Environment($arrayLoader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->getFunctions(); + $twig->load('index'); + $twig->addGlobal('foo', 'bar'); + $globals = $twig->getGlobals(); + $this->assertEquals('bar', $globals['foo']); + + $twig = new Environment($arrayLoader); + $twig->getGlobals(); + $twig->addGlobal('foo', 'bar'); + $template = $twig->load('index'); + $this->assertEquals('bar', $template->render([])); + + /* to be uncomment in Twig 2.0 + // globals cannot be added after a template has been loaded + $twig = new Environment($loader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->load('index'); + try { + $twig->addGlobal('bar', 'bar'); + $this->fail(); + } catch (\LogicException $e) { + $this->assertFalse(array_key_exists('bar', $twig->getGlobals())); + } + + // globals cannot be added after extensions init + $twig = new Environment($loader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->getFunctions(); + try { + $twig->addGlobal('bar', 'bar'); + $this->fail(); + } catch (\LogicException $e) { + $this->assertFalse(array_key_exists('bar', $twig->getGlobals())); + } + + // globals cannot be added after extensions and a template has been loaded + $twig = new Environment($loader); + $twig->addGlobal('foo', 'foo'); + $twig->getGlobals(); + $twig->getFunctions(); + $twig->load('index'); + try { + $twig->addGlobal('bar', 'bar'); + $this->fail(); + } catch (\LogicException $e) { + $this->assertFalse(array_key_exists('bar', $twig->getGlobals())); + } + + // test adding globals after a template has been loaded without call to getGlobals + $twig = new Environment($loader); + $twig->load('index'); + try { + $twig->addGlobal('bar', 'bar'); + $this->fail(); + } catch (\LogicException $e) { + $this->assertFalse(array_key_exists('bar', $twig->getGlobals())); + } + */ + } + + public function testExtensionsAreNotInitializedWhenRenderingACompiledTemplate() + { + $cache = new FilesystemCache($dir = sys_get_temp_dir().'/twig'); + $options = ['cache' => $cache, 'auto_reload' => false, 'debug' => false]; + + // force compilation + $twig = new Environment($loader = new ArrayLoader(['index' => '{{ foo }}']), $options); + + $key = $cache->generateKey('index', $twig->getTemplateClass('index')); + $cache->write($key, $twig->compileSource(new Source('{{ foo }}', 'index'))); + + // check that extensions won't be initialized when rendering a template that is already in the cache + $twig = $this + ->getMockBuilder('\Twig\Environment') + ->setConstructorArgs([$loader, $options]) + ->setMethods(['initExtensions']) + ->getMock() + ; + + $twig->expects($this->never())->method('initExtensions'); + + // render template + $output = $twig->render('index', ['foo' => 'bar']); + $this->assertEquals('bar', $output); + + FilesystemHelper::removeDir($dir); + } + + public function testAutoReloadCacheMiss() + { + $templateName = __FUNCTION__; + $templateContent = __FUNCTION__; + + $cache = $this->createMock('\Twig\Cache\CacheInterface'); + $loader = $this->getMockLoader($templateName, $templateContent); + $twig = new Environment($loader, ['cache' => $cache, 'auto_reload' => true, 'debug' => false]); + + // Cache miss: getTimestamp returns 0 and as a result the load() is + // skipped. + $cache->expects($this->once()) + ->method('generateKey') + ->willReturn('key'); + $cache->expects($this->once()) + ->method('getTimestamp') + ->willReturn(0); + $loader->expects($this->never()) + ->method('isFresh'); + $cache->expects($this->once()) + ->method('write'); + $cache->expects($this->once()) + ->method('load'); + + $twig->load($templateName); + } + + public function testAutoReloadCacheHit() + { + $templateName = __FUNCTION__; + $templateContent = __FUNCTION__; + + $cache = $this->createMock('\Twig\Cache\CacheInterface'); + $loader = $this->getMockLoader($templateName, $templateContent); + $twig = new Environment($loader, ['cache' => $cache, 'auto_reload' => true, 'debug' => false]); + + $now = time(); + + // Cache hit: getTimestamp returns something > extension timestamps and + // the loader returns true for isFresh(). + $cache->expects($this->once()) + ->method('generateKey') + ->willReturn('key'); + $cache->expects($this->once()) + ->method('getTimestamp') + ->willReturn($now); + $loader->expects($this->once()) + ->method('isFresh') + ->willReturn(true); + $cache->expects($this->atLeastOnce()) + ->method('load'); + + $twig->load($templateName); + } + + public function testAutoReloadOutdatedCacheHit() + { + $templateName = __FUNCTION__; + $templateContent = __FUNCTION__; + + $cache = $this->createMock('\Twig\Cache\CacheInterface'); + $loader = $this->getMockLoader($templateName, $templateContent); + $twig = new Environment($loader, ['cache' => $cache, 'auto_reload' => true, 'debug' => false]); + + $now = time(); + + $cache->expects($this->once()) + ->method('generateKey') + ->willReturn('key'); + $cache->expects($this->once()) + ->method('getTimestamp') + ->willReturn($now); + $loader->expects($this->once()) + ->method('isFresh') + ->willReturn(false); + $cache->expects($this->once()) + ->method('write'); + $cache->expects($this->once()) + ->method('load'); + + $twig->load($templateName); + } + + /** + * @group legacy + */ + public function testHasGetExtensionWithDynamicName() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + + $ext1 = new EnvironmentTest_Extension_DynamicWithDeprecatedName('ext1'); + $ext2 = new EnvironmentTest_Extension_DynamicWithDeprecatedName('ext2'); + $twig->addExtension($ext1); + $twig->addExtension($ext2); + + $this->assertTrue($twig->hasExtension('ext1')); + $this->assertTrue($twig->hasExtension('ext2')); + + $this->assertTrue($twig->hasExtension('Twig\Tests\EnvironmentTest_Extension_DynamicWithDeprecatedName')); + + $this->assertSame($ext1, $twig->getExtension('ext1')); + $this->assertSame($ext2, $twig->getExtension('ext2')); + } + + public function testHasGetExtensionByClassName() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension($ext = new EnvironmentTest_Extension()); + $this->assertTrue($twig->hasExtension('Twig\Tests\EnvironmentTest_Extension')); + $this->assertTrue($twig->hasExtension('\Twig\Tests\EnvironmentTest_Extension')); + + $this->assertSame($ext, $twig->getExtension('Twig\Tests\EnvironmentTest_Extension')); + $this->assertSame($ext, $twig->getExtension('\Twig\Tests\EnvironmentTest_Extension')); + + $this->assertTrue($twig->hasExtension('Twig\Tests\EnvironmentTest\Extension')); + $this->assertSame($ext, $twig->getExtension('Twig\Tests\EnvironmentTest\Extension')); + } + + public function testAddExtension() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension(new EnvironmentTest_Extension()); + + $this->assertArrayHasKey('test', $twig->getTags()); + $this->assertArrayHasKey('foo_filter', $twig->getFilters()); + $this->assertArrayHasKey('foo_function', $twig->getFunctions()); + $this->assertArrayHasKey('foo_test', $twig->getTests()); + $this->assertArrayHasKey('foo_unary', $twig->getUnaryOperators()); + $this->assertArrayHasKey('foo_binary', $twig->getBinaryOperators()); + $this->assertArrayHasKey('foo_global', $twig->getGlobals()); + $visitors = $twig->getNodeVisitors(); + $found = false; + foreach ($visitors as $visitor) { + if ($visitor instanceof EnvironmentTest_NodeVisitor) { + $found = true; + } + } + $this->assertTrue($found); + } + + /** + * @requires PHP 5.3 + */ + public function testAddExtensionWithDeprecatedGetGlobals() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension(new EnvironmentTest_Extension_WithGlobals()); + + $this->deprecations = []; + set_error_handler([$this, 'handleError']); + + $this->assertArrayHasKey('foo_global', $twig->getGlobals()); + + $this->assertCount(1, $this->deprecations); + $this->assertStringContainsString('Defining the getGlobals() method in the "Twig\Tests\EnvironmentTest_Extension_WithGlobals" extension ', $this->deprecations[0]); + + restore_error_handler(); + } + + /** + * @group legacy + */ + public function testRemoveExtension() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension(new EnvironmentTest_Extension_WithDeprecatedName()); + $twig->removeExtension('environment_test'); + + $this->assertArrayNotHasKey('test', $twig->getTags()); + $this->assertArrayNotHasKey('foo_filter', $twig->getFilters()); + $this->assertArrayNotHasKey('foo_function', $twig->getFunctions()); + $this->assertArrayNotHasKey('foo_test', $twig->getTests()); + $this->assertArrayNotHasKey('foo_unary', $twig->getUnaryOperators()); + $this->assertArrayNotHasKey('foo_binary', $twig->getBinaryOperators()); + $this->assertArrayNotHasKey('foo_global', $twig->getGlobals()); + $this->assertCount(2, $twig->getNodeVisitors()); + } + + public function testAddMockExtension() + { + // should be replaced by the following in 2.0 (this current code is just to avoid a dep notice) + // $extension = $this->createMock('\Twig\Extension\AbstractExtension'); + $extension = eval(<<<EOF +use Twig\Extension\AbstractExtension; + +class EnvironmentTest_ExtensionInEval extends AbstractExtension +{ +} +EOF + ); + $extension = new \EnvironmentTest_ExtensionInEval(); + + $loader = new ArrayLoader(['page' => 'hey']); + + $twig = new Environment($loader); + $twig->addExtension($extension); + + $this->assertInstanceOf('\Twig\Extension\ExtensionInterface', $twig->getExtension(\get_class($extension))); + $this->assertTrue($twig->isTemplateFresh('page', time())); + } + + public function testInitRuntimeWithAnExtensionUsingInitRuntimeNoDeprecation() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension(new EnvironmentTest_ExtensionWithoutDeprecationInitRuntime()); + $twig->initRuntime(); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any deprecations + $this->addToAssertionCount(1); + } + + /** + * @requires PHP 5.3 + */ + public function testInitRuntimeWithAnExtensionUsingInitRuntimeDeprecation() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension(new EnvironmentTest_ExtensionWithDeprecationInitRuntime()); + + $this->deprecations = []; + set_error_handler([$this, 'handleError']); + + $twig->initRuntime(); + + $this->assertCount(1, $this->deprecations); + $this->assertStringContainsString('Defining the initRuntime() method in the "Twig\Tests\EnvironmentTest_ExtensionWithDeprecationInitRuntime" extension is deprecated since version 1.23.', $this->deprecations[0]); + + restore_error_handler(); + } + + public function handleError($type, $msg) + { + if (E_USER_DEPRECATED === $type) { + $this->deprecations[] = $msg; + } + } + + /** + * @requires PHP 5.3 + */ + public function testOverrideExtension() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addExtension(new EnvironmentTest_ExtensionWithDeprecationInitRuntime()); + + $this->deprecations = []; + set_error_handler([$this, 'handleError']); + + $twig->addExtension(new EnvironmentTest_Extension_WithDeprecatedName()); + $twig->addExtension(new EnvironmentTest_Extension_WithDeprecatedName()); + + $this->assertCount(1, $this->deprecations); + $this->assertStringContainsString('The possibility to register the same extension twice', $this->deprecations[0]); + + restore_error_handler(); + } + + public function testAddRuntimeLoader() + { + $runtimeLoader = $this->createMock('\Twig\RuntimeLoader\RuntimeLoaderInterface'); + $runtimeLoader->expects($this->any())->method('load')->willReturn(new EnvironmentTest_Runtime()); + + $loader = new ArrayLoader([ + 'func_array' => '{{ from_runtime_array("foo") }}', + 'func_array_default' => '{{ from_runtime_array() }}', + 'func_array_named_args' => '{{ from_runtime_array(name="foo") }}', + 'func_string' => '{{ from_runtime_string("foo") }}', + 'func_string_default' => '{{ from_runtime_string() }}', + 'func_string_named_args' => '{{ from_runtime_string(name="foo") }}', + ]); + + $twig = new Environment($loader); + $twig->addExtension(new EnvironmentTest_ExtensionWithoutRuntime()); + $twig->addRuntimeLoader($runtimeLoader); + + $this->assertEquals('foo', $twig->render('func_array')); + $this->assertEquals('bar', $twig->render('func_array_default')); + $this->assertEquals('foo', $twig->render('func_array_named_args')); + $this->assertEquals('foo', $twig->render('func_string')); + $this->assertEquals('bar', $twig->render('func_string_default')); + $this->assertEquals('foo', $twig->render('func_string_named_args')); + } + + protected function getMockLoader($templateName, $templateContent) + { + // to be removed in 2.0 + $loader = $this->createMock('Twig\Tests\EnvironmentTestLoaderInterface'); + //$loader = $this->createMock(['\Twig\Loader\LoaderInterface', '\Twig\Loader\SourceContextLoaderInterface']); + $loader->expects($this->any()) + ->method('getSourceContext') + ->with($templateName) + ->willReturn(new Source($templateContent, $templateName)); + $loader->expects($this->any()) + ->method('getCacheKey') + ->with($templateName) + ->willReturn($templateName); + + return $loader; + } +} + +class EnvironmentTest_Extension_WithGlobals extends AbstractExtension +{ + public function getGlobals() + { + return [ + 'foo_global' => 'foo_global', + ]; + } +} + +class EnvironmentTest_Extension extends AbstractExtension implements GlobalsInterface +{ + public function getTokenParsers() + { + return [ + new EnvironmentTest_TokenParser(), + ]; + } + + public function getNodeVisitors() + { + return [ + new EnvironmentTest_NodeVisitor(), + ]; + } + + public function getFilters() + { + return [ + new TwigFilter('foo_filter', 'foo_filter'), + ]; + } + + public function getTests() + { + return [ + new TwigTest('foo_test', 'foo_test'), + ]; + } + + public function getFunctions() + { + return [ + new TwigFunction('foo_function', 'foo_function'), + ]; + } + + public function getOperators() + { + return [ + ['foo_unary' => []], + ['foo_binary' => []], + ]; + } + + public function getGlobals() + { + return [ + 'foo_global' => 'foo_global', + ]; + } +} +class_alias('\Twig\Tests\EnvironmentTest_Extension', 'Twig\Tests\EnvironmentTest\Extension', false); + +class EnvironmentTest_Extension_WithDeprecatedName extends AbstractExtension +{ + public function getName() + { + return 'environment_test'; + } +} + +class EnvironmentTest_Extension_DynamicWithDeprecatedName extends AbstractExtension +{ + private $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } +} + +class EnvironmentTest_TokenParser extends AbstractTokenParser +{ + public function parse(Token $token) + { + } + + public function getTag() + { + return 'test'; + } +} + +class EnvironmentTest_NodeVisitor implements NodeVisitorInterface +{ + public function enterNode(\Twig_NodeInterface $node, Environment $env) + { + return $node; + } + + public function leaveNode(\Twig_NodeInterface $node, Environment $env) + { + return $node; + } + + public function getPriority() + { + return 0; + } +} + +class EnvironmentTest_ExtensionWithDeprecationInitRuntime extends AbstractExtension +{ + public function initRuntime(Environment $env) + { + } +} + +class EnvironmentTest_ExtensionWithoutDeprecationInitRuntime extends AbstractExtension implements InitRuntimeInterface +{ + public function initRuntime(Environment $env) + { + } +} + +class EnvironmentTest_ExtensionWithoutRuntime extends AbstractExtension +{ + public function getFunctions() + { + return [ + new TwigFunction('from_runtime_array', ['Twig\Tests\EnvironmentTest_Runtime', 'fromRuntime']), + new TwigFunction('from_runtime_string', 'Twig\Tests\EnvironmentTest_Runtime::fromRuntime'), + ]; + } + + public function getName() + { + return 'from_runtime'; + } +} + +class EnvironmentTest_Runtime +{ + public function fromRuntime($name = 'bar') + { + return $name; + } +} + +// to be removed in 2.0 +interface EnvironmentTestLoaderInterface extends LoaderInterface, SourceContextLoaderInterface +{ +} diff --git a/vendor/twig/twig/tests/ErrorTest.php b/vendor/twig/twig/tests/ErrorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a84da2eea65f5b68c67354bbf02e4aa4cdeea565 --- /dev/null +++ b/vendor/twig/twig/tests/ErrorTest.php @@ -0,0 +1,234 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Error\Error; +use Twig\Error\RuntimeError; +use Twig\Loader\ArrayLoader; +use Twig\Loader\FilesystemLoader; +use Twig\Source; + +class ErrorTest extends \PHPUnit\Framework\TestCase +{ + public function testErrorWithObjectFilename() + { + $error = new Error('foo'); + $error->setSourceContext(new Source('', new \SplFileInfo(__FILE__))); + + $this->assertStringContainsString('tests'.\DIRECTORY_SEPARATOR.'ErrorTest.php', $error->getMessage()); + } + + public function testErrorWithArrayFilename() + { + $error = new Error('foo'); + $error->setSourceContext(new Source('', ['foo' => 'bar'])); + + $this->assertEquals('foo in {"foo":"bar"}', $error->getMessage()); + } + + public function testTwigExceptionGuessWithMissingVarAndArrayLoader() + { + $loader = new ArrayLoader([ + 'base.html' => '{% block content %}{% endblock %}', + 'index.html' => <<<EOHTML +{% extends 'base.html' %} +{% block content %} + {{ foo.bar }} +{% endblock %} +{% block foo %} + {{ foo.bar }} +{% endblock %} +EOHTML + ]); + $twig = new Environment($loader, ['strict_variables' => true, 'debug' => true, 'cache' => false]); + + $template = $twig->load('index.html'); + try { + $template->render([]); + + $this->fail(); + } catch (RuntimeError $e) { + $this->assertEquals('Variable "foo" does not exist in "index.html" at line 3.', $e->getMessage()); + $this->assertEquals(3, $e->getTemplateLine()); + $this->assertEquals('index.html', $e->getSourceContext()->getName()); + } + } + + public function testTwigExceptionGuessWithExceptionAndArrayLoader() + { + $loader = new ArrayLoader([ + 'base.html' => '{% block content %}{% endblock %}', + 'index.html' => <<<EOHTML +{% extends 'base.html' %} +{% block content %} + {{ foo.bar }} +{% endblock %} +{% block foo %} + {{ foo.bar }} +{% endblock %} +EOHTML + ]); + $twig = new Environment($loader, ['strict_variables' => true, 'debug' => true, 'cache' => false]); + + $template = $twig->load('index.html'); + try { + $template->render(['foo' => new ErrorTest_Foo()]); + + $this->fail(); + } catch (RuntimeError $e) { + $this->assertEquals('An exception has been thrown during the rendering of a template ("Runtime error...") in "index.html" at line 3.', $e->getMessage()); + $this->assertEquals(3, $e->getTemplateLine()); + $this->assertEquals('index.html', $e->getSourceContext()->getName()); + } + } + + public function testTwigExceptionGuessWithMissingVarAndFilesystemLoader() + { + $loader = new FilesystemLoader(__DIR__.'/Fixtures/errors'); + $twig = new Environment($loader, ['strict_variables' => true, 'debug' => true, 'cache' => false]); + + $template = $twig->load('index.html'); + try { + $template->render([]); + + $this->fail(); + } catch (RuntimeError $e) { + $this->assertEquals('Variable "foo" does not exist.', $e->getMessage()); + $this->assertEquals(3, $e->getTemplateLine()); + $this->assertEquals('index.html', $e->getSourceContext()->getName()); + $this->assertEquals(3, $e->getLine()); + $this->assertEquals(strtr(__DIR__.'/Fixtures/errors/index.html', '/', \DIRECTORY_SEPARATOR), $e->getFile()); + } + } + + public function testTwigExceptionGuessWithExceptionAndFilesystemLoader() + { + $loader = new FilesystemLoader(__DIR__.'/Fixtures/errors'); + $twig = new Environment($loader, ['strict_variables' => true, 'debug' => true, 'cache' => false]); + + $template = $twig->load('index.html'); + try { + $template->render(['foo' => new ErrorTest_Foo()]); + + $this->fail(); + } catch (RuntimeError $e) { + $this->assertEquals('An exception has been thrown during the rendering of a template ("Runtime error...").', $e->getMessage()); + $this->assertEquals(3, $e->getTemplateLine()); + $this->assertEquals('index.html', $e->getSourceContext()->getName()); + $this->assertEquals(3, $e->getLine()); + $this->assertEquals(strtr(__DIR__.'/Fixtures/errors/index.html', '/', \DIRECTORY_SEPARATOR), $e->getFile()); + } + } + + /** + * @dataProvider getErroredTemplates + */ + public function testTwigExceptionAddsFileAndLine($templates, $name, $line) + { + $loader = new ArrayLoader($templates); + $twig = new Environment($loader, ['strict_variables' => true, 'debug' => true, 'cache' => false]); + + $template = $twig->load('index'); + + try { + $template->render([]); + + $this->fail(); + } catch (RuntimeError $e) { + $this->assertEquals(sprintf('Variable "foo" does not exist in "%s" at line %d.', $name, $line), $e->getMessage()); + $this->assertEquals($line, $e->getTemplateLine()); + $this->assertEquals($name, $e->getSourceContext()->getName()); + } + + try { + $template->render(['foo' => new ErrorTest_Foo()]); + + $this->fail(); + } catch (RuntimeError $e) { + $this->assertEquals(sprintf('An exception has been thrown during the rendering of a template ("Runtime error...") in "%s" at line %d.', $name, $line), $e->getMessage()); + $this->assertEquals($line, $e->getTemplateLine()); + $this->assertEquals($name, $e->getSourceContext()->getName()); + } + } + + public function getErroredTemplates() + { + return [ + // error occurs in a template + [ + [ + 'index' => "\n\n{{ foo.bar }}\n\n\n{{ 'foo' }}", + ], + 'index', 3, + ], + + // error occurs in an included template + [ + [ + 'index' => "{% include 'partial' %}", + 'partial' => '{{ foo.bar }}', + ], + 'partial', 1, + ], + + // error occurs in a parent block when called via parent() + [ + [ + 'index' => "{% extends 'base' %} + {% block content %} + {{ parent() }} + {% endblock %}", + 'base' => '{% block content %}{{ foo.bar }}{% endblock %}', + ], + 'base', 1, + ], + + // error occurs in a block from the child + [ + [ + 'index' => "{% extends 'base' %} + {% block content %} + {{ foo.bar }} + {% endblock %} + {% block foo %} + {{ foo.bar }} + {% endblock %}", + 'base' => '{% block content %}{% endblock %}', + ], + 'index', 3, + ], + ]; + } + + public function testTwigLeakOutputInDebugMode() + { + $output = exec(sprintf('%s %s debug', \PHP_BINARY, escapeshellarg(__DIR__.'/Fixtures/errors/leak-output.php'))); + + $this->assertSame('Hello OOPS', $output); + } + + public function testDoesNotTwigLeakOutput() + { + $output = exec(sprintf('%s %s', \PHP_BINARY, escapeshellarg(__DIR__.'/Fixtures/errors/leak-output.php'))); + + $this->assertSame('', $output); + } +} + +class ErrorTest_Foo +{ + public function bar() + { + throw new \Exception('Runtime error...'); + } +} diff --git a/vendor/twig/twig/tests/ExpressionParserTest.php b/vendor/twig/twig/tests/ExpressionParserTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ef31fd7152c382e29f9d1f1213e30706040be7a3 --- /dev/null +++ b/vendor/twig/twig/tests/ExpressionParserTest.php @@ -0,0 +1,382 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\Binary\ConcatBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Parser; +use Twig\Source; + +class ExpressionParserTest extends \PHPUnit\Framework\TestCase +{ + /** + * @dataProvider getFailingTestsForAssignment + */ + public function testCanOnlyAssignToNames($template) + { + $this->expectException('\Twig\Error\SyntaxError'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source($template, 'index'))); + } + + public function getFailingTestsForAssignment() + { + return [ + ['{% set false = "foo" %}'], + ['{% set FALSE = "foo" %}'], + ['{% set true = "foo" %}'], + ['{% set TRUE = "foo" %}'], + ['{% set none = "foo" %}'], + ['{% set NONE = "foo" %}'], + ['{% set null = "foo" %}'], + ['{% set NULL = "foo" %}'], + ['{% set 3 = "foo" %}'], + ['{% set 1 + 2 = "foo" %}'], + ['{% set "bar" = "foo" %}'], + ['{% set %}{% endset %}'], + ]; + } + + /** + * @dataProvider getTestsForArray + */ + public function testArrayExpression($template, $expected) + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $stream = $env->tokenize($source = new Source($template, '')); + $parser = new Parser($env); + $expected->setSourceContext($source); + + $this->assertEquals($expected, $parser->parse($stream)->getNode('body')->getNode(0)->getNode('expr')); + } + + /** + * @dataProvider getFailingTestsForArray + */ + public function testArraySyntaxError($template) + { + $this->expectException('\Twig\Error\SyntaxError'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source($template, 'index'))); + } + + public function getFailingTestsForArray() + { + return [ + ['{{ [1, "a": "b"] }}'], + ['{{ {"a": "b", 2} }}'], + ]; + } + + public function getTestsForArray() + { + return [ + // simple array + ['{{ [1, 2] }}', new ArrayExpression([ + new ConstantExpression(0, 1), + new ConstantExpression(1, 1), + + new ConstantExpression(1, 1), + new ConstantExpression(2, 1), + ], 1), + ], + + // array with trailing , + ['{{ [1, 2, ] }}', new ArrayExpression([ + new ConstantExpression(0, 1), + new ConstantExpression(1, 1), + + new ConstantExpression(1, 1), + new ConstantExpression(2, 1), + ], 1), + ], + + // simple hash + ['{{ {"a": "b", "b": "c"} }}', new ArrayExpression([ + new ConstantExpression('a', 1), + new ConstantExpression('b', 1), + + new ConstantExpression('b', 1), + new ConstantExpression('c', 1), + ], 1), + ], + + // hash with trailing , + ['{{ {"a": "b", "b": "c", } }}', new ArrayExpression([ + new ConstantExpression('a', 1), + new ConstantExpression('b', 1), + + new ConstantExpression('b', 1), + new ConstantExpression('c', 1), + ], 1), + ], + + // hash in an array + ['{{ [1, {"a": "b", "b": "c"}] }}', new ArrayExpression([ + new ConstantExpression(0, 1), + new ConstantExpression(1, 1), + + new ConstantExpression(1, 1), + new ArrayExpression([ + new ConstantExpression('a', 1), + new ConstantExpression('b', 1), + + new ConstantExpression('b', 1), + new ConstantExpression('c', 1), + ], 1), + ], 1), + ], + + // array in a hash + ['{{ {"a": [1, 2], "b": "c"} }}', new ArrayExpression([ + new ConstantExpression('a', 1), + new ArrayExpression([ + new ConstantExpression(0, 1), + new ConstantExpression(1, 1), + + new ConstantExpression(1, 1), + new ConstantExpression(2, 1), + ], 1), + new ConstantExpression('b', 1), + new ConstantExpression('c', 1), + ], 1), + ], + ]; + } + + public function testStringExpressionDoesNotConcatenateTwoConsecutiveStrings() + { + $this->expectException('\Twig\Error\SyntaxError'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false, 'optimizations' => 0]); + $stream = $env->tokenize(new Source('{{ "a" "b" }}', 'index')); + $parser = new Parser($env); + + $parser->parse($stream); + } + + /** + * @dataProvider getTestsForString + */ + public function testStringExpression($template, $expected) + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false, 'optimizations' => 0]); + $stream = $env->tokenize($source = new Source($template, '')); + $parser = new Parser($env); + $expected->setSourceContext($source); + + $this->assertEquals($expected, $parser->parse($stream)->getNode('body')->getNode(0)->getNode('expr')); + } + + public function getTestsForString() + { + return [ + [ + '{{ "foo" }}', new ConstantExpression('foo', 1), + ], + [ + '{{ "foo #{bar}" }}', new ConcatBinary( + new ConstantExpression('foo ', 1), + new NameExpression('bar', 1), + 1 + ), + ], + [ + '{{ "foo #{bar} baz" }}', new ConcatBinary( + new ConcatBinary( + new ConstantExpression('foo ', 1), + new NameExpression('bar', 1), + 1 + ), + new ConstantExpression(' baz', 1), + 1 + ), + ], + + [ + '{{ "foo #{"foo #{bar} baz"} baz" }}', new ConcatBinary( + new ConcatBinary( + new ConstantExpression('foo ', 1), + new ConcatBinary( + new ConcatBinary( + new ConstantExpression('foo ', 1), + new NameExpression('bar', 1), + 1 + ), + new ConstantExpression(' baz', 1), + 1 + ), + 1 + ), + new ConstantExpression(' baz', 1), + 1 + ), + ], + ]; + } + + public function testAttributeCallDoesNotSupportNamedArguments() + { + $this->expectException('\Twig\Error\SyntaxError'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{{ foo.bar(name="Foo") }}', 'index'))); + } + + public function testMacroCallDoesNotSupportNamedArguments() + { + $this->expectException('\Twig\Error\SyntaxError'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{% from _self import foo %}{% macro foo() %}{% endmacro %}{{ foo(name="Foo") }}', 'index'))); + } + + public function testMacroDefinitionDoesNotSupportNonNameVariableName() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('An argument must be a name. Unexpected token "string" of value "a" ("name" expected) in "index" at line 1.'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{% macro foo("a") %}{% endmacro %}', 'index'))); + } + + /** + * @dataProvider getMacroDefinitionDoesNotSupportNonConstantDefaultValues + */ + public function testMacroDefinitionDoesNotSupportNonConstantDefaultValues($template) + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('A default value for an argument must be a constant (a boolean, a string, a number, or an array) in "index" at line 1'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source($template, 'index'))); + } + + public function getMacroDefinitionDoesNotSupportNonConstantDefaultValues() + { + return [ + ['{% macro foo(name = "a #{foo} a") %}{% endmacro %}'], + ['{% macro foo(name = [["b", "a #{foo} a"]]) %}{% endmacro %}'], + ]; + } + + /** + * @dataProvider getMacroDefinitionSupportsConstantDefaultValues + */ + public function testMacroDefinitionSupportsConstantDefaultValues($template) + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source($template, 'index'))); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function getMacroDefinitionSupportsConstantDefaultValues() + { + return [ + ['{% macro foo(name = "aa") %}{% endmacro %}'], + ['{% macro foo(name = 12) %}{% endmacro %}'], + ['{% macro foo(name = true) %}{% endmacro %}'], + ['{% macro foo(name = ["a"]) %}{% endmacro %}'], + ['{% macro foo(name = [["a"]]) %}{% endmacro %}'], + ['{% macro foo(name = {a: "a"}) %}{% endmacro %}'], + ['{% macro foo(name = {a: {b: "a"}}) %}{% endmacro %}'], + ]; + } + + public function testUnknownFunction() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "cycl" function. Did you mean "cycle" in "index" at line 1?'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{{ cycl() }}', 'index'))); + } + + public function testUnknownFunctionWithoutSuggestions() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "foobar" function in "index" at line 1.'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{{ foobar() }}', 'index'))); + } + + public function testUnknownFilter() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "lowe" filter. Did you mean "lower" in "index" at line 1?'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{{ 1|lowe }}', 'index'))); + } + + public function testUnknownFilterWithoutSuggestions() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "foobar" filter in "index" at line 1.'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{{ 1|foobar }}', 'index'))); + } + + public function testUnknownTest() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "nul" test. Did you mean "null" in "index" at line 1'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + $stream = $env->tokenize(new Source('{{ 1 is nul }}', 'index')); + $parser->parse($stream); + } + + public function testUnknownTestWithoutSuggestions() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "foobar" test in "index" at line 1.'); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + $parser = new Parser($env); + + $parser->parse($env->tokenize(new Source('{{ 1 is foobar }}', 'index'))); + } +} diff --git a/vendor/twig/twig/tests/Extension/CoreTest.php b/vendor/twig/twig/tests/Extension/CoreTest.php new file mode 100644 index 0000000000000000000000000000000000000000..66c32ff150e92ac1fa2ab8e5439acd8c80850bff --- /dev/null +++ b/vendor/twig/twig/tests/Extension/CoreTest.php @@ -0,0 +1,371 @@ +<?php + +namespace Twig\Tests\Extension; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; + +class CoreTest extends \PHPUnit\Framework\TestCase +{ + /** + * @dataProvider getRandomFunctionTestData + */ + public function testRandomFunction(array $expectedInArray, $value1, $value2 = null) + { + $env = new Environment($this->createMock('Twig_LoaderInterface')); + for ($i = 0; $i < 100; ++$i) { + $this->assertTrue(\in_array(twig_random($env, $value1, $value2), $expectedInArray, true)); // assertContains() would not consider the type + } + } + + public function getRandomFunctionTestData() + { + return [ + 'array' => [ + ['apple', 'orange', 'citrus'], + ['apple', 'orange', 'citrus'], + ], + 'Traversable' => [ + ['apple', 'orange', 'citrus'], + new \ArrayObject(['apple', 'orange', 'citrus']), + ], + 'unicode string' => [ + ['Ä', '€', 'é'], + 'Ä€é', + ], + 'numeric but string' => [ + ['1', '2', '3'], + '123', + ], + 'integer' => [ + range(0, 5, 1), + 5, + ], + 'float' => [ + range(0, 5, 1), + 5.9, + ], + 'negative' => [ + [0, -1, -2], + -2, + ], + 'min max int' => [ + range(50, 100), + 50, + 100, + ], + 'min max float' => [ + range(-10, 10), + -9.5, + 9.5, + ], + 'min null' => [ + range(0, 100), + null, + 100, + ], + ]; + } + + public function testRandomFunctionWithoutParameter() + { + $max = mt_getrandmax(); + + for ($i = 0; $i < 100; ++$i) { + $val = twig_random(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $this->assertTrue(\is_int($val) && $val >= 0 && $val <= $max); + } + } + + public function testRandomFunctionReturnsAsIs() + { + $this->assertSame('', twig_random(new Environment($this->createMock('\Twig\Loader\LoaderInterface')), '')); + $this->assertSame('', twig_random(new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['charset' => null]), '')); + + $instance = new \stdClass(); + $this->assertSame($instance, twig_random(new Environment($this->createMock('\Twig\Loader\LoaderInterface')), $instance)); + } + + public function testRandomFunctionOfEmptyArrayThrowsException() + { + $this->expectException('\Twig\Error\RuntimeError'); + + twig_random(new Environment($this->createMock('\Twig\Loader\LoaderInterface')), []); + } + + public function testRandomFunctionOnNonUTF8String() + { + if (!\function_exists('iconv') && !\function_exists('mb_convert_encoding')) { + $this->markTestSkipped('needs iconv or mbstring'); + } + + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->setCharset('ISO-8859-1'); + + $text = twig_convert_encoding('Äé', 'ISO-8859-1', 'UTF-8'); + for ($i = 0; $i < 30; ++$i) { + $rand = twig_random($twig, $text); + $this->assertTrue(\in_array(twig_convert_encoding($rand, 'UTF-8', 'ISO-8859-1'), ['Ä', 'é'], true)); + } + } + + public function testReverseFilterOnNonUTF8String() + { + if (!\function_exists('iconv') && !\function_exists('mb_convert_encoding')) { + $this->markTestSkipped('needs iconv or mbstring'); + } + + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->setCharset('ISO-8859-1'); + + $input = twig_convert_encoding('Äé', 'ISO-8859-1', 'UTF-8'); + $output = twig_convert_encoding(twig_reverse_filter($twig, $input), 'UTF-8', 'ISO-8859-1'); + + $this->assertEquals($output, 'éÄ'); + } + + /** + * @dataProvider provideCustomEscaperCases + */ + public function testCustomEscaper($expected, $string, $strategy) + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->getExtension('\Twig\Extension\CoreExtension')->setEscaper('foo', '\Twig\Tests\Extension\foo_escaper_for_test'); + + $this->assertSame($expected, twig_escape_filter($twig, $string, $strategy)); + } + + public function provideCustomEscaperCases() + { + return [ + ['fooUTF-8', 'foo', 'foo'], + ['UTF-8', null, 'foo'], + ['42UTF-8', 42, 'foo'], + ]; + } + + public function testUnknownCustomEscaper() + { + $this->expectException('\Twig\Error\RuntimeError'); + + twig_escape_filter(new Environment($this->createMock('\Twig\Loader\LoaderInterface')), 'foo', 'bar'); + } + + /** + * @dataProvider provideTwigFirstCases + */ + public function testTwigFirst($expected, $input) + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $this->assertSame($expected, twig_first($twig, $input)); + } + + public function provideTwigFirstCases() + { + $i = [1 => 'a', 2 => 'b', 3 => 'c']; + + return [ + ['a', 'abc'], + [1, [1, 2, 3]], + ['', null], + ['', ''], + ['a', new CoreTestIterator($i, array_keys($i), true, 3)], + ]; + } + + /** + * @dataProvider provideTwigLastCases + */ + public function testTwigLast($expected, $input) + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $this->assertSame($expected, twig_last($twig, $input)); + } + + public function provideTwigLastCases() + { + $i = [1 => 'a', 2 => 'b', 3 => 'c']; + + return [ + ['c', 'abc'], + [3, [1, 2, 3]], + ['', null], + ['', ''], + ['c', new CoreTestIterator($i, array_keys($i), true)], + ]; + } + + /** + * @dataProvider provideArrayKeyCases + */ + public function testArrayKeysFilter(array $expected, $input) + { + $this->assertSame($expected, twig_get_array_keys_filter($input)); + } + + public function provideArrayKeyCases() + { + $array = ['a' => 'a1', 'b' => 'b1', 'c' => 'c1']; + $keys = array_keys($array); + + return [ + [$keys, $array], + [$keys, new CoreTestIterator($array, $keys)], + [$keys, new CoreTestIteratorAggregate($array, $keys)], + [$keys, new CoreTestIteratorAggregateAggregate($array, $keys)], + [[], null], + [['a'], new \SimpleXMLElement('<xml><a></a></xml>')], + ]; + } + + /** + * @dataProvider provideInFilterCases + */ + public function testInFilter($expected, $value, $compare) + { + $this->assertSame($expected, twig_in_filter($value, $compare)); + } + + public function provideInFilterCases() + { + $array = [1, 2, 'a' => 3, 5, 6, 7]; + $keys = array_keys($array); + + return [ + [true, 1, $array], + [true, '3', $array], + [true, '3', 'abc3def'], + [true, 1, new CoreTestIterator($array, $keys, true, 1)], + [true, '3', new CoreTestIterator($array, $keys, true, 3)], + [true, '3', new CoreTestIteratorAggregateAggregate($array, $keys, true, 3)], + [false, 4, $array], + [false, 4, new CoreTestIterator($array, $keys, true)], + [false, 4, new CoreTestIteratorAggregateAggregate($array, $keys, true)], + [false, 1, 1], + [true, 'b', new \SimpleXMLElement('<xml><a>b</a></xml>')], + ]; + } + + /** + * @dataProvider provideSliceFilterCases + */ + public function testSliceFilter($expected, $input, $start, $length = null, $preserveKeys = false) + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $this->assertSame($expected, twig_slice($twig, $input, $start, $length, $preserveKeys)); + } + + public function provideSliceFilterCases() + { + $i = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4]; + $keys = array_keys($i); + + return [ + [['a' => 1], $i, 0, 1, true], + [['a' => 1], $i, 0, 1, false], + [['b' => 2, 'c' => 3], $i, 1, 2], + [[1], [1, 2, 3, 4], 0, 1], + [[2, 3], [1, 2, 3, 4], 1, 2], + [[2, 3], new CoreTestIterator($i, $keys, true), 1, 2], + [['c' => 3, 'd' => 4], new CoreTestIteratorAggregate($i, $keys, true), 2, null, true], + [$i, new CoreTestIterator($i, $keys, true), 0, \count($keys) + 10, true], + [[], new CoreTestIterator($i, $keys, true), \count($keys) + 10], + ['de', 'abcdef', 3, 2], + [[], new \SimpleXMLElement('<items><item>1</item><item>2</item></items>'), 3], + [[], new \ArrayIterator([1, 2]), 3], + ]; + } +} + +function foo_escaper_for_test(Environment $env, $string, $charset) +{ + return $string.$charset; +} + +final class CoreTestIteratorAggregate implements \IteratorAggregate +{ + private $iterator; + + public function __construct(array $array, array $keys, $allowAccess = false, $maxPosition = false) + { + $this->iterator = new CoreTestIterator($array, $keys, $allowAccess, $maxPosition); + } + + public function getIterator() + { + return $this->iterator; + } +} + +final class CoreTestIteratorAggregateAggregate implements \IteratorAggregate +{ + private $iterator; + + public function __construct(array $array, array $keys, $allowValueAccess = false, $maxPosition = false) + { + $this->iterator = new CoreTestIteratorAggregate($array, $keys, $allowValueAccess, $maxPosition); + } + + public function getIterator() + { + return $this->iterator; + } +} + +final class CoreTestIterator implements \Iterator +{ + private $position; + private $array; + private $arrayKeys; + private $allowValueAccess; + private $maxPosition; + + public function __construct(array $values, array $keys, $allowValueAccess = false, $maxPosition = false) + { + $this->array = $values; + $this->arrayKeys = $keys; + $this->position = 0; + $this->allowValueAccess = $allowValueAccess; + $this->maxPosition = false === $maxPosition ? \count($values) + 1 : $maxPosition; + } + + public function rewind() + { + $this->position = 0; + } + + public function current() + { + if ($this->allowValueAccess) { + return $this->array[$this->key()]; + } + + throw new \LogicException('Code should only use the keys, not the values provided by iterator.'); + } + + public function key() + { + return $this->arrayKeys[$this->position]; + } + + public function next() + { + ++$this->position; + if ($this->position === $this->maxPosition) { + throw new \LogicException(sprintf('Code should not iterate beyond %d.', $this->maxPosition)); + } + } + + public function valid() + { + return isset($this->arrayKeys[$this->position]); + } +} diff --git a/vendor/twig/twig/tests/Extension/SandboxTest.php b/vendor/twig/twig/tests/Extension/SandboxTest.php new file mode 100644 index 0000000000000000000000000000000000000000..fe0f32ff55d5a395d3fe6c397c3d6c179132223b --- /dev/null +++ b/vendor/twig/twig/tests/Extension/SandboxTest.php @@ -0,0 +1,365 @@ +<?php + +namespace Twig\Tests\Extension; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Extension\SandboxExtension; +use Twig\Loader\ArrayLoader; +use Twig\Sandbox\SecurityError; +use Twig\Sandbox\SecurityPolicy; + +class SandboxTest extends \PHPUnit\Framework\TestCase +{ + protected static $params; + protected static $templates; + + protected function setUp() + { + self::$params = [ + 'name' => 'Fabien', + 'obj' => new FooObject(), + 'arr' => ['obj' => new FooObject()], + ]; + + self::$templates = [ + '1_basic1' => '{{ obj.foo }}', + '1_basic2' => '{{ name|upper }}', + '1_basic3' => '{% if name %}foo{% endif %}', + '1_basic4' => '{{ obj.bar }}', + '1_basic5' => '{{ obj }}', + '1_basic7' => '{{ cycle(["foo","bar"], 1) }}', + '1_basic8' => '{{ obj.getfoobar }}{{ obj.getFooBar }}', + '1_basic9' => '{{ obj.foobar }}{{ obj.fooBar }}', + '1_basic' => '{% if obj.foo %}{{ obj.foo|upper }}{% endif %}', + '1_layout' => '{% block content %}{% endblock %}', + '1_child' => "{% extends \"1_layout\" %}\n{% block content %}\n{{ \"a\"|json_encode }}\n{% endblock %}", + '1_include' => '{{ include("1_basic1", sandboxed=true) }}', + '1_range_operator' => '{{ (1..2)[0] }}', + ]; + } + + public function testSandboxWithInheritance() + { + $this->expectException('\Twig\Sandbox\SecurityError'); + $this->expectExceptionMessage('Filter "json_encode" is not allowed in "1_child" at line 3.'); + + $twig = $this->getEnvironment(true, [], self::$templates, ['block']); + $twig->load('1_child')->render([]); + } + + public function testSandboxGloballySet() + { + $twig = $this->getEnvironment(false, [], self::$templates); + $this->assertEquals('FOO', $twig->load('1_basic')->render(self::$params), 'Sandbox does nothing if it is disabled globally'); + } + + public function testSandboxUnallowedMethodAccessor() + { + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('1_basic1')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if an unallowed method is called'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedMethodError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError'); + $this->assertEquals('Twig\Tests\Extension\FooObject', $e->getClassName(), 'Exception should be raised on the "Twig\Tests\Extension\FooObject" class'); + $this->assertEquals('foo', $e->getMethodName(), 'Exception should be raised on the "foo" method'); + } + } + + public function testSandboxUnallowedFilter() + { + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('1_basic2')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if an unallowed filter is called'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedFilterError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFilterError'); + $this->assertEquals('upper', $e->getFilterName(), 'Exception should be raised on the "upper" filter'); + } + } + + public function testSandboxUnallowedTag() + { + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('1_basic3')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if an unallowed tag is used in the template'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedTagError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedTagError'); + $this->assertEquals('if', $e->getTagName(), 'Exception should be raised on the "if" tag'); + } + } + + public function testSandboxUnallowedProperty() + { + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('1_basic4')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if an unallowed property is called in the template'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedPropertyError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedPropertyError'); + $this->assertEquals('Twig\Tests\Extension\FooObject', $e->getClassName(), 'Exception should be raised on the "Twig\Tests\Extension\FooObject" class'); + $this->assertEquals('bar', $e->getPropertyName(), 'Exception should be raised on the "bar" property'); + } + } + + /** + * @dataProvider getSandboxUnallowedToStringTests + */ + public function testSandboxUnallowedToString($template) + { + $twig = $this->getEnvironment(true, [], ['index' => $template], [], ['upper'], ['Twig\Tests\Extension\FooObject' => 'getAnotherFooObject'], [], ['random']); + try { + $twig->load('index')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if an unallowed method (__toString()) is called in the template'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedMethodError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError'); + $this->assertEquals('Twig\Tests\Extension\FooObject', $e->getClassName(), 'Exception should be raised on the "Twig\Tests\Extension\FooObject" class'); + $this->assertEquals('__tostring', $e->getMethodName(), 'Exception should be raised on the "__toString" method'); + } + } + + public function getSandboxUnallowedToStringTests() + { + return [ + 'simple' => ['{{ obj }}'], + 'object_from_array' => ['{{ arr.obj }}'], + 'object_chain' => ['{{ obj.anotherFooObject }}'], + 'filter' => ['{{ obj|upper }}'], + 'filter_from_array' => ['{{ arr.obj|upper }}'], + 'function' => ['{{ random(obj) }}'], + 'function_from_array' => ['{{ random(arr.obj) }}'], + 'function_and_filter' => ['{{ random(obj|upper) }}'], + 'function_and_filter_from_array' => ['{{ random(arr.obj|upper) }}'], + 'object_chain_and_filter' => ['{{ obj.anotherFooObject|upper }}'], + 'object_chain_and_function' => ['{{ random(obj.anotherFooObject) }}'], + 'concat' => ['{{ obj ~ "" }}'], + 'concat_again' => ['{{ "" ~ obj }}'], + ]; + } + + /** + * @dataProvider getSandboxAllowedToStringTests + */ + public function testSandboxAllowedToString($template, $output) + { + $twig = $this->getEnvironment(true, [], ['index' => $template], ['set'], [], ['Twig\Tests\Extension\FooObject' => ['foo', 'getAnotherFooObject']]); + $this->assertEquals($output, $twig->load('index')->render(self::$params)); + } + + public function getSandboxAllowedToStringTests() + { + return [ + 'constant_test' => ['{{ obj is constant("PHP_INT_MAX") }}', ''], + 'set_object' => ['{% set a = obj.anotherFooObject %}{{ a.foo }}', 'foo'], + 'is_defined' => ['{{ obj.anotherFooObject is defined }}', '1'], + 'is_null' => ['{{ obj is null }}', ''], + 'is_sameas' => ['{{ obj is same as(obj) }}', '1'], + 'is_sameas_from_array' => ['{{ arr.obj is same as(arr.obj) }}', '1'], + 'is_sameas_from_another_method' => ['{{ obj.anotherFooObject is same as(obj.anotherFooObject) }}', ''], + ]; + } + + public function testSandboxAllowMethodToString() + { + $twig = $this->getEnvironment(true, [], self::$templates, [], [], ['Twig\Tests\Extension\FooObject' => '__toString']); + FooObject::reset(); + $this->assertEquals('foo', $twig->load('1_basic5')->render(self::$params), 'Sandbox allow some methods'); + $this->assertEquals(1, FooObject::$called['__toString'], 'Sandbox only calls method once'); + } + + public function testSandboxAllowMethodToStringDisabled() + { + $twig = $this->getEnvironment(false, [], self::$templates); + FooObject::reset(); + $this->assertEquals('foo', $twig->load('1_basic5')->render(self::$params), 'Sandbox allows __toString when sandbox disabled'); + $this->assertEquals(1, FooObject::$called['__toString'], 'Sandbox only calls method once'); + } + + public function testSandboxUnallowedFunction() + { + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('1_basic7')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if an unallowed function is called in the template'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedFunctionError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFunctionError'); + $this->assertEquals('cycle', $e->getFunctionName(), 'Exception should be raised on the "cycle" function'); + } + } + + public function testSandboxUnallowedRangeOperator() + { + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('1_range_operator')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception if the unallowed range operator is called'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedFunctionError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFunctionError'); + $this->assertEquals('range', $e->getFunctionName(), 'Exception should be raised on the "range" function'); + } + } + + public function testSandboxAllowMethodFoo() + { + $twig = $this->getEnvironment(true, [], self::$templates, [], [], ['Twig\Tests\Extension\FooObject' => 'foo']); + FooObject::reset(); + $this->assertEquals('foo', $twig->load('1_basic1')->render(self::$params), 'Sandbox allow some methods'); + $this->assertEquals(1, FooObject::$called['foo'], 'Sandbox only calls method once'); + } + + public function testSandboxAllowFilter() + { + $twig = $this->getEnvironment(true, [], self::$templates, [], ['upper']); + $this->assertEquals('FABIEN', $twig->load('1_basic2')->render(self::$params), 'Sandbox allow some filters'); + } + + public function testSandboxAllowTag() + { + $twig = $this->getEnvironment(true, [], self::$templates, ['if']); + $this->assertEquals('foo', $twig->load('1_basic3')->render(self::$params), 'Sandbox allow some tags'); + } + + public function testSandboxAllowProperty() + { + $twig = $this->getEnvironment(true, [], self::$templates, [], [], [], ['Twig\Tests\Extension\FooObject' => 'bar']); + $this->assertEquals('bar', $twig->load('1_basic4')->render(self::$params), 'Sandbox allow some properties'); + } + + public function testSandboxAllowFunction() + { + $twig = $this->getEnvironment(true, [], self::$templates, [], [], [], [], ['cycle']); + $this->assertEquals('bar', $twig->load('1_basic7')->render(self::$params), 'Sandbox allow some functions'); + } + + public function testSandboxAllowRangeOperator() + { + $twig = $this->getEnvironment(true, [], self::$templates, [], [], [], [], ['range']); + $this->assertEquals('1', $twig->load('1_range_operator')->render(self::$params), 'Sandbox allow the range operator'); + } + + public function testSandboxAllowFunctionsCaseInsensitive() + { + foreach (['getfoobar', 'getFoobar', 'getFooBar'] as $name) { + $twig = $this->getEnvironment(true, [], self::$templates, [], [], ['Twig\Tests\Extension\FooObject' => $name]); + FooObject::reset(); + $this->assertEquals('foobarfoobar', $twig->load('1_basic8')->render(self::$params), 'Sandbox allow methods in a case-insensitive way'); + $this->assertEquals(2, FooObject::$called['getFooBar'], 'Sandbox only calls method once'); + + $this->assertEquals('foobarfoobar', $twig->load('1_basic9')->render(self::$params), 'Sandbox allow methods via shortcut names (ie. without get/set)'); + } + } + + public function testSandboxLocallySetForAnInclude() + { + self::$templates = [ + '2_basic' => '{{ obj.foo }}{% include "2_included" %}{{ obj.foo }}', + '2_included' => '{% if obj.foo %}{{ obj.foo|upper }}{% endif %}', + ]; + + $twig = $this->getEnvironment(false, [], self::$templates); + $this->assertEquals('fooFOOfoo', $twig->load('2_basic')->render(self::$params), 'Sandbox does nothing if disabled globally and sandboxed not used for the include'); + + self::$templates = [ + '3_basic' => '{{ obj.foo }}{% sandbox %}{% include "3_included" %}{% endsandbox %}{{ obj.foo }}', + '3_included' => '{% if obj.foo %}{{ obj.foo|upper }}{% endif %}', + ]; + + $twig = $this->getEnvironment(true, [], self::$templates); + try { + $twig->load('3_basic')->render(self::$params); + $this->fail('Sandbox throws a SecurityError exception when the included file is sandboxed'); + } catch (SecurityError $e) { + $this->assertInstanceOf('\Twig\Sandbox\SecurityNotAllowedTagError', $e, 'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedTagError'); + $this->assertEquals('sandbox', $e->getTagName()); + } + } + + public function testMacrosInASandbox() + { + $twig = $this->getEnvironment(true, ['autoescape' => 'html'], ['index' => <<<EOF +{%- import _self as macros %} + +{%- macro test(text) %}<p>{{ text }}</p>{% endmacro %} + +{{- macros.test('username') }} +EOF + ], ['macro', 'import'], ['escape']); + + $this->assertEquals('<p>username</p>', $twig->load('index')->render([])); + } + + public function testSandboxDisabledAfterIncludeFunctionError() + { + $twig = $this->getEnvironment(false, [], self::$templates); + + $e = null; + try { + $twig->load('1_include')->render(self::$params); + } catch (\Throwable $e) { + } catch (\Exception $e) { + } + if (null === $e) { + $this->fail('An exception should be thrown for this test to be valid.'); + } + + $this->assertFalse($twig->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed(), 'Sandboxed include() function call should not leave Sandbox enabled when an error occurs.'); + } + + protected function getEnvironment($sandboxed, $options, $templates, $tags = [], $filters = [], $methods = [], $properties = [], $functions = []) + { + $loader = new ArrayLoader($templates); + $twig = new Environment($loader, array_merge(['debug' => true, 'cache' => false, 'autoescape' => false], $options)); + $policy = new SecurityPolicy($tags, $filters, $methods, $properties, $functions); + $twig->addExtension(new SandboxExtension($policy, $sandboxed)); + + return $twig; + } +} + +class FooObject +{ + public static $called = ['__toString' => 0, 'foo' => 0, 'getFooBar' => 0]; + + public $bar = 'bar'; + + public static function reset() + { + self::$called = ['__toString' => 0, 'foo' => 0, 'getFooBar' => 0]; + } + + public function __toString() + { + ++self::$called['__toString']; + + return 'foo'; + } + + public function foo() + { + ++self::$called['foo']; + + return 'foo'; + } + + public function getFooBar() + { + ++self::$called['getFooBar']; + + return 'foobar'; + } + + public function getAnotherFooObject() + { + return new self(); + } +} diff --git a/vendor/twig/twig/tests/FactoryRuntimeLoaderTest.php b/vendor/twig/twig/tests/FactoryRuntimeLoaderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..32e61d15204d319a627bfe273035a6ffacfd1555 --- /dev/null +++ b/vendor/twig/twig/tests/FactoryRuntimeLoaderTest.php @@ -0,0 +1,36 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\RuntimeLoader\FactoryRuntimeLoader; + +class FactoryRuntimeLoaderTest extends \PHPUnit\Framework\TestCase +{ + public function testLoad() + { + $loader = new FactoryRuntimeLoader(['stdClass' => '\Twig\Tests\getRuntime']); + + $this->assertInstanceOf('stdClass', $loader->load('stdClass')); + } + + public function testLoadReturnsNullForUnmappedRuntime() + { + $loader = new FactoryRuntimeLoader(); + + $this->assertNull($loader->load('stdClass')); + } +} + +function getRuntime() +{ + return new \stdClass(); +} diff --git a/vendor/twig/twig/tests/FileCachingTest.php b/vendor/twig/twig/tests/FileCachingTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e1fa3a4b52a00ce779886839b54a2793675498be --- /dev/null +++ b/vendor/twig/twig/tests/FileCachingTest.php @@ -0,0 +1,66 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Loader\ArrayLoader; + +class FileCachingTest extends \PHPUnit\Framework\TestCase +{ + private $env; + private $tmpDir; + + protected function setUp() + { + $this->tmpDir = sys_get_temp_dir().'/TwigTests'; + if (!file_exists($this->tmpDir)) { + @mkdir($this->tmpDir, 0777, true); + } + + if (!is_writable($this->tmpDir)) { + $this->markTestSkipped(sprintf('Unable to run the tests as "%s" is not writable.', $this->tmpDir)); + } + + $this->env = new Environment(new ArrayLoader(['index' => 'index', 'index2' => 'index2']), ['cache' => $this->tmpDir]); + } + + protected function tearDown() + { + FilesystemHelper::removeDir($this->tmpDir); + } + + /** + * @group legacy + */ + public function testWritingCacheFiles() + { + $name = 'index'; + $this->env->load($name); + $cacheFileName = $this->env->getCacheFilename($name); + + $this->assertFileExists($cacheFileName, 'Cache file does not exist.'); + } + + /** + * @group legacy + */ + public function testClearingCacheFiles() + { + $name = 'index2'; + $this->env->load($name); + $cacheFileName = $this->env->getCacheFilename($name); + + $this->assertFileExists($cacheFileName, 'Cache file does not exist.'); + $this->env->clearCacheFiles(); + $this->assertFileNotExists($cacheFileName, 'Cache file was not cleared.'); + } +} diff --git a/vendor/twig/twig/tests/FileExtensionEscapingStrategyTest.php b/vendor/twig/twig/tests/FileExtensionEscapingStrategyTest.php new file mode 100644 index 0000000000000000000000000000000000000000..26e14135019dfa6bb5d9dc6a8ea37a5db6bfaa09 --- /dev/null +++ b/vendor/twig/twig/tests/FileExtensionEscapingStrategyTest.php @@ -0,0 +1,55 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\FileExtensionEscapingStrategy; + +class FileExtensionEscapingStrategyTest extends \PHPUnit\Framework\TestCase +{ + /** + * @dataProvider getGuessData + */ + public function testGuess($strategy, $filename) + { + $this->assertSame($strategy, FileExtensionEscapingStrategy::guess($filename)); + } + + public function getGuessData() + { + return [ + // default + ['html', 'foo.html'], + ['html', 'foo.html.twig'], + ['html', 'foo'], + ['html', 'foo.bar.twig'], + ['html', 'foo.txt/foo'], + ['html', 'foo.txt/foo.js/'], + + // css + ['css', 'foo.css'], + ['css', 'foo.css.twig'], + ['css', 'foo.twig.css'], + ['css', 'foo.js.css'], + ['css', 'foo.js.css.twig'], + + // js + ['js', 'foo.js'], + ['js', 'foo.js.twig'], + ['js', 'foo.txt/foo.js'], + ['js', 'foo.txt.twig/foo.js'], + + // txt + [false, 'foo.txt'], + [false, 'foo.txt.twig'], + ]; + } +} diff --git a/vendor/twig/twig/tests/FilesystemHelper.php b/vendor/twig/twig/tests/FilesystemHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..76f75afc73de039ebda0ea11cadb7bdc7ae7830d --- /dev/null +++ b/vendor/twig/twig/tests/FilesystemHelper.php @@ -0,0 +1,32 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +class FilesystemHelper +{ + public static function removeDir($dir) + { + $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir, \PHP_VERSION_ID < 50300 ? 0 : \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST); + foreach ($iterator as $filename => $fileInfo) { + if ($iterator->isDot()) { + continue; + } + + if ($fileInfo->isDir()) { + rmdir($filename); + } else { + unlink($filename); + } + } + rmdir($dir); + } +} diff --git a/vendor/twig/twig/tests/Fixtures/autoescape/block.test b/vendor/twig/twig/tests/Fixtures/autoescape/block.test new file mode 100644 index 0000000000000000000000000000000000000000..a80b80c376e5fd8e6824588209132a983ecad374 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/autoescape/block.test @@ -0,0 +1,21 @@ +--TEST-- +blocks and autoescape +--TEMPLATE-- +{{ include('unrelated.txt.twig') -}} +{{ include('template.html.twig') -}} +--TEMPLATE(unrelated.txt.twig)-- +{% block content %}{% endblock %} +--TEMPLATE(template.html.twig)-- +{% extends 'parent.html.twig' %} +{% block content %} +{{ br -}} +{% endblock %} +--TEMPLATE(parent.html.twig)-- +{% set _content = block('content')|raw %} +{{ _content|raw }} +--DATA-- +return ['br' => '<br />'] +--CONFIG-- +return ['autoescape' => 'name'] +--EXPECT-- +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/autoescape/name.test b/vendor/twig/twig/tests/Fixtures/autoescape/name.test new file mode 100644 index 0000000000000000000000000000000000000000..5ad573cf0aa492029a268c071a473095a36d08db --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/autoescape/name.test @@ -0,0 +1,22 @@ +--TEST-- +"name" autoescape strategy +--TEMPLATE-- +{{ br -}} +{{ include('index.js.twig') -}} +{{ include('index.html.twig') -}} +{{ include('index.txt.twig') -}} +--TEMPLATE(index.js.twig)-- +{{ br -}} +--TEMPLATE(index.html.twig)-- +{{ br -}} +--TEMPLATE(index.txt.twig)-- +{{ br -}} +--DATA-- +return ['br' => '<br />'] +--CONFIG-- +return ['autoescape' => 'name'] +--EXPECT-- +<br /> +\u003Cbr\u0020\/\u003E +<br /> +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/errors/base.html b/vendor/twig/twig/tests/Fixtures/errors/base.html new file mode 100644 index 0000000000000000000000000000000000000000..cb0dbe444bb4b15c9d29c1f011bf3fd0c325eb23 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/errors/base.html @@ -0,0 +1 @@ +{% block content %}{% endblock %} diff --git a/vendor/twig/twig/tests/Fixtures/errors/index.html b/vendor/twig/twig/tests/Fixtures/errors/index.html new file mode 100644 index 0000000000000000000000000000000000000000..df57c822f92e3a550d228e05f604af9e4da465f0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/errors/index.html @@ -0,0 +1,7 @@ +{% extends 'base.html' %} +{% block content %} + {{ foo.bar }} +{% endblock %} +{% block foo %} + {{ foo.bar }} +{% endblock %} diff --git a/vendor/twig/twig/tests/Fixtures/errors/leak-output.php b/vendor/twig/twig/tests/Fixtures/errors/leak-output.php new file mode 100644 index 0000000000000000000000000000000000000000..985c39a8eb72581cabff8c14bef38444d6354c21 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/errors/leak-output.php @@ -0,0 +1,33 @@ +<?php + +namespace Twig\Tests\Fixtures\errors; + +require __DIR__.'/../../../vendor/autoload.php'; + +use Twig\Environment; +use Twig\Extension\AbstractExtension; +use Twig\Loader\ArrayLoader; +use Twig\TwigFilter; + +class BrokenExtension extends AbstractExtension +{ + public function getFilters() + { + return [ + new TwigFilter('broken', [$this, 'broken']), + ]; + } + + public function broken() + { + die('OOPS'); + } +} + +$loader = new ArrayLoader([ + 'index.html.twig' => 'Hello {{ "world"|broken }}', +]); +$twig = new Environment($loader, ['debug' => isset($argv[1])]); +$twig->addExtension(new BrokenExtension()); + +echo $twig->render('index.html.twig'); diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/child_contents_outside_blocks.test b/vendor/twig/twig/tests/Fixtures/exceptions/child_contents_outside_blocks.test new file mode 100644 index 0000000000000000000000000000000000000000..74a1cc2833c21e402368f62fb4514b6b63c6c02c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/child_contents_outside_blocks.test @@ -0,0 +1,15 @@ +--TEST-- +Exception for child templates defining content outside blocks defined by parent +--TEMPLATE-- +{% extends 'base.twig' %} + +Content outside a block. + +{% block sidebar %} + Content inside a block. +{% endblock %} +--TEMPLATE(base.twig)-- +{% block sidebar %} +{% endblock %} +--EXCEPTION-- +Twig\Error\SyntaxError: A template that extends another one cannot include content outside Twig blocks. Did you forget to put the content inside a {% block %} tag in "index.twig" at line 3? diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/exception_in_extension_extends.test b/vendor/twig/twig/tests/Fixtures/exceptions/exception_in_extension_extends.test new file mode 100644 index 0000000000000000000000000000000000000000..2ab298059d32122c029bce571693de2722fa2a52 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/exception_in_extension_extends.test @@ -0,0 +1,12 @@ +--TEST-- +Exception thrown from a child for an extension error +--TEMPLATE-- +{% extends 'base.twig' %} +--TEMPLATE(base.twig)-- + + +{{ random([]) }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: The random function cannot pick from an empty array in "base.twig" at line 4. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/exception_in_extension_include.test b/vendor/twig/twig/tests/Fixtures/exceptions/exception_in_extension_include.test new file mode 100644 index 0000000000000000000000000000000000000000..e2281b2903bd3cbbf26db74282d5d554f813b191 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/exception_in_extension_include.test @@ -0,0 +1,12 @@ +--TEST-- +Exception thrown from an include for an extension error +--TEMPLATE-- +{% include 'content.twig' %} +--TEMPLATE(content.twig)-- + + +{{ random([]) }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: The random function cannot pick from an empty array in "content.twig" at line 4. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/multiline_array_with_undefined_variable.test b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_array_with_undefined_variable.test new file mode 100644 index 0000000000000000000000000000000000000000..66784292c9106ee55b9f076f703146fe7df88efb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_array_with_undefined_variable.test @@ -0,0 +1,18 @@ +--TEST-- +Exception for multiline array with undefined variable +--TEMPLATE-- +{% set foo = { + foo: 'foo', + bar: 'bar', + + + foobar: foobar, + + + + foo2: foo2, +} %} +--DATA-- +return ['foobar' => 'foobar'] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "foo2" does not exist in "index.twig" at line 11. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/multiline_array_with_undefined_variable_again.test b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_array_with_undefined_variable_again.test new file mode 100644 index 0000000000000000000000000000000000000000..7f5e96b0491bd5ec1d2fc58eb18a6e9ec152c5c5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_array_with_undefined_variable_again.test @@ -0,0 +1,18 @@ +--TEST-- +Exception for multiline array with undefined variable +--TEMPLATE-- +{% set foo = { + foo: 'foo', + bar: 'bar', + + + foobar: foobar, + + + + foo2: foo2, +} %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "foobar" does not exist in "index.twig" at line 7. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/multiline_function_with_undefined_variable.test b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_function_with_undefined_variable.test new file mode 100644 index 0000000000000000000000000000000000000000..8bc524ef1816d2e175cbff5970ece90b5a7c7cdd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_function_with_undefined_variable.test @@ -0,0 +1,12 @@ +--TEST-- +Exception for multile function with undefined variable +--TEMPLATE-- +{{ include('foo', + with_context=with_context +) }} +--TEMPLATE(foo)-- +Foo +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "with_context" does not exist in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/multiline_function_with_unknown_argument.test b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_function_with_unknown_argument.test new file mode 100644 index 0000000000000000000000000000000000000000..5f413d406afbb686ead7f2cc4ac37d177c30b95c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_function_with_unknown_argument.test @@ -0,0 +1,9 @@ +--TEST-- +Exception for multiline function with unknown argument +--TEMPLATE-- +{{ include('foo', + with_context=True, + invalid=False +) }} +--EXCEPTION-- +Twig\Error\SyntaxError: Unknown argument "invalid" for function "include(template, variables, with_context, ignore_missing, sandboxed)" in "index.twig" at line 4. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/multiline_tag_with_undefined_variable.test b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_tag_with_undefined_variable.test new file mode 100644 index 0000000000000000000000000000000000000000..032ad831ec5515a5efdd16ce699cfadfd51f5306 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/multiline_tag_with_undefined_variable.test @@ -0,0 +1,12 @@ +--TEST-- +Exception for multiline tag with undefined variable +--TEMPLATE-- +{% include 'foo' + with vars +%} +--TEMPLATE(foo)-- +Foo +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "vars" does not exist in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/strict_comparison_operator.test b/vendor/twig/twig/tests/Fixtures/exceptions/strict_comparison_operator.test new file mode 100644 index 0000000000000000000000000000000000000000..e14beb672dde80c9499fca0398debc90ef26b4f5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/strict_comparison_operator.test @@ -0,0 +1,6 @@ +--TEST-- +The PHP === strict comparison operator is not supported +--TEMPLATE-- +{{ 1 === 2 }} +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected operator of value "=". Did you try to use "===" or "!==" for strict comparison? Use "is same as(value)" instead in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/syntax_error_in_reused_template.test b/vendor/twig/twig/tests/Fixtures/exceptions/syntax_error_in_reused_template.test new file mode 100644 index 0000000000000000000000000000000000000000..4ce06854fb7d2b629006a39e62d5de0b5b3090e9 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/syntax_error_in_reused_template.test @@ -0,0 +1,10 @@ +--TEST-- +Exception for syntax error in reused template +--TEMPLATE-- +{% use 'foo.twig' %} +--TEMPLATE(foo.twig)-- +{% block bar %} + {% do node.data = 5 %} +{% endblock %} +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected token "operator" of value "=" ("end of statement block" expected) in "foo.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/unclosed_tag.test b/vendor/twig/twig/tests/Fixtures/exceptions/unclosed_tag.test new file mode 100644 index 0000000000000000000000000000000000000000..b4fc169167632eb1d58f70494dd21a143eafba0e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/unclosed_tag.test @@ -0,0 +1,20 @@ +--TEST-- +Exception for an unclosed tag +--TEMPLATE-- +{% block foo %} + {% if foo %} + + + + + {% for i in fo %} + + + + {% endfor %} + + + +{% endblock %} +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected "endblock" tag (expecting closing tag for the "if" tag defined near line 4) in "index.twig" at line 16. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/undefined_parent.test b/vendor/twig/twig/tests/Fixtures/exceptions/undefined_parent.test new file mode 100644 index 0000000000000000000000000000000000000000..07f855a3feb650b047d0b21e81ac91db17d59284 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/undefined_parent.test @@ -0,0 +1,10 @@ +--TEST-- +Exception for an undefined parent +--TEMPLATE-- +{% extends 'foo.html' %} + +{% set foo = "foo" %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "foo.html" is not defined in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/undefined_template_in_child_template.test b/vendor/twig/twig/tests/Fixtures/exceptions/undefined_template_in_child_template.test new file mode 100644 index 0000000000000000000000000000000000000000..904faa50ad433995693a09491cac760438af57e4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/undefined_template_in_child_template.test @@ -0,0 +1,15 @@ +--TEST-- +Exception for an undefined template in a child template +--TEMPLATE-- +{% extends 'base.twig' %} + +{% block sidebar %} + {{ include('include.twig') }} +{% endblock %} +--TEMPLATE(base.twig)-- +{% block sidebar %} +{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "include.twig" is not defined in "index.twig" at line 5. diff --git a/vendor/twig/twig/tests/Fixtures/exceptions/undefined_trait.test b/vendor/twig/twig/tests/Fixtures/exceptions/undefined_trait.test new file mode 100644 index 0000000000000000000000000000000000000000..5bfdd07e6125439b0c20555f1b7fa7b6cfb2b42f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/exceptions/undefined_trait.test @@ -0,0 +1,9 @@ +--TEST-- +Exception for an undefined trait +--TEMPLATE-- +{% use 'foo' with foobar as bar %} +--TEMPLATE(foo)-- +{% block bar %} +{% endblock %} +--EXCEPTION-- +Twig\Error\RuntimeError: Block "foobar" is not defined in trait "foo" in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/expressions/_self.test b/vendor/twig/twig/tests/Fixtures/expressions/_self.test new file mode 100644 index 0000000000000000000000000000000000000000..fb88f4c859d1c6d732747dd244b4f45de86a645f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/_self.test @@ -0,0 +1,8 @@ +--TEST-- +_self returns the template name +--TEMPLATE-- +{{ _self }} +--DATA-- +return [] +--EXPECT-- +index.twig diff --git a/vendor/twig/twig/tests/Fixtures/expressions/array.test b/vendor/twig/twig/tests/Fixtures/expressions/array.test new file mode 100644 index 0000000000000000000000000000000000000000..bf6033356a1c5bd3cbf44e7677b562ccf566fa8e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/array.test @@ -0,0 +1,61 @@ +--TEST-- +Twig supports array notation +--TEMPLATE-- +{# empty array #} +{{ []|join(',') }} + +{{ [1, 2]|join(',') }} +{{ ['foo', "bar"]|join(',') }} +{{ {0: 1, 'foo': 'bar'}|join(',') }} +{{ {0: 1, 'foo': 'bar'}|keys|join(',') }} + +{{ {0: 1, foo: 'bar'}|join(',') }} +{{ {0: 1, foo: 'bar'}|keys|join(',') }} + +{# nested arrays #} +{% set a = [1, 2, [1, 2], {'foo': {'foo': 'bar'}}] %} +{{ a[2]|join(',') }} +{{ a[3]["foo"]|join(',') }} + +{# works even if [] is used inside the array #} +{{ [foo[bar]]|join(',') }} + +{# elements can be any expression #} +{{ ['foo'|upper, bar|upper, bar == foo]|join(',') }} + +{# arrays can have a trailing , like in PHP #} +{{ + [ + 1, + 2, + ]|join(',') +}} + +{# keys can be any expression #} +{% set a = 1 %} +{% set b = "foo" %} +{% set ary = { (a): 'a', (b): 'b', 'c': 'c', (a ~ b): 'd' } %} +{{ ary|keys|join(',') }} +{{ ary|join(',') }} +--DATA-- +return ['bar' => 'bar', 'foo' => ['bar' => 'bar']] +--EXPECT-- +1,2 +foo,bar +1,bar +0,foo + +1,bar +0,foo + +1,2 +bar + +bar + +FOO,BAR, + +1,2 + +1,foo,c,1foo +a,b,c,d diff --git a/vendor/twig/twig/tests/Fixtures/expressions/array_call.test b/vendor/twig/twig/tests/Fixtures/expressions/array_call.test new file mode 100644 index 0000000000000000000000000000000000000000..8c7a2ee7cb8f6f0e1a9fce0072d18c04b35a58ec --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/array_call.test @@ -0,0 +1,14 @@ +--TEST-- +Twig supports method calls +--TEMPLATE-- +{{ items.foo }} +{{ items['foo'] }} +{{ items[foo] }} +{{ items[items[foo]] }} +--DATA-- +return ['foo' => 'bar', 'items' => ['foo' => 'bar', 'bar' => 'foo']] +--EXPECT-- +bar +bar +foo +bar diff --git a/vendor/twig/twig/tests/Fixtures/expressions/binary.test b/vendor/twig/twig/tests/Fixtures/expressions/binary.test new file mode 100644 index 0000000000000000000000000000000000000000..b4e8be58d3ccb4e09f5e71b7a0a3916953758b1f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/binary.test @@ -0,0 +1,46 @@ +--TEST-- +Twig supports binary operations (+, -, *, /, ~, %, and, or) +--TEMPLATE-- +{{ 1 + 1 }} +{{ 2 - 1 }} +{{ 2 * 2 }} +{{ 2 / 2 }} +{{ 3 % 2 }} +{{ 1 and 1 }} +{{ 1 and 0 }} +{{ 0 and 1 }} +{{ 0 and 0 }} +{{ 1 or 1 }} +{{ 1 or 0 }} +{{ 0 or 1 }} +{{ 0 or 0 }} +{{ 0 or 1 and 0 }} +{{ 1 or 0 and 1 }} +{{ "foo" ~ "bar" }} +{{ foo ~ "bar" }} +{{ "foo" ~ bar }} +{{ foo ~ bar }} +{{ 20 // 7 }} +--DATA-- +return ['foo' => 'bar', 'bar' => 'foo'] +--EXPECT-- +2 +1 +4 +1 +1 +1 + + + +1 +1 +1 + + +1 +foobar +barbar +foofoo +barfoo +2 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/bitwise.test b/vendor/twig/twig/tests/Fixtures/expressions/bitwise.test new file mode 100644 index 0000000000000000000000000000000000000000..c2bda1cc6b61d050904e36912294ec43a6f301d5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/bitwise.test @@ -0,0 +1,14 @@ +--TEST-- +Twig supports bitwise operations +--TEMPLATE-- +{{ 1 b-and 5 }} +{{ 1 b-or 5 }} +{{ 1 b-xor 5 }} +{{ (1 and 0 b-or 0) is same as(1 and (0 b-or 0)) ? 'ok' : 'ko' }} +--DATA-- +return [] +--EXPECT-- +1 +5 +4 +ok diff --git a/vendor/twig/twig/tests/Fixtures/expressions/call_argument_defined_twice.test b/vendor/twig/twig/tests/Fixtures/expressions/call_argument_defined_twice.test new file mode 100644 index 0000000000000000000000000000000000000000..36539a6d1324960aa41d2c13872de5da3f8e22df --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/call_argument_defined_twice.test @@ -0,0 +1,8 @@ +--TEST-- +Argument is defined twice in a call +--TEMPLATE-- +{{ date(987654, date = 123456) }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Argument "date" is defined twice for function "date" in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/expressions/call_positional_arg_after_named_arg.test b/vendor/twig/twig/tests/Fixtures/expressions/call_positional_arg_after_named_arg.test new file mode 100644 index 0000000000000000000000000000000000000000..729c6748597bc7e6e40a6452f0c92795770ca2df --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/call_positional_arg_after_named_arg.test @@ -0,0 +1,8 @@ +--TEST-- +Positional arguments after named arguments in a call +--TEMPLATE-- +{{ date(date = 123456, 'Y-m-d') }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Positional arguments cannot be used after named arguments for function "date" in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/expressions/comparison.test b/vendor/twig/twig/tests/Fixtures/expressions/comparison.test new file mode 100644 index 0000000000000000000000000000000000000000..2811634f76aeec591c926c26debff2fe056fbca6 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/comparison.test @@ -0,0 +1,14 @@ +--TEST-- +Twig supports comparison operators (==, !=, <, >, >=, <=) +--TEMPLATE-- +{{ 1 > 2 }}/{{ 1 > 1 }}/{{ 1 >= 2 }}/{{ 1 >= 1 }} +{{ 1 < 2 }}/{{ 1 < 1 }}/{{ 1 <= 2 }}/{{ 1 <= 1 }} +{{ 1 == 1 }}/{{ 1 == 2 }} +{{ 1 != 1 }}/{{ 1 != 2 }} +--DATA-- +return [] +--EXPECT-- +///1 +1//1/1 +1/ +/1 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/divisibleby.test b/vendor/twig/twig/tests/Fixtures/expressions/divisibleby.test new file mode 100644 index 0000000000000000000000000000000000000000..f1bf5681e59389476732670212836133020a999a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/divisibleby.test @@ -0,0 +1,17 @@ +--TEST-- +Twig supports the "divisible by" operator +--TEMPLATE-- +{{ 8 is divisible by(2) ? 'OK' }} +{{ 8 is not divisible by(3) ? 'OK' }} +{{ 8 is divisible by (2) ? 'OK' }} +{{ 8 is not + divisible + by + (3) ? 'OK' }} +--DATA-- +return [] +--EXPECT-- +OK +OK +OK +OK diff --git a/vendor/twig/twig/tests/Fixtures/expressions/dotdot.test b/vendor/twig/twig/tests/Fixtures/expressions/dotdot.test new file mode 100644 index 0000000000000000000000000000000000000000..0efa9305694208f36d0849fe6c0606c10a781877 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/dotdot.test @@ -0,0 +1,20 @@ +--TEST-- +Twig supports the .. operator +--TEMPLATE-- +{% for i in 0..10 %}{{ i }} {% endfor %} + +{% for letter in 'a'..'z' %}{{ letter }} {% endfor %} + +{% for letter in 'a'|upper..'z'|upper %}{{ letter }} {% endfor %} + +{% for i in foo[0]..foo[1] %}{{ i }} {% endfor %} + +{% for i in 0 + 1 .. 10 - 1 %}{{ i }} {% endfor %} +--DATA-- +return ['foo' => [1, 10]] +--EXPECT-- +0 1 2 3 4 5 6 7 8 9 10 +a b c d e f g h i j k l m n o p q r s t u v w x y z +A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +1 2 3 4 5 6 7 8 9 10 +1 2 3 4 5 6 7 8 9 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/ends_with.test b/vendor/twig/twig/tests/Fixtures/expressions/ends_with.test new file mode 100644 index 0000000000000000000000000000000000000000..c8086d6d4c283c5b71128462efb3c8ad4fabc579 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/ends_with.test @@ -0,0 +1,26 @@ +--TEST-- +Twig supports the "ends with" operator +--TEMPLATE-- +{{ 'foo' ends with 'o' ? 'OK' : 'KO' }} +{{ not ('foo' ends with 'f') ? 'OK' : 'KO' }} +{{ not ('foo' ends with 'foowaytoolong') ? 'OK' : 'KO' }} +{{ 'foo' ends with '' ? 'OK' : 'KO' }} +{{ '1' ends with true ? 'OK' : 'KO' }} +{{ 1 ends with true ? 'OK' : 'KO' }} +{{ 0 ends with false ? 'OK' : 'KO' }} +{{ '' ends with false ? 'OK' : 'KO' }} +{{ false ends with false ? 'OK' : 'KO' }} +{{ false ends with '' ? 'OK' : 'KO' }} +--DATA-- +return [] +--EXPECT-- +OK +OK +OK +OK +KO +KO +KO +KO +KO +KO diff --git a/vendor/twig/twig/tests/Fixtures/expressions/floats.test b/vendor/twig/twig/tests/Fixtures/expressions/floats.test new file mode 100644 index 0000000000000000000000000000000000000000..cdf871cde15dbd1ea7bdaf0da4fd6a0ba1c2451e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/floats.test @@ -0,0 +1,16 @@ +--TEST-- +Twig compiles floats properly +--CONDITION-- +version_compare(phpversion(), '7.0.0', '>=') +--TEMPLATE-- +{% set val2 = 0.0 %} + +{{ val is same as (0.0) ? 'Yes' : 'No' }} +{{ val2 is same as (0.0) ? 'Yes' : 'No' }} +{{ val is same as (val2) ? 'Yes' : 'No' }} +--DATA-- +return ['val' => 0.0] +--EXPECT-- +Yes +Yes +Yes diff --git a/vendor/twig/twig/tests/Fixtures/expressions/grouping.test b/vendor/twig/twig/tests/Fixtures/expressions/grouping.test new file mode 100644 index 0000000000000000000000000000000000000000..069ebf793d10429a4f9cd30dbe66be1e07240a63 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/grouping.test @@ -0,0 +1,8 @@ +--TEST-- +Twig supports grouping of expressions +--TEMPLATE-- +{{ (2 + 2) / 2 }} +--DATA-- +return [] +--EXPECT-- +2 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/literals.test b/vendor/twig/twig/tests/Fixtures/expressions/literals.test new file mode 100644 index 0000000000000000000000000000000000000000..308e8df2ac6b734a4744862429647f4ef0aa3408 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/literals.test @@ -0,0 +1,22 @@ +--TEST-- +Twig supports literals +--TEMPLATE-- +1 {{ true }} +2 {{ TRUE }} +3 {{ false }} +4 {{ FALSE }} +5 {{ none }} +6 {{ NONE }} +7 {{ null }} +8 {{ NULL }} +--DATA-- +return [] +--EXPECT-- +1 1 +2 1 +3 +4 +5 +6 +7 +8 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/magic_call.test b/vendor/twig/twig/tests/Fixtures/expressions/magic_call.test new file mode 100644 index 0000000000000000000000000000000000000000..60417e04ffd0fffc22aac1dedfec44dfb68e4a78 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/magic_call.test @@ -0,0 +1,27 @@ +--TEST-- +Twig supports __call() for attributes +--TEMPLATE-- +{{ foo.foo }} +{{ foo.bar }} +--DATA-- +class TestClassForMagicCallAttributes +{ + public function getBar() + { + return 'bar_from_getbar'; + } + + public function __call($method, $arguments) + { + if ('foo' === $method) { + return 'foo_from_call'; + } + + return false; + } +} + +return ['foo' => new TestClassForMagicCallAttributes()] +--EXPECT-- +foo_from_call +bar_from_getbar diff --git a/vendor/twig/twig/tests/Fixtures/expressions/matches.test b/vendor/twig/twig/tests/Fixtures/expressions/matches.test new file mode 100644 index 0000000000000000000000000000000000000000..95459c3b0f28ee16136bea9462f6e3780b4d17a7 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/matches.test @@ -0,0 +1,12 @@ +--TEST-- +Twig supports the "matches" operator +--TEMPLATE-- +{{ 'foo' matches '/o/' ? 'OK' : 'KO' }} +{{ 'foo' matches '/^fo/' ? 'OK' : 'KO' }} +{{ 'foo' matches '/O/i' ? 'OK' : 'KO' }} +--DATA-- +return [] +--EXPECT-- +OK +OK +OK diff --git a/vendor/twig/twig/tests/Fixtures/expressions/method_call.test b/vendor/twig/twig/tests/Fixtures/expressions/method_call.test new file mode 100644 index 0000000000000000000000000000000000000000..bf49f389e005c6b4b6b84a475eda32ec247cef4a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/method_call.test @@ -0,0 +1,28 @@ +--TEST-- +Twig supports method calls +--TEMPLATE-- +{{ items.foo.foo }} +{{ items.foo.getFoo() }} +{{ items.foo.bar }} +{{ items.foo['bar'] }} +{{ items.foo.bar('a', 43) }} +{{ items.foo.bar(foo) }} +{{ items.foo.self.foo() }} +{{ items.foo.is }} +{{ items.foo.in }} +{{ items.foo.not }} +--DATA-- +return ['foo' => 'bar', 'items' => ['foo' => new Twig\Tests\TwigTestFoo(), 'bar' => 'foo']] +--CONFIG-- +return ['strict_variables' => false] +--EXPECT-- +foo +foo +bar + +bar_a-43 +bar_bar +foo +is +in +not diff --git a/vendor/twig/twig/tests/Fixtures/expressions/negative_numbers.test b/vendor/twig/twig/tests/Fixtures/expressions/negative_numbers.test new file mode 100644 index 0000000000000000000000000000000000000000..c2a6e340245bf32153d7a2bc761c010e09c965d6 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/negative_numbers.test @@ -0,0 +1,18 @@ +--TEST-- +Twig manages negative numbers correctly +--TEMPLATE-- +{{ -1 }} +{{ - 1 }} +{{ 5 - 1 }} +{{ 5-1 }} +{{ 5 + -1 }} +{{ 5 + - 1 }} +--DATA-- +return [] +--EXPECT-- +-1 +-1 +4 +4 +4 +4 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/not_arrow_fn.test b/vendor/twig/twig/tests/Fixtures/expressions/not_arrow_fn.test new file mode 100644 index 0000000000000000000000000000000000000000..af82c47cf5c64538edd95624fef3c84a3cbe0d94 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/not_arrow_fn.test @@ -0,0 +1,8 @@ +--TEST-- +A string in parentheses cannot be confused with an arrow function +--TEMPLATE-- +{{ ["foo", "bar"]|join(("f")) }} +--DATA-- +return [] +--EXPECT-- +foofbar diff --git a/vendor/twig/twig/tests/Fixtures/expressions/operators_as_variables.test b/vendor/twig/twig/tests/Fixtures/expressions/operators_as_variables.test new file mode 100644 index 0000000000000000000000000000000000000000..fa9a843c0fa9f1eddd45685a2eac65729d696e85 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/operators_as_variables.test @@ -0,0 +1,16 @@ +--TEST-- +Twig allows to use named operators as variable names +--TEMPLATE-- +{% for match in matches %} + {{- match }} +{% endfor %} +{{ in }} +{{ is }} +--DATA-- +return ['matches' => [1, 2, 3], 'in' => 'in', 'is' => 'is'] +--EXPECT-- +1 +2 +3 +in +is diff --git a/vendor/twig/twig/tests/Fixtures/expressions/postfix.test b/vendor/twig/twig/tests/Fixtures/expressions/postfix.test new file mode 100644 index 0000000000000000000000000000000000000000..276cbf197d1ebe2827d58b892749b70f2596883a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/postfix.test @@ -0,0 +1,22 @@ +--TEST-- +Twig parses postfix expressions +--TEMPLATE-- +{% import _self as macros %} + +{% macro foo() %}foo{% endmacro %} + +{{ 'a' }} +{{ 'a'|upper }} +{{ ('a')|upper }} +{{ -1|upper }} +{{ macros.foo() }} +{{ (macros).foo() }} +--DATA-- +return [] +--EXPECT-- +a +A +A +-1 +foo +foo diff --git a/vendor/twig/twig/tests/Fixtures/expressions/power.test b/vendor/twig/twig/tests/Fixtures/expressions/power.test new file mode 100644 index 0000000000000000000000000000000000000000..84fd23692ce4edf6acd8370747fbab5ede1a6957 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/power.test @@ -0,0 +1,20 @@ +--TEST-- +Twig parses power expressions +--TEMPLATE-- +{{ 2**3 }} +{{ (-2)**3 }} +{{ (-2)**(-3) }} +{{ a ** a }} +{{ a ** b }} +{{ b ** a }} +{{ b ** b }} +--DATA-- +return ['a' => 4, 'b' => -2] +--EXPECT-- +8 +-8 +-0.125 +256 +0.0625 +16 +0.25 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/sameas.test b/vendor/twig/twig/tests/Fixtures/expressions/sameas.test new file mode 100644 index 0000000000000000000000000000000000000000..83f3691f97277b76d46938e99a7c40c717963e92 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/sameas.test @@ -0,0 +1,21 @@ +--TEST-- +Twig supports the "same as" operator +--TEMPLATE-- +{{ 1 is same as(1) ? 'OK' }} +{{ 1 is not same as(true) ? 'OK' }} +{{ 1 is same as(1) ? 'OK' }} +{{ 1 is not same as(true) ? 'OK' }} +{{ 1 is same as (1) ? 'OK' }} +{{ 1 is not + same + as + (true) ? 'OK' }} +--DATA-- +return [] +--EXPECT-- +OK +OK +OK +OK +OK +OK diff --git a/vendor/twig/twig/tests/Fixtures/expressions/starts_with.test b/vendor/twig/twig/tests/Fixtures/expressions/starts_with.test new file mode 100644 index 0000000000000000000000000000000000000000..a78ff1eac714184589eab0ec68babc5574fcdac3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/starts_with.test @@ -0,0 +1,27 @@ +--TEST-- +Twig supports the "starts with" operator +--TEMPLATE-- +{{ 'foo' starts with 'f' ? 'OK' : 'KO' }} +{{ not ('foo' starts with 'oo') ? 'OK' : 'KO' }} +{{ not ('foo' starts with 'foowaytoolong') ? 'OK' : 'KO' }} +{{ 'foo' starts with 'f' ? 'OK' : 'KO' }} +{{ 'foo' starts +with 'f' ? 'OK' : 'KO' }} +{{ 'foo' starts with '' ? 'OK' : 'KO' }} +{{ '1' starts with true ? 'OK' : 'KO' }} +{{ '' starts with false ? 'OK' : 'KO' }} +{{ 'a' starts with false ? 'OK' : 'KO' }} +{{ false starts with '' ? 'OK' : 'KO' }} +--DATA-- +return [] +--EXPECT-- +OK +OK +OK +OK +OK +OK +KO +KO +KO +KO diff --git a/vendor/twig/twig/tests/Fixtures/expressions/string_operator_as_var_assignment.test b/vendor/twig/twig/tests/Fixtures/expressions/string_operator_as_var_assignment.test new file mode 100644 index 0000000000000000000000000000000000000000..478d4eb5e54beedc02af286cbf28a47cc4bcf63a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/string_operator_as_var_assignment.test @@ -0,0 +1,18 @@ +--TEST-- +Twig supports the string operators as variable names in assignments +--TEMPLATE-- +{% for matches in [1, 2] %} + {{- matches }} +{% endfor %} + +{% set matches = [1, 2] %} + +OK +--DATA-- +return [] +--EXPECT-- +1 +2 + + +OK diff --git a/vendor/twig/twig/tests/Fixtures/expressions/strings.test b/vendor/twig/twig/tests/Fixtures/expressions/strings.test new file mode 100644 index 0000000000000000000000000000000000000000..f402c8939916a93080fa8457a3367c59b90f07b3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/strings.test @@ -0,0 +1,10 @@ +--TEST-- +Twig supports string interpolation +--TEMPLATE-- +{{ "foo #{"foo #{bar} baz"} baz" }} +{{ "foo #{bar}#{bar} baz" }} +--DATA-- +return ['bar' => 'BAR'] +--EXPECT-- +foo foo BAR baz baz +foo BARBAR baz diff --git a/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator.test b/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator.test new file mode 100644 index 0000000000000000000000000000000000000000..37eccc0f545955f35b14fd99bacb6a3f5f2eb0d5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator.test @@ -0,0 +1,18 @@ +--TEST-- +Twig supports the ternary operator +--TEMPLATE-- +{{ 1 ? 'YES' : 'NO' }} +{{ 0 ? 'YES' : 'NO' }} +{{ 0 ? 'YES' : (1 ? 'YES1' : 'NO1') }} +{{ 0 ? 'YES' : (0 ? 'YES1' : 'NO1') }} +{{ 1 == 1 ? 'foo<br />':'' }} +{{ foo ~ (bar ? ('-' ~ bar) : '') }} +--DATA-- +return ['foo' => 'foo', 'bar' => 'bar'] +--EXPECT-- +YES +NO +YES1 +NO1 +foo<br /> +foo-bar diff --git a/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator_noelse.test b/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator_noelse.test new file mode 100644 index 0000000000000000000000000000000000000000..8b0f7284b9b235f1f3eb3573dadaaa07c57f2cb9 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator_noelse.test @@ -0,0 +1,10 @@ +--TEST-- +Twig supports the ternary operator +--TEMPLATE-- +{{ 1 ? 'YES' }} +{{ 0 ? 'YES' }} +--DATA-- +return [] +--EXPECT-- +YES + diff --git a/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator_nothen.test b/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator_nothen.test new file mode 100644 index 0000000000000000000000000000000000000000..ecd6b7546563de086095574ec7cb20e345e1be44 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/ternary_operator_nothen.test @@ -0,0 +1,10 @@ +--TEST-- +Twig supports the ternary operator +--TEMPLATE-- +{{ 'YES' ?: 'NO' }} +{{ 0 ?: 'NO' }} +--DATA-- +return [] +--EXPECT-- +YES +NO diff --git a/vendor/twig/twig/tests/Fixtures/expressions/two_word_operators_as_variables.test b/vendor/twig/twig/tests/Fixtures/expressions/two_word_operators_as_variables.test new file mode 100644 index 0000000000000000000000000000000000000000..eca3b285bbe5993fe235afaa8d6be6df1cff6542 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/two_word_operators_as_variables.test @@ -0,0 +1,8 @@ +--TEST-- +Twig does not allow to use two-word named operators as variable names +--TEMPLATE-- +{{ starts with }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected token "operator" of value "starts with" in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/expressions/unary.test b/vendor/twig/twig/tests/Fixtures/expressions/unary.test new file mode 100644 index 0000000000000000000000000000000000000000..54225311903ec6dfe7586a525c37c15a1bd6602b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/unary.test @@ -0,0 +1,12 @@ +--TEST-- +Twig supports unary operators (not, -, +) +--TEMPLATE-- +{{ not 1 }}/{{ not 0 }} +{{ +1 + 1 }}/{{ -1 - 1 }} +{{ not (false or true) }} +--DATA-- +return [] +--EXPECT-- +/1 +2/-2 + diff --git a/vendor/twig/twig/tests/Fixtures/expressions/unary_macro_arguments.test b/vendor/twig/twig/tests/Fixtures/expressions/unary_macro_arguments.test new file mode 100644 index 0000000000000000000000000000000000000000..27deba3ef519db1f0bb62a06a2d4dcaa16dabdb7 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/unary_macro_arguments.test @@ -0,0 +1,22 @@ +--TEST-- +Twig manages negative numbers as default parameters +--TEMPLATE-- +{% import _self as macros %} +{{ macros.negative_number1() }} +{{ macros.negative_number2() }} +{{ macros.negative_number3() }} +{{ macros.positive_number1() }} +{{ macros.positive_number2() }} +{% macro negative_number1(nb=-1) %}{{ nb }}{% endmacro %} +{% macro negative_number2(nb = --1) %}{{ nb }}{% endmacro %} +{% macro negative_number3(nb = - 1) %}{{ nb }}{% endmacro %} +{% macro positive_number1(nb = +1) %}{{ nb }}{% endmacro %} +{% macro positive_number2(nb = ++1) %}{{ nb }}{% endmacro %} +--DATA-- +return [] +--EXPECT-- +-1 +1 +-1 +1 +1 diff --git a/vendor/twig/twig/tests/Fixtures/expressions/unary_precedence.test b/vendor/twig/twig/tests/Fixtures/expressions/unary_precedence.test new file mode 100644 index 0000000000000000000000000000000000000000..9c56ab12c0f1f648a2a76ef557ed96ade530392e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/expressions/unary_precedence.test @@ -0,0 +1,14 @@ +--TEST-- +Twig unary operators precedence +--TEMPLATE-- +{{ -1 - 1 }} +{{ -1 - -1 }} +{{ -1 * -1 }} +{{ 4 / -1 * 5 }} +--DATA-- +return [] +--EXPECT-- +-2 +0 +1 +-20 diff --git a/vendor/twig/twig/tests/Fixtures/filters/abs.test b/vendor/twig/twig/tests/Fixtures/filters/abs.test new file mode 100644 index 0000000000000000000000000000000000000000..7518769d4a06fcec199c034f264439533cac0d60 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/abs.test @@ -0,0 +1,30 @@ +--TEST-- +"abs" filter +--TEMPLATE-- +{{ (-5.5)|abs }} +{{ (-5)|abs }} +{{ (-0)|abs }} +{{ 0|abs }} +{{ 5|abs }} +{{ 5.5|abs }} +{{ number1|abs }} +{{ number2|abs }} +{{ number3|abs }} +{{ number4|abs }} +{{ number5|abs }} +{{ number6|abs }} +--DATA-- +return ['number1' => -5.5, 'number2' => -5, 'number3' => -0, 'number4' => 0, 'number5' => 5, 'number6' => 5.5] +--EXPECT-- +5.5 +5 +0 +0 +5 +5.5 +5.5 +5 +0 +0 +5 +5.5 diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch.test b/vendor/twig/twig/tests/Fixtures/filters/batch.test new file mode 100644 index 0000000000000000000000000000000000000000..0acf25bd6144eef88ae05019b13e3bc1db0c4bcf --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch.test @@ -0,0 +1,31 @@ +--TEST-- +"batch" filter +--TEMPLATE-- +{% for row in items|batch(3) %} + <div class=row> + {% for column in row %} + <div class=item>{{ column }}</div> + {% endfor %} + </div> +{% endfor %} +--DATA-- +return ['items' => ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']] +--EXPECT-- +<div class=row> + <div class=item>a</div> + <div class=item>b</div> + <div class=item>c</div> + </div> + <div class=row> + <div class=item>d</div> + <div class=item>e</div> + <div class=item>f</div> + </div> + <div class=row> + <div class=item>g</div> + <div class=item>h</div> + <div class=item>i</div> + </div> + <div class=row> + <div class=item>j</div> + </div> diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_float.test b/vendor/twig/twig/tests/Fixtures/filters/batch_float.test new file mode 100644 index 0000000000000000000000000000000000000000..dad004ec2c5558f10a0a785072f1a7296d7a44ee --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_float.test @@ -0,0 +1,29 @@ +--TEST-- +"batch" filter +--TEMPLATE-- +{% for row in items|batch(3.1) %} + <div class=row> + {% for column in row %} + <div class=item>{{ column }}</div> + {% endfor %} + </div> +{% endfor %} +--DATA-- +return ['items' => ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']] +--EXPECT-- +<div class=row> + <div class=item>a</div> + <div class=item>b</div> + <div class=item>c</div> + <div class=item>d</div> + </div> + <div class=row> + <div class=item>e</div> + <div class=item>f</div> + <div class=item>g</div> + <div class=item>h</div> + </div> + <div class=row> + <div class=item>i</div> + <div class=item>j</div> + </div> diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_with_empty_fill.test b/vendor/twig/twig/tests/Fixtures/filters/batch_with_empty_fill.test new file mode 100644 index 0000000000000000000000000000000000000000..411b4fc749913585fd7184ffddae07375b65a77b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_with_empty_fill.test @@ -0,0 +1,37 @@ +--TEST-- +"batch" filter +--TEMPLATE-- +<table> +{% for row in items|batch(3, '') %} + <tr> + {% for column in row %} + <td>{{ column }}</td> + {% endfor %} + </tr> +{% endfor %} +</table> +--DATA-- +return ['items' => ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']] +--EXPECT-- +<table> + <tr> + <td>a</td> + <td>b</td> + <td>c</td> + </tr> + <tr> + <td>d</td> + <td>e</td> + <td>f</td> + </tr> + <tr> + <td>g</td> + <td>h</td> + <td>i</td> + </tr> + <tr> + <td>j</td> + <td></td> + <td></td> + </tr> +</table> diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_with_exact_elements.test b/vendor/twig/twig/tests/Fixtures/filters/batch_with_exact_elements.test new file mode 100644 index 0000000000000000000000000000000000000000..750d1557aab1c087a23af76293b71dabb3792e23 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_with_exact_elements.test @@ -0,0 +1,33 @@ +--TEST-- +"batch" filter +--TEMPLATE-- +{% for row in items|batch(3, 'fill') %} + <div class=row> + {% for column in row %} + <div class=item>{{ column }}</div> + {% endfor %} + </div> +{% endfor %} +--DATA-- +return ['items' => ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']] +--EXPECT-- +<div class=row> + <div class=item>a</div> + <div class=item>b</div> + <div class=item>c</div> + </div> + <div class=row> + <div class=item>d</div> + <div class=item>e</div> + <div class=item>f</div> + </div> + <div class=row> + <div class=item>g</div> + <div class=item>h</div> + <div class=item>i</div> + </div> + <div class=row> + <div class=item>j</div> + <div class=item>k</div> + <div class=item>l</div> + </div> diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_with_fill.test b/vendor/twig/twig/tests/Fixtures/filters/batch_with_fill.test new file mode 100644 index 0000000000000000000000000000000000000000..5d470d005b12cd41b4ebe1f92d7cf774c6df255a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_with_fill.test @@ -0,0 +1,37 @@ +--TEST-- +"batch" filter +--TEMPLATE-- +<table> +{% for row in items|batch(3, 'fill') %} + <tr> + {% for column in row %} + <td>{{ column }}</td> + {% endfor %} + </tr> +{% endfor %} +</table> +--DATA-- +return ['items' => ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']] +--EXPECT-- +<table> + <tr> + <td>a</td> + <td>b</td> + <td>c</td> + </tr> + <tr> + <td>d</td> + <td>e</td> + <td>f</td> + </tr> + <tr> + <td>g</td> + <td>h</td> + <td>i</td> + </tr> + <tr> + <td>j</td> + <td>fill</td> + <td>fill</td> + </tr> +</table> diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_with_keys.test b/vendor/twig/twig/tests/Fixtures/filters/batch_with_keys.test new file mode 100644 index 0000000000000000000000000000000000000000..e56cd79bbc923df292d875c0672185ea7d2ec7d1 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_with_keys.test @@ -0,0 +1,10 @@ +--TEST-- +"batch" filter preserves array keys +--TEMPLATE-- +{{ {'foo': 'bar', 'key': 'value'}|batch(4)|first|keys|join(',') }} +{{ {'foo': 'bar', 'key': 'value'}|batch(4, 'fill')|first|keys|join(',') }} +--DATA-- +return [] +--EXPECT-- +foo,key +foo,key,0,1 diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_with_more_elements.test b/vendor/twig/twig/tests/Fixtures/filters/batch_with_more_elements.test new file mode 100644 index 0000000000000000000000000000000000000000..90f4de6859d8d2976e47c42eb616bb4afe737de3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_with_more_elements.test @@ -0,0 +1,23 @@ +--TEST-- +"batch" filter +--TEMPLATE-- +{% for row in items|batch(3, 'fill') %} + <div class=row> + {% for key, column in row %} + <div class={{ key }}>{{ column }}</div> + {% endfor %} + </div> +{% endfor %} +--DATA-- +return ['items' => ['a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', '123' => 'e']] +--EXPECT-- +<div class=row> + <div class=a>a</div> + <div class=b>b</div> + <div class=c>c</div> + </div> + <div class=row> + <div class=d>d</div> + <div class=123>e</div> + <div class=124>fill</div> + </div> diff --git a/vendor/twig/twig/tests/Fixtures/filters/batch_with_zero_elements.test b/vendor/twig/twig/tests/Fixtures/filters/batch_with_zero_elements.test new file mode 100644 index 0000000000000000000000000000000000000000..bc303da8ab6082be4fcf0606bd9dc66266691b5d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/batch_with_zero_elements.test @@ -0,0 +1,10 @@ +--TEST-- +"batch" filter with zero elements +--TEMPLATE-- +{{ []|batch(3)|length }} +{{ []|batch(3, 'fill')|length }} +--DATA-- +return [] +--EXPECT-- +0 +0 diff --git a/vendor/twig/twig/tests/Fixtures/filters/convert_encoding.test b/vendor/twig/twig/tests/Fixtures/filters/convert_encoding.test new file mode 100644 index 0000000000000000000000000000000000000000..db8acedef5ed72273c49f2c01ef38e9a18bbec1c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/convert_encoding.test @@ -0,0 +1,10 @@ +--TEST-- +"convert_encoding" filter +--CONDITION-- +function_exists('iconv') || function_exists('mb_convert_encoding') +--TEMPLATE-- +{{ "愛していますか?"|convert_encoding('ISO-2022-JP', 'UTF-8')|convert_encoding('UTF-8', 'ISO-2022-JP') }} +--DATA-- +return [] +--EXPECT-- +愛していますか? diff --git a/vendor/twig/twig/tests/Fixtures/filters/date.test b/vendor/twig/twig/tests/Fixtures/filters/date.test new file mode 100644 index 0000000000000000000000000000000000000000..16816aa994806eae8b62969055af433b51b1002b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date.test @@ -0,0 +1,90 @@ +--TEST-- +"date" filter +--TEMPLATE-- +{{ date1|date }} +{{ date1|date('d/m/Y') }} +{{ date1|date('d/m/Y H:i:s', 'Asia/Hong_Kong') }} +{{ date1|date('d/m/Y H:i:s P', 'Asia/Hong_Kong') }} +{{ date1|date('d/m/Y H:i:s P', 'America/Chicago') }} +{{ date1|date('e') }} +{{ date1|date('d/m/Y H:i:s') }} + +{{ date2|date }} +{{ date2|date('d/m/Y') }} +{{ date2|date('d/m/Y H:i:s', 'Asia/Hong_Kong') }} +{{ date2|date('d/m/Y H:i:s', timezone1) }} +{{ date2|date('d/m/Y H:i:s') }} + +{{ date3|date }} +{{ date3|date('d/m/Y') }} + +{{ date4|date }} +{{ date4|date('d/m/Y') }} + +{{ date5|date }} +{{ date5|date('d/m/Y') }} + +{{ date6|date('d/m/Y H:i:s P', 'Europe/Paris') }} +{{ date6|date('d/m/Y H:i:s P', 'Asia/Hong_Kong') }} +{{ date6|date('d/m/Y H:i:s P', false) }} +{{ date6|date('e', 'Europe/Paris') }} +{{ date6|date('e', false) }} + +{{ date7|date }} +{{ date7|date(timezone='Europe/Paris') }} +{{ date7|date(timezone='Asia/Hong_Kong') }} +{{ date7|date(timezone=false) }} +{{ date7|date(timezone='Indian/Mauritius') }} + +{{ '2010-01-28 15:00:00'|date(timezone="Europe/Paris") }} +{{ '2010-01-28 15:00:00'|date(timezone="Asia/Hong_Kong") }} +--DATA-- +date_default_timezone_set('Europe/Paris'); +return [ + 'date1' => mktime(13, 45, 0, 10, 4, 2010), + 'date2' => new \DateTime('2010-10-04 13:45'), + 'date3' => '2010-10-04 13:45', + 'date4' => 1286199900, // \DateTime::createFromFormat('Y-m-d H:i', '2010-10-04 13:45', new \DateTimeZone('UTC'))->getTimestamp() -- A unixtimestamp is always GMT + 'date5' => -189291360, // \DateTime::createFromFormat('Y-m-d H:i', '1964-01-02 03:04', new \DateTimeZone('UTC'))->getTimestamp(), + 'date6' => new \DateTime('2010-10-04 13:45', new \DateTimeZone('America/New_York')), + 'date7' => '2010-01-28T15:00:00+04:00', + 'timezone1' => new \DateTimeZone('America/New_York'), +] +--EXPECT-- +October 4, 2010 13:45 +04/10/2010 +04/10/2010 19:45:00 +04/10/2010 19:45:00 +08:00 +04/10/2010 06:45:00 -05:00 +Europe/Paris +04/10/2010 13:45:00 + +October 4, 2010 13:45 +04/10/2010 +04/10/2010 19:45:00 +04/10/2010 07:45:00 +04/10/2010 13:45:00 + +October 4, 2010 13:45 +04/10/2010 + +October 4, 2010 15:45 +04/10/2010 + +January 2, 1964 04:04 +02/01/1964 + +04/10/2010 19:45:00 +02:00 +05/10/2010 01:45:00 +08:00 +04/10/2010 13:45:00 -04:00 +Europe/Paris +America/New_York + +January 28, 2010 12:00 +January 28, 2010 12:00 +January 28, 2010 19:00 +January 28, 2010 15:00 +January 28, 2010 15:00 + +January 28, 2010 15:00 +January 28, 2010 22:00 diff --git a/vendor/twig/twig/tests/Fixtures/filters/date_default_format.test b/vendor/twig/twig/tests/Fixtures/filters/date_default_format.test new file mode 100644 index 0000000000000000000000000000000000000000..c6e81302df657a86c81cdcc082c061fe854ca4d2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date_default_format.test @@ -0,0 +1,14 @@ +--TEST-- +"date" filter +--TEMPLATE-- +{{ date1|date }} +{{ date1|date('d/m/Y') }} +--DATA-- +date_default_timezone_set('UTC'); +$twig->getExtension('\Twig\Extension\CoreExtension')->setDateFormat('Y-m-d', '%d days %h hours'); +return [ + 'date1' => mktime(13, 45, 0, 10, 4, 2010), +] +--EXPECT-- +2010-10-04 +04/10/2010 diff --git a/vendor/twig/twig/tests/Fixtures/filters/date_default_format_interval.test b/vendor/twig/twig/tests/Fixtures/filters/date_default_format_interval.test new file mode 100644 index 0000000000000000000000000000000000000000..a72fb81d629669e2234f144a0d8137b964b36912 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date_default_format_interval.test @@ -0,0 +1,16 @@ +--TEST-- +"date" filter (interval support as of PHP 5.3) +--CONDITION-- +version_compare(phpversion(), '5.3.0', '>=') +--TEMPLATE-- +{{ date2|date }} +{{ date2|date('%d days') }} +--DATA-- +date_default_timezone_set('UTC'); +$twig->getExtension('\Twig\Extension\CoreExtension')->setDateFormat('Y-m-d', '%d days %h hours'); +return [ + 'date2' => new \DateInterval('P2D'), +] +--EXPECT-- +2 days 0 hours +2 days diff --git a/vendor/twig/twig/tests/Fixtures/filters/date_immutable.test b/vendor/twig/twig/tests/Fixtures/filters/date_immutable.test new file mode 100644 index 0000000000000000000000000000000000000000..2414db5015b39b268f14fba7f06ce27d7e0bc367 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date_immutable.test @@ -0,0 +1,37 @@ +--TEST-- +"date" filter +--CONDITION-- +version_compare(phpversion(), '5.5.0', '>=') +--TEMPLATE-- +{{ date1|date }} +{{ date1|date('d/m/Y') }} +{{ date1|date('d/m/Y H:i:s', 'Asia/Hong_Kong') }} +{{ date1|date('d/m/Y H:i:s', timezone1) }} +{{ date1|date('d/m/Y H:i:s') }} +{{ date1|date_modify('+1 hour')|date('d/m/Y H:i:s') }} + +{{ date2|date('d/m/Y H:i:s P', 'Europe/Paris') }} +{{ date2|date('d/m/Y H:i:s P', 'Asia/Hong_Kong') }} +{{ date2|date('d/m/Y H:i:s P', false) }} +{{ date2|date('e', 'Europe/Paris') }} +{{ date2|date('e', false) }} +--DATA-- +date_default_timezone_set('Europe/Paris'); +return [ + 'date1' => new \DateTimeImmutable('2010-10-04 13:45'), + 'date2' => new \DateTimeImmutable('2010-10-04 13:45', new \DateTimeZone('America/New_York')), + 'timezone1' => new \DateTimeZone('America/New_York'), +] +--EXPECT-- +October 4, 2010 13:45 +04/10/2010 +04/10/2010 19:45:00 +04/10/2010 07:45:00 +04/10/2010 13:45:00 +04/10/2010 14:45:00 + +04/10/2010 19:45:00 +02:00 +05/10/2010 01:45:00 +08:00 +04/10/2010 13:45:00 -04:00 +Europe/Paris +America/New_York diff --git a/vendor/twig/twig/tests/Fixtures/filters/date_interval.test b/vendor/twig/twig/tests/Fixtures/filters/date_interval.test new file mode 100644 index 0000000000000000000000000000000000000000..c3333f565bf79ce56966a719d77a14d57ac306ac --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date_interval.test @@ -0,0 +1,19 @@ +--TEST-- +"date" filter (interval support as of PHP 5.3) +--CONDITION-- +version_compare(phpversion(), '5.3.0', '>=') +--TEMPLATE-- +{{ date1|date }} +{{ date1|date('%d days %h hours') }} +{{ date1|date('%d days %h hours', timezone1) }} +--DATA-- +date_default_timezone_set('UTC'); +return [ + 'date1' => new \DateInterval('P2D'), + // This should have no effect on \DateInterval formatting + 'timezone1' => new \DateTimeZone('America/New_York'), +] +--EXPECT-- +2 days +2 days 0 hours +2 days 0 hours diff --git a/vendor/twig/twig/tests/Fixtures/filters/date_modify.test b/vendor/twig/twig/tests/Fixtures/filters/date_modify.test new file mode 100644 index 0000000000000000000000000000000000000000..d7f8fdf42a1d5a913a1f3ab354d304d89f8e58f8 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date_modify.test @@ -0,0 +1,14 @@ +--TEST-- +"date_modify" filter +--TEMPLATE-- +{{ date1|date_modify('-1day')|date('Y-m-d H:i:s') }} +{{ date2|date_modify('-1day')|date('Y-m-d H:i:s') }} +--DATA-- +date_default_timezone_set('UTC'); +return [ + 'date1' => '2010-10-04 13:45', + 'date2' => new \DateTime('2010-10-04 13:45'), +] +--EXPECT-- +2010-10-03 13:45:00 +2010-10-03 13:45:00 diff --git a/vendor/twig/twig/tests/Fixtures/filters/date_namedargs.test b/vendor/twig/twig/tests/Fixtures/filters/date_namedargs.test new file mode 100644 index 0000000000000000000000000000000000000000..2d1aa134496c3eab54315588205b53862bf84c18 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/date_namedargs.test @@ -0,0 +1,13 @@ +--TEST-- +"date" filter +--TEMPLATE-- +{{ date|date(format='d/m/Y H:i:s P', timezone='America/Chicago') }} +{{ date|date(timezone='America/Chicago', format='d/m/Y H:i:s P') }} +{{ date|date('d/m/Y H:i:s P', timezone='America/Chicago') }} +--DATA-- +date_default_timezone_set('UTC'); +return ['date' => mktime(13, 45, 0, 10, 4, 2010)] +--EXPECT-- +04/10/2010 08:45:00 -05:00 +04/10/2010 08:45:00 -05:00 +04/10/2010 08:45:00 -05:00 diff --git a/vendor/twig/twig/tests/Fixtures/filters/default.test b/vendor/twig/twig/tests/Fixtures/filters/default.test new file mode 100644 index 0000000000000000000000000000000000000000..b01a62d2fb3a64ccfdf8de2272b08364736df30d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/default.test @@ -0,0 +1,150 @@ +--TEST-- +"default" filter +--TEMPLATE-- +Variable: +{{ definedVar |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ zeroVar |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ emptyVar |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ nullVar |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ undefinedVar |default('default') is same as('default') ? 'ok' : 'ko' }} +Array access: +{{ nested.definedVar |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ nested['definedVar'] |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ nested.zeroVar |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ nested.emptyVar |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ nested.nullVar |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ nested.undefinedVar |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ nested['undefinedVar'] |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ undefinedVar.foo |default('default') is same as('default') ? 'ok' : 'ko' }} +Plain values: +{{ 'defined' |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ 0 |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ '' |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ null |default('default') is same as('default') ? 'ok' : 'ko' }} +Precedence: +{{ 'o' ~ nullVar |default('k') }} +{{ 'o' ~ nested.nullVar |default('k') }} +Object methods: +{{ object.foo |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ object.undefinedMethod |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ object.getFoo() |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ object.getFoo('a') |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ object.undefinedMethod() |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ object.undefinedMethod('a') |default('default') is same as('default') ? 'ok' : 'ko' }} +Deep nested: +{{ nested.undefinedVar.foo.bar |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ nested.definedArray.0 |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ nested['definedArray'][0] |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ object.self.foo |default('default') is same as('default') ? 'ko' : 'ok' }} +{{ object.self.undefinedMethod |default('default') is same as('default') ? 'ok' : 'ko' }} +{{ object.undefinedMethod.self |default('default') is same as('default') ? 'ok' : 'ko' }} +--DATA-- +return [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'emptyVar' => '', + 'nullVar' => null, + 'nested' => [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'emptyVar' => '', + 'nullVar' => null, + 'definedArray' => [0], + ], + 'object' => new Twig\Tests\TwigTestFoo(), +] +--CONFIG-- +return ['strict_variables' => false] +--EXPECT-- +Variable: +ok +ok +ok +ok +ok +Array access: +ok +ok +ok +ok +ok +ok +ok +ok +Plain values: +ok +ok +ok +ok +Precedence: +ok +ok +Object methods: +ok +ok +ok +ok +ok +ok +Deep nested: +ok +ok +ok +ok +ok +ok +--DATA-- +return [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'emptyVar' => '', + 'nullVar' => null, + 'nested' => [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'emptyVar' => '', + 'nullVar' => null, + 'definedArray' => [0], + ], + 'object' => new Twig\Tests\TwigTestFoo(), +] +--CONFIG-- +return ['strict_variables' => true] +--EXPECT-- +Variable: +ok +ok +ok +ok +ok +Array access: +ok +ok +ok +ok +ok +ok +ok +ok +Plain values: +ok +ok +ok +ok +Precedence: +ok +ok +Object methods: +ok +ok +ok +ok +ok +ok +Deep nested: +ok +ok +ok +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/filters/dynamic_filter.test b/vendor/twig/twig/tests/Fixtures/filters/dynamic_filter.test new file mode 100644 index 0000000000000000000000000000000000000000..27dc8784c6b64aa8f8472d84aa0205d680be11bb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/dynamic_filter.test @@ -0,0 +1,10 @@ +--TEST-- +dynamic filter +--TEMPLATE-- +{{ 'bar'|foo_path }} +{{ 'bar'|a_foo_b_bar }} +--DATA-- +return [] +--EXPECT-- +foo/bar +a/b/bar diff --git a/vendor/twig/twig/tests/Fixtures/filters/escape.test b/vendor/twig/twig/tests/Fixtures/filters/escape.test new file mode 100644 index 0000000000000000000000000000000000000000..131f5b4e72b76badd09fcd26786b467b433b49b6 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/escape.test @@ -0,0 +1,8 @@ +--TEST-- +"escape" filter +--TEMPLATE-- +{{ "foo <br />"|e }} +--DATA-- +return [] +--EXPECT-- +foo <br /> diff --git a/vendor/twig/twig/tests/Fixtures/filters/escape_html_attr.test b/vendor/twig/twig/tests/Fixtures/filters/escape_html_attr.test new file mode 100644 index 0000000000000000000000000000000000000000..10e3275542102d8a0d8e5b60b1dc88619bf881b4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/escape_html_attr.test @@ -0,0 +1,8 @@ +--TEST-- +"escape" filter does not escape with the html strategy when using the html_attr strategy +--TEMPLATE-- +{{ '<br />'|escape('html_attr') }} +--DATA-- +return [] +--EXPECT-- +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/filters/escape_javascript.test b/vendor/twig/twig/tests/Fixtures/filters/escape_javascript.test new file mode 100644 index 0000000000000000000000000000000000000000..4c2fb7a3668257beba238933252c17cc8831abab --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/escape_javascript.test @@ -0,0 +1,8 @@ +--TEST-- +"escape" filter +--TEMPLATE-- +{{ "é ♜ 𝌆"|e('js') }} +--DATA-- +return [] +--EXPECT-- +\u00E9\u0020\u265C\u0020\uD834\uDF06 diff --git a/vendor/twig/twig/tests/Fixtures/filters/escape_non_supported_charset.test b/vendor/twig/twig/tests/Fixtures/filters/escape_non_supported_charset.test new file mode 100644 index 0000000000000000000000000000000000000000..93f34297b09bb5a1b2f1cb5334c75ee0148db0c0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/escape_non_supported_charset.test @@ -0,0 +1,8 @@ +--TEST-- +"escape" filter +--TEMPLATE-- +{{ "愛していますか? <br />"|e }} +--DATA-- +return [] +--EXPECT-- +愛していますか? <br /> diff --git a/vendor/twig/twig/tests/Fixtures/filters/filter.test b/vendor/twig/twig/tests/Fixtures/filters/filter.test new file mode 100644 index 0000000000000000000000000000000000000000..fe44d80ed7e52e4f19bbab6b951333225d956cbb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/filter.test @@ -0,0 +1,46 @@ +--TEST-- +"filter" filter +--TEMPLATE-- +{% set offset = 3 %} + +{% for k, v in [1, 5, 3, 4, 5]|filter((v) => v > offset) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in {a: 1, b: 2, c: 5, d: 8}|filter(v => v > offset) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in [1, 5, 3, 4, 5]|filter(v => v > offset) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in it|filter((v) => v > offset) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in ita|filter(v => v > offset) -%} + {{ k }} = {{ v }} +{% endfor %} +--DATA-- +return [ + 'it' => new \ArrayIterator(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 8]), + 'ita' => new Twig\Tests\IteratorAggregateStub(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 8]), +] +--EXPECT-- +1 = 5 +3 = 4 +4 = 5 + +c = 5 +d = 8 + +1 = 5 +3 = 4 +4 = 5 + +c = 5 +d = 8 + +c = 5 +d = 8 diff --git a/vendor/twig/twig/tests/Fixtures/filters/filter_php_55.test b/vendor/twig/twig/tests/Fixtures/filters/filter_php_55.test new file mode 100644 index 0000000000000000000000000000000000000000..6684139a1a7bc8e136b0f90889354166d37681e0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/filter_php_55.test @@ -0,0 +1,23 @@ +--TEST-- +"filter" filter (PHP 5.5 required) +--CONDITION-- +version_compare(phpversion(), '5.5.0', '>=') +--TEMPLATE-- +{% for k, v in xml|filter(x => true) %} +{{ k }}/{{ v }} +{% endfor %} + +{# we can iterate more than once #} +{% for k, v in xml|filter(x => true) %} +{{ k }}/{{ v }} +{% endfor %} +--DATA-- +return ['xml' => new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><doc><elem>foo</elem><elem>bar</elem><elem>baz</elem></doc>')] +--EXPECT-- +elem/foo +elem/bar +elem/baz + +elem/foo +elem/bar +elem/baz diff --git a/vendor/twig/twig/tests/Fixtures/filters/filter_php_56.test b/vendor/twig/twig/tests/Fixtures/filters/filter_php_56.test new file mode 100644 index 0000000000000000000000000000000000000000..0daf4083ad4cc2ce158f1d66a30ae33a72d80d7a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/filter_php_56.test @@ -0,0 +1,27 @@ +--TEST-- +"filter" filter (PHP 5.6 required) +--CONDITION-- +version_compare(phpversion(), '5.6.0', '>=') +--TEMPLATE-- +{% set offset = 3 %} + +{% for k, v in {a: 1, b: 2, c: 5, d: 8}|filter((v, k) => (v > offset) and (k != "d")) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in it|filter((v, k) => (v > offset) and (k != "d")) -%} + {{ k }} = {{ v }} +{% endfor %} + +{# we can iterate more than once #} +{% for k, v in it|filter((v, k) => (v > offset) and (k != "d")) -%} + {{ k }} = {{ v }} +{% endfor %} +--DATA-- +return ['it' => new \ArrayIterator(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 8])] +--EXPECT-- +c = 5 + +c = 5 + +c = 5 diff --git a/vendor/twig/twig/tests/Fixtures/filters/first.test b/vendor/twig/twig/tests/Fixtures/filters/first.test new file mode 100644 index 0000000000000000000000000000000000000000..b19f2eed7bdeaa7e9661fef1b4284ce399bc9b55 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/first.test @@ -0,0 +1,17 @@ +--TEST-- +"first" filter +--TEMPLATE-- +{{ [1, 2, 3, 4]|first }} +{{ {a: 1, b: 2, c: 3, d: 4}|first }} +{{ '1234'|first }} +{{ arr|first }} +{{ 'Ä€é'|first }} +{{ ''|first }} +--DATA-- +return ['arr' => new \ArrayObject([1, 2, 3, 4])] +--EXPECT-- +1 +1 +1 +1 +Ä diff --git a/vendor/twig/twig/tests/Fixtures/filters/force_escape.test b/vendor/twig/twig/tests/Fixtures/filters/force_escape.test new file mode 100644 index 0000000000000000000000000000000000000000..7efbe3200a673f3ba9ccfd11c318b5ae1b654df1 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/force_escape.test @@ -0,0 +1,18 @@ +--TEST-- +"escape" filter +--TEMPLATE-- +{% set foo %} + foo<br /> +{% endset %} + +{{ foo|e('html') -}} +{{ foo|e('js') }} +{% autoescape true %} + {{ foo }} +{% endautoescape %} +--DATA-- +return [] +--EXPECT-- + foo<br /> +\u0020\u0020\u0020\u0020foo\u003Cbr\u0020\/\u003E\n + foo<br /> diff --git a/vendor/twig/twig/tests/Fixtures/filters/format.test b/vendor/twig/twig/tests/Fixtures/filters/format.test new file mode 100644 index 0000000000000000000000000000000000000000..efaf8317a3c2f8341b620d720f5631452ba2119d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/format.test @@ -0,0 +1,8 @@ +--TEST-- +"format" filter +--TEMPLATE-- +{{ string|format(foo, 3) }} +--DATA-- +return ['string' => '%s/%d', 'foo' => 'bar'] +--EXPECT-- +bar/3 diff --git a/vendor/twig/twig/tests/Fixtures/filters/join.test b/vendor/twig/twig/tests/Fixtures/filters/join.test new file mode 100644 index 0000000000000000000000000000000000000000..3127ea1a7123170e39ab7c5f7ca46a89062f7d12 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/join.test @@ -0,0 +1,38 @@ +--TEST-- +"join" filter +--TEMPLATE-- +{{ ["foo", "bar"]|join(', ') }} +{{ foo|join(', ') }} +{{ bar|join(', ') }} + +{{ ["foo", "bar"]|join(', ', ' and ') }} +{{ foo|join(', ', ' and ') }} +{{ bar|join(', ', ' and ') }} +{{ ["one", "two", "three"]|join(', ', ' and ') }} +{{ ["a", "b", "c"]|join('','-') }} +{{ ["a", "b", "c"]|join('-','-') }} +{{ ["a", "b", "c"]|join('-','') }} +{{ ["hello"]|join('|','-') }} + +{{ {"a": "w", "b": "x", "c": "y", "d": "z"}|join }} +{{ {"a": "w", "b": "x", "c": "y", "d": "z"}|join(',') }} +{{ {"a": "w", "b": "x", "c": "y", "d": "z"}|join(',','-') }} +--DATA-- +return ['foo' => new Twig\Tests\TwigTestFoo(), 'bar' => new \ArrayObject([3, 4])] +--EXPECT-- +foo, bar +1, 2 +3, 4 + +foo and bar +1 and 2 +3 and 4 +one, two and three +ab-c +a-b-c +a-bc +hello + +wxyz +w,x,y,z +w,x,y-z diff --git a/vendor/twig/twig/tests/Fixtures/filters/json_encode.test b/vendor/twig/twig/tests/Fixtures/filters/json_encode.test new file mode 100644 index 0000000000000000000000000000000000000000..902f90b337743bbbb0610b6a0b07cad5c058c73b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/json_encode.test @@ -0,0 +1,12 @@ +--TEST-- +"json_encode" filter +--TEMPLATE-- +{{ "foo"|json_encode|raw }} +{{ foo|json_encode|raw }} +{{ [foo, "foo"]|json_encode|raw }} +--DATA-- +return ['foo' => new \Twig\Markup('foo', 'UTF-8')] +--EXPECT-- +"foo" +"foo" +["foo","foo"] diff --git a/vendor/twig/twig/tests/Fixtures/filters/last.test b/vendor/twig/twig/tests/Fixtures/filters/last.test new file mode 100644 index 0000000000000000000000000000000000000000..f71896c77f6434a9e0a2b689aaa3e6af143b96b5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/last.test @@ -0,0 +1,17 @@ +--TEST-- +"last" filter +--TEMPLATE-- +{{ [1, 2, 3, 4]|last }} +{{ {a: 1, b: 2, c: 3, d: 4}|last }} +{{ '1234'|last }} +{{ arr|last }} +{{ 'Ä€é'|last }} +{{ ''|last }} +--DATA-- +return ['arr' => new \ArrayObject([1, 2, 3, 4])] +--EXPECT-- +4 +4 +4 +4 +é diff --git a/vendor/twig/twig/tests/Fixtures/filters/length.test b/vendor/twig/twig/tests/Fixtures/filters/length.test new file mode 100644 index 0000000000000000000000000000000000000000..eb3f02334f37c54ea0e0410535fa5c001a37625e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/length.test @@ -0,0 +1,40 @@ +--TEST-- +"length" filter +--TEMPLATE-- +{{ array|length }} +{{ string|length }} +{{ number|length }} +{{ to_string_able|length }} +{{ countable|length }} +{{ iterator_aggregate|length }} +{{ null|length }} +{{ magic|length }} +{{ non_countable|length }} +{{ simple_xml_element|length }} +{{ iterator|length }} +--DATA-- +return [ + 'array' => [1, 4], + 'string' => 'foo', + 'number' => 1000, + 'to_string_able' => new Twig\Tests\ToStringStub('foobar'), + 'countable' => new Twig\Tests\CountableStub(42), /* also asserts we do *not* call __toString() */ + 'iterator_aggregate' => new Twig\Tests\IteratorAggregateStub(['a', 'b', 'c']), /* also asserts we do *not* call __toString() */ + 'null' => null, + 'magic' => new Twig\Tests\MagicCallStub(), /* used to assert we do *not* call __call */ + 'non_countable' => new \StdClass(), + 'simple_xml_element' => new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><doc><elem/><elem/></doc>'), + 'iterator' => new Twig\Tests\SimpleIteratorForTesting() +] +--EXPECT-- +2 +3 +4 +6 +42 +3 +0 +1 +1 +2 +7 diff --git a/vendor/twig/twig/tests/Fixtures/filters/length_utf8.test b/vendor/twig/twig/tests/Fixtures/filters/length_utf8.test new file mode 100644 index 0000000000000000000000000000000000000000..b1e9681a5d556e528593d513356debe044a62645 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/length_utf8.test @@ -0,0 +1,12 @@ +--TEST-- +"length" filter +--CONDITION-- +function_exists('mb_get_info') +--TEMPLATE-- +{{ string|length }} +{{ markup|length }} +--DATA-- +return ['string' => 'été', 'markup' => new \Twig\Markup('foo', 'UTF-8')] +--EXPECT-- +3 +3 diff --git a/vendor/twig/twig/tests/Fixtures/filters/map.test b/vendor/twig/twig/tests/Fixtures/filters/map.test new file mode 100644 index 0000000000000000000000000000000000000000..5552f816683d5465d27b722c52e107bec5c98447 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/map.test @@ -0,0 +1,41 @@ +--TEST-- +"map" filter +--TEMPLATE-- +{% set offset = 3 %} + +{% for k, v in [1, 2]|map((item) => item + 2 ) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in {a: 1, b: 2}|map((item) => item ~ "*" ) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in {a: 1, b: 2}|map((item, k) => item ~ "*" ~ k ) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in [1, 2]|map(item => item + 2 ) -%} + {{ k }} = {{ v }} +{% endfor %} + +{% for k, v in it|map(item => item + 2 ) -%} + {{ k }} = {{ v }} +{% endfor %} +--DATA-- +return ['it' => new \ArrayIterator([1, 2])] +--EXPECT-- +0 = 3 +1 = 4 + +a = 1* +b = 2* + +a = 1*a +b = 2*b + +0 = 3 +1 = 4 + +0 = 3 +1 = 4 diff --git a/vendor/twig/twig/tests/Fixtures/filters/merge.test b/vendor/twig/twig/tests/Fixtures/filters/merge.test new file mode 100644 index 0000000000000000000000000000000000000000..8877501d4cc1227ff0dded4afb5680ca5c0df403 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/merge.test @@ -0,0 +1,25 @@ +--TEST-- +"merge" filter +--TEMPLATE-- +{{ items|merge({'bar': 'foo'})|join }} +{{ items|merge({'bar': 'foo'})|keys|join }} +{{ {'bar': 'foo'}|merge(items)|join }} +{{ {'bar': 'foo'}|merge(items)|keys|join }} +{{ numerics|merge([4, 5, 6])|join }} +{{ traversable.a|merge(traversable.b)|join }} +--DATA-- +return [ + 'items' => ['foo' => 'bar'], + 'numerics' => [1, 2, 3], + 'traversable' => [ + 'a' => new \ArrayObject([0 => 1, 1 => 2, 2 => 3]), + 'b' => new \ArrayObject(['a' => 'b']) + ] +] +--EXPECT-- +barfoo +foobar +foobar +barfoo +123456 +123b diff --git a/vendor/twig/twig/tests/Fixtures/filters/nl2br.test b/vendor/twig/twig/tests/Fixtures/filters/nl2br.test new file mode 100644 index 0000000000000000000000000000000000000000..524ec45f9630367a5c5f8b6a5dcd044d8251a798 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/nl2br.test @@ -0,0 +1,14 @@ +--TEST-- +"nl2br" filter +--TEMPLATE-- +{{ "I like Twig.\nYou will like it too.\n\nEverybody like it!"|nl2br }} +{{ text|nl2br }} +--DATA-- +return ['text' => "If you have some <strong>HTML</strong>\nit will be escaped."] +--EXPECT-- +I like Twig.<br /> +You will like it too.<br /> +<br /> +Everybody like it! +If you have some <strong>HTML</strong><br /> +it will be escaped. diff --git a/vendor/twig/twig/tests/Fixtures/filters/number_format.test b/vendor/twig/twig/tests/Fixtures/filters/number_format.test new file mode 100644 index 0000000000000000000000000000000000000000..7f1e2e16a288e52db5c47e0270fd0ed370a6053a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/number_format.test @@ -0,0 +1,18 @@ +--TEST-- +"number_format" filter +--TEMPLATE-- +{{ 20|number_format }} +{{ 20.25|number_format }} +{{ 20.25|number_format(2) }} +{{ 20.25|number_format(2, ',') }} +{{ 1020.25|number_format(2, ',') }} +{{ 1020.25|number_format(2, ',', '.') }} +--DATA-- +return [] +--EXPECT-- +20 +20 +20.25 +20,25 +1,020,25 +1.020,25 diff --git a/vendor/twig/twig/tests/Fixtures/filters/number_format_default.test b/vendor/twig/twig/tests/Fixtures/filters/number_format_default.test new file mode 100644 index 0000000000000000000000000000000000000000..beedd901a090379d7657b5757d07d1b6a911e92d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/number_format_default.test @@ -0,0 +1,21 @@ +--TEST-- +"number_format" filter with defaults. +--TEMPLATE-- +{{ 20|number_format }} +{{ 20.25|number_format }} +{{ 20.25|number_format(1) }} +{{ 20.25|number_format(2, ',') }} +{{ 1020.25|number_format }} +{{ 1020.25|number_format(2, ',') }} +{{ 1020.25|number_format(2, ',', '.') }} +--DATA-- +$twig->getExtension('\Twig\Extension\CoreExtension')->setNumberFormat(2, '!', '='); +return [] +--EXPECT-- +20!00 +20!25 +20!3 +20,25 +1=020!25 +1=020,25 +1.020,25 diff --git a/vendor/twig/twig/tests/Fixtures/filters/reduce.test b/vendor/twig/twig/tests/Fixtures/filters/reduce.test new file mode 100644 index 0000000000000000000000000000000000000000..73cad4168671f7cf99066f9c1e8305b353f74b00 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/reduce.test @@ -0,0 +1,14 @@ +--TEST-- +"reduce" filter +--TEMPLATE-- +{% set offset = 3 %} + +{{ [1, -1, 4]|reduce((carry, item) => carry + item + offset, 10) }} + +{{ it|reduce((carry, item) => carry + item + offset, 10) }} +--DATA-- +return ['it' => new \ArrayIterator([1, -1, 4])] +--EXPECT-- +23 + +23 diff --git a/vendor/twig/twig/tests/Fixtures/filters/replace.test b/vendor/twig/twig/tests/Fixtures/filters/replace.test new file mode 100644 index 0000000000000000000000000000000000000000..1b9670a17b38e6480f8e7902990383949de353af --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/replace.test @@ -0,0 +1,12 @@ +--TEST-- +"replace" filter +--TEMPLATE-- +{{ "I liké %this% and %that%."|replace({'%this%': "foo", '%that%': "bar"}) }} +{{ 'I like single replace operation only %that%'|replace({'%that%' : '%that%1'}) }} +{{ 'I like %this% and %that%.'|replace(traversable) }} +--DATA-- +return ['traversable' => new \ArrayObject(['%this%' => 'foo', '%that%' => 'bar'])] +--EXPECT-- +I liké foo and bar. +I like single replace operation only %that%1 +I like foo and bar. diff --git a/vendor/twig/twig/tests/Fixtures/filters/replace_invalid_arg.test b/vendor/twig/twig/tests/Fixtures/filters/replace_invalid_arg.test new file mode 100644 index 0000000000000000000000000000000000000000..ba6fea4125a2eb3c18b6cce12b2e8b5f801b1760 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/replace_invalid_arg.test @@ -0,0 +1,8 @@ +--TEST-- +Exception for invalid argument type in replace call +--TEMPLATE-- +{{ 'test %foo%'|replace(stdClass) }} +--DATA-- +return ['stdClass' => new \stdClass()] +--EXCEPTION-- +Twig\Error\RuntimeError: The "replace" filter expects an array or "Traversable" as replace values, got "stdClass" in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/filters/reverse.test b/vendor/twig/twig/tests/Fixtures/filters/reverse.test new file mode 100644 index 0000000000000000000000000000000000000000..904e5839b02971e6c08e1c4a78b34e13e78513d5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/reverse.test @@ -0,0 +1,18 @@ +--TEST-- +"reverse" filter +--TEMPLATE-- +{{ [1, 2, 3, 4]|reverse|join('') }} +{{ '1234évènement'|reverse }} +{{ arr|reverse|join('') }} +{{ {'a': 'c', 'b': 'a'}|reverse()|join(',') }} +{{ {'a': 'c', 'b': 'a'}|reverse(preserveKeys=true)|join(glue=',') }} +{{ {'a': 'c', 'b': 'a'}|reverse(preserve_keys=true)|join(glue=',') }} +--DATA-- +return ['arr' => new \ArrayObject([1, 2, 3, 4])] +--EXPECT-- +4321 +tnemenèvé4321 +4321 +a,c +a,c +a,c diff --git a/vendor/twig/twig/tests/Fixtures/filters/round.test b/vendor/twig/twig/tests/Fixtures/filters/round.test new file mode 100644 index 0000000000000000000000000000000000000000..709237543a4c62e358ac92eff1e5c89b4353d5b7 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/round.test @@ -0,0 +1,22 @@ +--TEST-- +"round" filter +--TEMPLATE-- +{{ 2.7|round }} +{{ 2.1|round }} +{{ 2.1234|round(3, 'floor') }} +{{ 2.1|round(0, 'ceil') }} + +{{ 21.3|round(-1)}} +{{ 21.3|round(-1, 'ceil')}} +{{ 21.3|round(-1, 'floor')}} +--DATA-- +return [] +--EXPECT-- +3 +2 +2.123 +3 + +20 +30 +20 diff --git a/vendor/twig/twig/tests/Fixtures/filters/slice.test b/vendor/twig/twig/tests/Fixtures/filters/slice.test new file mode 100644 index 0000000000000000000000000000000000000000..fc975d7bb186d7f9079f46f7ae7b844b9cc07af2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/slice.test @@ -0,0 +1,54 @@ +--TEST-- +"slice" filter +--TEMPLATE-- +{{ [1, 2, 3, 4][1:2]|join('') }} +{{ {a: 1, b: 2, c: 3, d: 4}[1:2]|join('') }} +{{ [1, 2, 3, 4][start:length]|join('') }} +{{ [1, 2, 3, 4]|slice(1, 2)|join('') }} +{{ [1, 2, 3, 4]|slice(1, 2)|keys|join('') }} +{{ [1, 2, 3, 4]|slice(1, 2, true)|keys|join('') }} +{{ {a: 1, b: 2, c: 3, d: 4}|slice(1, 2)|join('') }} +{{ {a: 1, b: 2, c: 3, d: 4}|slice(1, 2)|keys|join('') }} +{{ '1234'|slice(1, 2) }} +{{ '1234'[1:2] }} +{{ arr|slice(1, 2)|join('') }} +{{ arr[1:2]|join('') }} +{{ arr[4:1]|join('') }} +{{ arr[3:2]|join('') }} + +{{ [1, 2, 3, 4]|slice(1)|join('') }} +{{ [1, 2, 3, 4][1:]|join('') }} +{{ '1234'|slice(1) }} +{{ '1234'[1:] }} +{{ '1234'[:1] }} + +{{ arr|slice(3)|join('') }} +{{ arr[2:]|join('') }} +{{ xml|slice(1)|join('')}} +--DATA-- +return ['start' => 1, 'length' => 2, 'arr' => new \ArrayObject([1, 2, 3, 4]), 'xml' => new \SimpleXMLElement('<items><item>1</item><item>2</item></items>')] +--EXPECT-- +23 +23 +23 +23 +01 +12 +23 +bc +23 +23 +23 +23 + +4 + +234 +234 +234 +234 +1 + +4 +34 +2 diff --git a/vendor/twig/twig/tests/Fixtures/filters/sort.test b/vendor/twig/twig/tests/Fixtures/filters/sort.test new file mode 100644 index 0000000000000000000000000000000000000000..c3b2c70dd4ae670e69954eb54ff76fcf0b590ef1 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/sort.test @@ -0,0 +1,12 @@ +--TEST-- +"sort" filter +--TEMPLATE-- +{{ array1|sort|join }} +{{ array2|sort|join }} +{{ traversable|sort|join }} +--DATA-- +return ['array1' => [4, 1], 'array2' => ['foo', 'bar'], 'traversable' => new \ArrayObject([0 => 3, 1 => 2, 2 => 1])] +--EXPECT-- +14 +barfoo +123 diff --git a/vendor/twig/twig/tests/Fixtures/filters/spaceless.test b/vendor/twig/twig/tests/Fixtures/filters/spaceless.test new file mode 100644 index 0000000000000000000000000000000000000000..eadc1d4962a3e87c517b8b42dce03736e71e9712 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/spaceless.test @@ -0,0 +1,8 @@ +--TEST-- +"spaceless" filter +--TEMPLATE-- +{{ " <div> <div> foo </div> </div>"|spaceless }} +--DATA-- +return [] +--EXPECT-- +<div><div> foo </div></div> diff --git a/vendor/twig/twig/tests/Fixtures/filters/special_chars.test b/vendor/twig/twig/tests/Fixtures/filters/special_chars.test new file mode 100644 index 0000000000000000000000000000000000000000..9869ec91c345b3432516527c44a239018094ec3b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/special_chars.test @@ -0,0 +1,8 @@ +--TEST-- +"§" custom filter +--TEMPLATE-- +{{ 'foo'|§ }} +--DATA-- +return [] +--EXPECT-- +§foo§ diff --git a/vendor/twig/twig/tests/Fixtures/filters/split.test b/vendor/twig/twig/tests/Fixtures/filters/split.test new file mode 100644 index 0000000000000000000000000000000000000000..2bd46afa36dc94535f8b1cb5f8f97f1588b4b738 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/split.test @@ -0,0 +1,22 @@ +--TEST-- +"split" filter +--TEMPLATE-- +{{ "one,two,three,four,five"|split(',')|join('-') }} +{{ foo|split(',')|join('-') }} +{{ foo|split(',', 3)|join('-') }} +{{ baz|split('')|join('-') }} +{{ baz|split('', 1)|join('-') }} +{{ baz|split('', 2)|join('-') }} +{{ foo|split(',', -2)|join('-') }} +{{ "hello0world"|split('0')|join('-') }} +--DATA-- +return ['foo' => "one,two,three,four,five", 'baz' => '12345',] +--EXPECT-- +one-two-three-four-five +one-two-three-four-five +one-two-three,four,five +1-2-3-4-5 +1-2-3-4-5 +12-34-5 +one-two-three +hello-world \ No newline at end of file diff --git a/vendor/twig/twig/tests/Fixtures/filters/split_utf8.test b/vendor/twig/twig/tests/Fixtures/filters/split_utf8.test new file mode 100644 index 0000000000000000000000000000000000000000..bf52e6df76173ea13e48c87f6eea45b5dac10e7d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/split_utf8.test @@ -0,0 +1,24 @@ +--TEST-- +"split" filter +--CONDITION-- +function_exists('mb_get_info') +--TEMPLATE-- +{{ "é"|split('', 10)|join('-') }} +{{ foo|split(',')|join('-') }} +{{ foo|split(',', 1)|join('-') }} +{{ foo|split(',', 2)|join('-') }} +{{ foo|split(',', 3)|join('-') }} +{{ baz|split('')|join('-') }} +{{ baz|split('', 1)|join('-') }} +{{ baz|split('', 2)|join('-') }} +--DATA-- +return ['foo' => 'Ä,é,Äほ', 'baz' => 'éÄßごa',] +--EXPECT-- +é +Ä-é-Äほ +Ä,é,Äほ +Ä-é,Äほ +Ä-é-Äほ +é-Ä-ß-ご-a +é-Ä-ß-ご-a +éÄ-ßご-a \ No newline at end of file diff --git a/vendor/twig/twig/tests/Fixtures/filters/static_calls.test b/vendor/twig/twig/tests/Fixtures/filters/static_calls.test new file mode 100644 index 0000000000000000000000000000000000000000..1626db0c97298765d39d45006b24c41910ba2e3a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/static_calls.test @@ -0,0 +1,10 @@ +--TEST-- +Filters as static method calls +--TEMPLATE-- +{{ 'foo'|static_call_string }} +{{ 'foo'|static_call_array }} +--DATA-- +return ['foo' => 'foo'] +--EXPECT-- +*foo* +*foo* diff --git a/vendor/twig/twig/tests/Fixtures/filters/trim.test b/vendor/twig/twig/tests/Fixtures/filters/trim.test new file mode 100644 index 0000000000000000000000000000000000000000..432989ff165f06a3cde1dd13acf44f770fdd821b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/trim.test @@ -0,0 +1,24 @@ +--TEST-- +"trim" filter +--TEMPLATE-- +{{ " I like Twig. "|trim }} +{{ text|trim }} +{{ " foo/"|trim("/") }} +{{ "xxxI like Twig.xxx"|trim(character_mask="x", side="left") }} +{{ "xxxI like Twig.xxx"|trim(side="right", character_mask="x") }} +{{ "xxxI like Twig.xxx"|trim("x", "right") }} +{{ "/ foo/"|trim("/", "left") }} +{{ "/ foo/"|trim(character_mask="/", side="left") }} +{{ " do nothing. "|trim("", "right") }} +--DATA-- +return ['text' => " If you have some <strong>HTML</strong> it will be escaped. "] +--EXPECT-- +I like Twig. +If you have some <strong>HTML</strong> it will be escaped. + foo +I like Twig.xxx +xxxI like Twig. +xxxI like Twig. + foo/ + foo/ + do nothing. diff --git a/vendor/twig/twig/tests/Fixtures/filters/urlencode.test b/vendor/twig/twig/tests/Fixtures/filters/urlencode.test new file mode 100644 index 0000000000000000000000000000000000000000..66a682dd397ce2da5cad04837ab781125b87015d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/urlencode.test @@ -0,0 +1,16 @@ +--TEST-- +"url_encode" filter +--CONDITION-- +defined('PHP_QUERY_RFC3986') +--TEMPLATE-- +{{ {foo: "bar", number: 3, "spéßi%l": "e%c0d@d", "spa ce": ""}|url_encode }} +{{ {foo: "bar", number: 3, "spéßi%l": "e%c0d@d", "spa ce": ""}|url_encode|raw }} +{{ {}|url_encode|default("default") }} +{{ 'spéßi%le%c0d@dspa ce'|url_encode }} +--DATA-- +return [] +--EXPECT-- +foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce= +foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce= +default +sp%C3%A9%C3%9Fi%25le%25c0d%40dspa%20ce diff --git a/vendor/twig/twig/tests/Fixtures/filters/urlencode_deprecated.test b/vendor/twig/twig/tests/Fixtures/filters/urlencode_deprecated.test new file mode 100644 index 0000000000000000000000000000000000000000..38d726492aad5b0600e568997e442d9dfe98ad1d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/filters/urlencode_deprecated.test @@ -0,0 +1,16 @@ +--TEST-- +"url_encode" filter for PHP < 5.4 +--CONDITION-- +defined('PHP_QUERY_RFC3986') +--TEMPLATE-- +{{ {foo: "bar", number: 3, "spéßi%l": "e%c0d@d", "spa ce": ""}|url_encode }} +{{ {foo: "bar", number: 3, "spéßi%l": "e%c0d@d", "spa ce": ""}|url_encode|raw }} +{{ {}|url_encode|default("default") }} +{{ 'spéßi%le%c0d@dspa ce'|url_encode }} +--DATA-- +return [] +--EXPECT-- +foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce= +foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce= +default +sp%C3%A9%C3%9Fi%25le%25c0d%40dspa%20ce diff --git a/vendor/twig/twig/tests/Fixtures/functions/attribute.test b/vendor/twig/twig/tests/Fixtures/functions/attribute.test new file mode 100644 index 0000000000000000000000000000000000000000..4499ad4bdee3d8dd8c3f1c96b5dde9d4c6fa56d2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/attribute.test @@ -0,0 +1,18 @@ +--TEST-- +"attribute" function +--TEMPLATE-- +{{ attribute(obj, method) }} +{{ attribute(array, item) }} +{{ attribute(obj, "bar", ["a", "b"]) }} +{{ attribute(obj, "bar", arguments) }} +{{ attribute(obj, method) is defined ? 'ok' : 'ko' }} +{{ attribute(obj, nonmethod) is defined ? 'ok' : 'ko' }} +--DATA-- +return ['obj' => new Twig\Tests\TwigTestFoo(), 'method' => 'foo', 'array' => ['foo' => 'bar'], 'item' => 'foo', 'nonmethod' => 'xxx', 'arguments' => ['a', 'b']] +--EXPECT-- +foo +bar +bar_a-b +bar_a-b +ok +ko diff --git a/vendor/twig/twig/tests/Fixtures/functions/block.test b/vendor/twig/twig/tests/Fixtures/functions/block.test new file mode 100644 index 0000000000000000000000000000000000000000..1a4fd5492f859c8b46b9955c3b2fcf7c941a37b3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/block.test @@ -0,0 +1,12 @@ +--TEST-- +"block" function +--TEMPLATE-- +{% extends 'base.twig' %} +{% block bar %}BAR{% endblock %} +--TEMPLATE(base.twig)-- +{% block foo %}{{ block('bar') }}{% endblock %} +{% block bar %}BAR_BASE{% endblock %} +--DATA-- +return [] +--EXPECT-- +BARBAR diff --git a/vendor/twig/twig/tests/Fixtures/functions/block_with_template.test b/vendor/twig/twig/tests/Fixtures/functions/block_with_template.test new file mode 100644 index 0000000000000000000000000000000000000000..37cb7a4813fcf0d1ff2870d41730fd300a9bfebe --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/block_with_template.test @@ -0,0 +1,22 @@ +--TEST-- +"block" function with a template argument +--TEMPLATE-- +{{ block('foo', 'included.twig') }} +{{ block('foo', included_loaded) }} +{{ block('foo', included_loaded_internal) }} +{% set output = block('foo', 'included.twig') %} +{{ output }} +{% block foo %}NOT FOO{% endblock %} +--TEMPLATE(included.twig)-- +{% block foo %}FOO{% endblock %} +--DATA-- +return [ + 'included_loaded' => $twig->load('included.twig'), + 'included_loaded_internal' => $twig->load('included.twig'), +] +--EXPECT-- +FOO +FOO +FOO +FOO +NOT FOO diff --git a/vendor/twig/twig/tests/Fixtures/functions/block_without_name.test b/vendor/twig/twig/tests/Fixtures/functions/block_without_name.test new file mode 100644 index 0000000000000000000000000000000000000000..236df945109f46142e602e6fe814d6460df14378 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/block_without_name.test @@ -0,0 +1,12 @@ +--TEST-- +"block" function without arguments +--TEMPLATE-- +{% extends 'base.twig' %} +{% block bar %}BAR{% endblock %} +--TEMPLATE(base.twig)-- +{% block foo %}{{ block() }}{% endblock %} +{% block bar %}BAR_BASE{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: The "block" function takes one argument (the block name) in "base.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/functions/constant.test b/vendor/twig/twig/tests/Fixtures/functions/constant.test new file mode 100644 index 0000000000000000000000000000000000000000..fd6dd06111667f0391410cbaccb3e6252fb2c8d4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/constant.test @@ -0,0 +1,10 @@ +--TEST-- +"constant" function +--TEMPLATE-- +{{ constant('DATE_W3C') == expect ? 'true' : 'false' }} +{{ constant('ARRAY_AS_PROPS', object) }} +--DATA-- +return ['expect' => DATE_W3C, 'object' => new \ArrayObject(['hi'])] +--EXPECT-- +true +2 diff --git a/vendor/twig/twig/tests/Fixtures/functions/cycle.test b/vendor/twig/twig/tests/Fixtures/functions/cycle.test new file mode 100644 index 0000000000000000000000000000000000000000..0ac6dccd3aee48f744065e8bd03e7c65f3c1c092 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/cycle.test @@ -0,0 +1,16 @@ +--TEST-- +"cycle" function +--TEMPLATE-- +{% for i in 0..6 %} +{{ cycle(array1, i) }}-{{ cycle(array2, i) }} +{% endfor %} +--DATA-- +return ['array1' => ['odd', 'even'], 'array2' => ['apple', 'orange', 'citrus']] +--EXPECT-- +odd-apple +even-orange +odd-citrus +even-apple +odd-orange +even-citrus +odd-apple diff --git a/vendor/twig/twig/tests/Fixtures/functions/date.test b/vendor/twig/twig/tests/Fixtures/functions/date.test new file mode 100644 index 0000000000000000000000000000000000000000..c879da3cfd8d2ea67af0aa40c1fe0e0ee026670f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/date.test @@ -0,0 +1,27 @@ +--TEST-- +"date" function +--TEMPLATE-- +{{ date().format('r') == date('now').format('r') ? 'OK' : 'KO' }} +{{ date(date1) == date('2010-10-04 13:45') ? 'OK' : 'KO' }} +{{ date(date2) == date('2010-10-04 13:45') ? 'OK' : 'KO' }} +{{ date(date3) == date('2010-10-04 13:45') ? 'OK' : 'KO' }} +{{ date(date4) == date('2010-10-04 13:45') ? 'OK' : 'KO' }} +{{ date(date5) == date('1964-01-02 03:04') ? 'OK' : 'KO' }} +{{ date() > date('-1day') ? 'OK' : 'KO' }} +--DATA-- +date_default_timezone_set('UTC'); +return [ + 'date1' => mktime(13, 45, 0, 10, 4, 2010), + 'date2' => new \DateTime('2010-10-04 13:45'), + 'date3' => '2010-10-04 13:45', + 'date4' => 1286199900, // \DateTime::createFromFormat('Y-m-d H:i', '2010-10-04 13:45', new \DateTimeZone('UTC'))->getTimestamp() -- A unixtimestamp is always GMT + 'date5' => -189291360, // \DateTime::createFromFormat('Y-m-d H:i', '1964-01-02 03:04', new \DateTimeZone('UTC'))->getTimestamp(), +] +--EXPECT-- +OK +OK +OK +OK +OK +OK +OK diff --git a/vendor/twig/twig/tests/Fixtures/functions/date_namedargs.test b/vendor/twig/twig/tests/Fixtures/functions/date_namedargs.test new file mode 100644 index 0000000000000000000000000000000000000000..11f60ee8bf2ee393960132a5d99ea8cfcc9269f0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/date_namedargs.test @@ -0,0 +1,11 @@ +--TEST-- +"date" function +--TEMPLATE-- +{{ date(date, "America/New_York")|date('d/m/Y H:i:s P', false) }} +{{ date(timezone="America/New_York", date=date)|date('d/m/Y H:i:s P', false) }} +--DATA-- +date_default_timezone_set('UTC'); +return ['date' => mktime(13, 45, 0, 10, 4, 2010)] +--EXPECT-- +04/10/2010 09:45:00 -04:00 +04/10/2010 09:45:00 -04:00 diff --git a/vendor/twig/twig/tests/Fixtures/functions/dump.test b/vendor/twig/twig/tests/Fixtures/functions/dump.test new file mode 100644 index 0000000000000000000000000000000000000000..691a3abea9bdb16de4611222463e628f05e370ab --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/dump.test @@ -0,0 +1,16 @@ +--TEST-- +"dump" function +--CONDITION-- +!extension_loaded('xdebug') +--TEMPLATE-- +{{ dump('foo') }} +{{ dump('foo', 'bar') }} +--DATA-- +return ['foo' => 'foo', 'bar' => 'bar'] +--CONFIG-- +return ['debug' => true, 'autoescape' => false] +--EXPECT-- +string(3) "foo" + +string(3) "foo" +string(3) "bar" diff --git a/vendor/twig/twig/tests/Fixtures/functions/dump_array.test b/vendor/twig/twig/tests/Fixtures/functions/dump_array.test new file mode 100644 index 0000000000000000000000000000000000000000..5fd9383cd6ad44683039940a8bd5e7306bc0ccaf --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/dump_array.test @@ -0,0 +1,19 @@ +--TEST-- +"dump" function, xdebug is not loaded or xdebug <2.2-dev is loaded +--CONDITION-- +!extension_loaded('xdebug') || (($r = new \ReflectionExtension('xdebug')) && version_compare($r->getVersion(), '2.2-dev', '<')) +--TEMPLATE-- +{{ dump() }} +--DATA-- +return ['foo' => 'foo', 'bar' => 'bar'] +--CONFIG-- +return ['debug' => true, 'autoescape' => false] +--EXPECT-- +array(3) { + ["foo"]=> + string(3) "foo" + ["bar"]=> + string(3) "bar" + ["global"]=> + string(6) "global" +} diff --git a/vendor/twig/twig/tests/Fixtures/functions/dynamic_function.test b/vendor/twig/twig/tests/Fixtures/functions/dynamic_function.test new file mode 100644 index 0000000000000000000000000000000000000000..c7b3539c4026a1561affacf871637c8ef4fc60cf --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/dynamic_function.test @@ -0,0 +1,10 @@ +--TEST-- +dynamic function +--TEMPLATE-- +{{ foo_path('bar') }} +{{ a_foo_b_bar('bar') }} +--DATA-- +return [] +--EXPECT-- +foo/bar +a/b/bar diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/assignment.test b/vendor/twig/twig/tests/Fixtures/functions/include/assignment.test new file mode 100644 index 0000000000000000000000000000000000000000..c9ce8123feae7288f39daf4c8da69dad62f41a7a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/assignment.test @@ -0,0 +1,13 @@ +--TEST-- +"include" function +--TEMPLATE-- +{% set tmp = include("foo.twig") %} + +FOO{{ tmp }}BAR +--TEMPLATE(foo.twig)-- +FOOBAR +--DATA-- +return [] +--EXPECT-- +FOO +FOOBARBAR diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/autoescaping.test b/vendor/twig/twig/tests/Fixtures/functions/include/autoescaping.test new file mode 100644 index 0000000000000000000000000000000000000000..a3666261f3953aef38c96e9a628c3a57506b5efb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/autoescaping.test @@ -0,0 +1,10 @@ +--TEST-- +"include" function is safe for auto-escaping +--TEMPLATE-- +{{ include("foo.twig") }} +--TEMPLATE(foo.twig)-- +<p>Test</p> +--DATA-- +return [] +--EXPECT-- +<p>Test</p> diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/basic.test b/vendor/twig/twig/tests/Fixtures/functions/include/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..f90983c02f3901f0deb0caa12e3502e0e8f60d93 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/basic.test @@ -0,0 +1,17 @@ +--TEST-- +"include" function +--TEMPLATE-- +FOO +{{ include("foo.twig") }} + +BAR +--TEMPLATE(foo.twig)-- +FOOBAR +--DATA-- +return [] +--EXPECT-- +FOO + +FOOBAR + +BAR diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/expression.test b/vendor/twig/twig/tests/Fixtures/functions/include/expression.test new file mode 100644 index 0000000000000000000000000000000000000000..c6d3d1c5331e6fb49dd0a75f8cca49bb56092d55 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/expression.test @@ -0,0 +1,17 @@ +--TEST-- +"include" function allows expressions for the template to include +--TEMPLATE-- +FOO +{{ include(foo) }} + +BAR +--TEMPLATE(foo.twig)-- +FOOBAR +--DATA-- +return ['foo' => 'foo.twig'] +--EXPECT-- +FOO + +FOOBAR + +BAR diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/ignore_missing.test b/vendor/twig/twig/tests/Fixtures/functions/include/ignore_missing.test new file mode 100644 index 0000000000000000000000000000000000000000..c05b43e140315a123d36f761f1aeea1fa394542f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/ignore_missing.test @@ -0,0 +1,10 @@ +--TEST-- +"include" function +--TEMPLATE-- +{{ include(["foo.twig", "bar.twig"], ignore_missing = true) }} +{{ include("foo.twig", ignore_missing = true) }} +{{ include("foo.twig", ignore_missing = true, variables = {}) }} +{{ include("foo.twig", ignore_missing = true, variables = {}, with_context = true) }} +--DATA-- +return [] +--EXPECT-- diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/ignore_missing_exists.test b/vendor/twig/twig/tests/Fixtures/functions/include/ignore_missing_exists.test new file mode 100644 index 0000000000000000000000000000000000000000..fc2d211ad8614aaba958767138bd275931f7f5e1 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/ignore_missing_exists.test @@ -0,0 +1,11 @@ +--TEST-- +"include" function +--TEMPLATE-- +{{ include("included.twig", ignore_missing = true) }} +NOT DISPLAYED +--TEMPLATE(included.twig)-- +{{ include("DOES NOT EXIST") }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "DOES NOT EXIST" is not defined in "included.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/include_missing_extends.test b/vendor/twig/twig/tests/Fixtures/functions/include/include_missing_extends.test new file mode 100644 index 0000000000000000000000000000000000000000..810ae8248000c20fc6a6a6bac58512eadfdecf70 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/include_missing_extends.test @@ -0,0 +1,13 @@ +--TEST-- +"include" function +--TEMPLATE-- +{{ include(['bad.twig', 'good.twig'], ignore_missing = true) }} +NOT DISPLAYED +--TEMPLATE(bad.twig)-- +{% extends 'DOES NOT EXIST' %} +--TEMPLATE(good.twig)-- +NOT DISPLAYED +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "DOES NOT EXIST" is not defined in "bad.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/missing.test b/vendor/twig/twig/tests/Fixtures/functions/include/missing.test new file mode 100644 index 0000000000000000000000000000000000000000..1d50f7ac2feed6ff24da39d443758007ad28fd27 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/missing.test @@ -0,0 +1,8 @@ +--TEST-- +"include" function +--TEMPLATE-- +{{ include("foo.twig") }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "foo.twig" is not defined in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/missing_nested.test b/vendor/twig/twig/tests/Fixtures/functions/include/missing_nested.test new file mode 100644 index 0000000000000000000000000000000000000000..9ae8c9ee75935298bf77046f3e37eebe7a6adc07 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/missing_nested.test @@ -0,0 +1,16 @@ +--TEST-- +"include" function +--TEMPLATE-- +{% extends "base.twig" %} + +{% block content %} + {{ parent() }} +{% endblock %} +--TEMPLATE(base.twig)-- +{% block content %} + {{ include("foo.twig") }} +{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "foo.twig" is not defined in "base.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/sandbox.test b/vendor/twig/twig/tests/Fixtures/functions/include/sandbox.test new file mode 100644 index 0000000000000000000000000000000000000000..ebfdb1eb8fff038b42071ce9e2a6bcedae1f6327 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/sandbox.test @@ -0,0 +1,13 @@ +--TEST-- +"include" tag sandboxed +--TEMPLATE-- +{{ include("foo.twig", sandboxed = true) }} +--TEMPLATE(foo.twig)-- + + +{{ foo|e }} +{{ foo|e }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Sandbox\SecurityNotAllowedFilterError: Filter "e" is not allowed in "foo.twig" at line 4. diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/sandbox_disabling.test b/vendor/twig/twig/tests/Fixtures/functions/include/sandbox_disabling.test new file mode 100644 index 0000000000000000000000000000000000000000..1206b67fe319bcb593a097a45329d00529ae8765 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/sandbox_disabling.test @@ -0,0 +1,16 @@ +--TEST-- +"include" tag sandboxed +--TEMPLATE-- +{{ include("foo.twig", sandboxed = true) }} +{{ include("bar.twig") }} +--TEMPLATE(foo.twig)-- +foo +--TEMPLATE(bar.twig)-- +{{ foo|e }} +--DATA-- +return ['foo' => 'bar<br />'] +--EXPECT-- +foo + + +bar<br /> diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/sandbox_disabling_ignore_missing.test b/vendor/twig/twig/tests/Fixtures/functions/include/sandbox_disabling_ignore_missing.test new file mode 100644 index 0000000000000000000000000000000000000000..c5be0088af646fee6f1489f9bd952b6ac9ca5fd0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/sandbox_disabling_ignore_missing.test @@ -0,0 +1,13 @@ +--TEST-- +"include" tag sandboxed +--TEMPLATE-- +{{ include("unknown.twig", sandboxed = true, ignore_missing = true) }} +{{ include("bar.twig") }} +--TEMPLATE(bar.twig)-- +{{ foo|e }} +--DATA-- +return ['foo' => 'bar<br />'] +--EXPECT-- + + +bar<br /> diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/template_instance.test b/vendor/twig/twig/tests/Fixtures/functions/include/template_instance.test new file mode 100644 index 0000000000000000000000000000000000000000..4c8b450835c1ef6ba2f6009612bcd89afc00a9fd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/template_instance.test @@ -0,0 +1,10 @@ +--TEST-- +"include" function accepts Twig_Template instance +--TEMPLATE-- +{{ include(foo) }} FOO +--TEMPLATE(foo.twig)-- +BAR +--DATA-- +return ['foo' => $twig->load('foo.twig')] +--EXPECT-- +BAR FOO diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/templates_as_array.test b/vendor/twig/twig/tests/Fixtures/functions/include/templates_as_array.test new file mode 100644 index 0000000000000000000000000000000000000000..21e5bb2efd20dfa6793d20e13dbebfc5be48f4bc --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/templates_as_array.test @@ -0,0 +1,12 @@ +--TEST-- +"include" function +--TEMPLATE-- +{{ include(["foo.twig", "bar.twig"]) }} +{{- include(["bar.twig", "foo.twig"]) }} +--TEMPLATE(foo.twig)-- +foo +--DATA-- +return [] +--EXPECT-- +foo +foo diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/with_context.test b/vendor/twig/twig/tests/Fixtures/functions/include/with_context.test new file mode 100644 index 0000000000000000000000000000000000000000..46ac8c79bdc28854c5282b631f9751c2ffc2ea77 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/with_context.test @@ -0,0 +1,16 @@ +--TEST-- +"include" function accept variables and with_context +--TEMPLATE-- +{{ include("foo.twig") }} +{{- include("foo.twig", with_context = false) }} +{{- include("foo.twig", {'foo1': 'bar'}) }} +{{- include("foo.twig", {'foo1': 'bar'}, with_context = false) }} +--TEMPLATE(foo.twig)-- +{% for k, v in _context %}{{ k }},{% endfor %} +--DATA-- +return ['foo' => 'bar'] +--EXPECT-- +foo,global,_parent, +global,_parent, +foo,global,foo1,_parent, +foo1,global,_parent, diff --git a/vendor/twig/twig/tests/Fixtures/functions/include/with_variables.test b/vendor/twig/twig/tests/Fixtures/functions/include/with_variables.test new file mode 100644 index 0000000000000000000000000000000000000000..0ed98fed02f664d305732a97a67a574c0718f575 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include/with_variables.test @@ -0,0 +1,12 @@ +--TEST-- +"include" function accept variables +--TEMPLATE-- +{{ include("foo.twig", {'foo': 'bar'}) }} +{{- include("foo.twig", vars) }} +--TEMPLATE(foo.twig)-- +{{ foo }} +--DATA-- +return ['vars' => ['foo' => 'bar']] +--EXPECT-- +bar +bar diff --git a/vendor/twig/twig/tests/Fixtures/functions/include_template_from_string.test b/vendor/twig/twig/tests/Fixtures/functions/include_template_from_string.test new file mode 100644 index 0000000000000000000000000000000000000000..8d9ba60ce6661d7d7a448430926ff883e0b4a4a4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/include_template_from_string.test @@ -0,0 +1,11 @@ +--TEST-- +"template_from_string" function works in an "include" +--TEMPLATE-- +{% set embed = '{% embed "embed.twig" %}{% endembed %}' %} +{{ include(template_from_string(embed)) }} +--TEMPLATE(embed.twig)-- +Cool +--DATA-- +return [] +--EXPECT-- +Cool diff --git a/vendor/twig/twig/tests/Fixtures/functions/magic_call.test b/vendor/twig/twig/tests/Fixtures/functions/magic_call.test new file mode 100644 index 0000000000000000000000000000000000000000..4dd5e27042b0455033a4f913dba71a0cf95baec7 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/magic_call.test @@ -0,0 +1,8 @@ +--TEST-- +__call calls +--TEMPLATE-- +{{ 'foo'|magic_call }} +--DATA-- +return [] +--EXPECT-- +magic_foo diff --git a/vendor/twig/twig/tests/Fixtures/functions/magic_call53.test b/vendor/twig/twig/tests/Fixtures/functions/magic_call53.test new file mode 100644 index 0000000000000000000000000000000000000000..a7c65bf6765121e927b768a826e277cee546d0e4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/magic_call53.test @@ -0,0 +1,12 @@ +--TEST-- +__staticCall calls +--CONDITION-- +version_compare(phpversion(), '5.3.0', '>=') +--TEMPLATE-- +{{ 'foo'|magic_call_string }} +{{ 'foo'|magic_call_array }} +--DATA-- +return [] +--EXPECT-- +static_magic_foo +static_magic_foo diff --git a/vendor/twig/twig/tests/Fixtures/functions/max.test b/vendor/twig/twig/tests/Fixtures/functions/max.test new file mode 100644 index 0000000000000000000000000000000000000000..6d2de000d5e323dabd52390b41ac1f7cec498b76 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/max.test @@ -0,0 +1,12 @@ +--TEST-- +"max" function +--TEMPLATE-- +{{ max([2, 1, 3, 5, 4]) }} +{{ max(2, 1, 3, 5, 4) }} +{{ max({2:"two", 1:"one", 3:"three", 5:"five", 4:"for"}) }} +--DATA-- +return [] +--EXPECT-- +5 +5 +two diff --git a/vendor/twig/twig/tests/Fixtures/functions/min.test b/vendor/twig/twig/tests/Fixtures/functions/min.test new file mode 100644 index 0000000000000000000000000000000000000000..1fe5446b7ca6c1531fb1dbd395d5e43efe90b2df --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/min.test @@ -0,0 +1,12 @@ +--TEST-- +"min" function +--TEMPLATE-- +{{ min(2, 1, 3, 5, 4) }} +{{ min([2, 1, 3, 5, 4]) }} +{{ min({2:"two", 1:"one", 3:"three", 5:"five", 4:"for"}) }} +--DATA-- +return [] +--EXPECT-- +1 +1 +five diff --git a/vendor/twig/twig/tests/Fixtures/functions/range.test b/vendor/twig/twig/tests/Fixtures/functions/range.test new file mode 100644 index 0000000000000000000000000000000000000000..2927333b97fca0b3818bc3d3783f5d533ec7df43 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/range.test @@ -0,0 +1,8 @@ +--TEST-- +"range" function +--TEMPLATE-- +{{ range(low=0+1, high=10+0, step=2)|join(',') }} +--DATA-- +return [] +--EXPECT-- +1,3,5,7,9 diff --git a/vendor/twig/twig/tests/Fixtures/functions/recursive_block_with_inheritance.test b/vendor/twig/twig/tests/Fixtures/functions/recursive_block_with_inheritance.test new file mode 100644 index 0000000000000000000000000000000000000000..1c3fffb5dabb72d36f8ae629b95cef75b89dcbc3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/recursive_block_with_inheritance.test @@ -0,0 +1,21 @@ +--TEST-- +"block" function recursively called in a parent template +--TEMPLATE-- +{% extends "ordered_menu.twig" %} +{% block label %}"{{ parent() }}"{% endblock %} +{% block list %}{% set class = 'b' %}{{ parent() }}{% endblock %} +--TEMPLATE(ordered_menu.twig)-- +{% extends "menu.twig" %} +{% block list %}{% set class = class|default('a') %}<ol class="{{ class }}">{{ block('children') }}</ol>{% endblock %} +--TEMPLATE(menu.twig)-- +{% extends "base.twig" %} +{% block list %}<ul>{{ block('children') }}</ul>{% endblock %} +{% block children %}{% set currentItem = item %}{% for item in currentItem %}{{ block('item') }}{% endfor %}{% set item = currentItem %}{% endblock %} +{% block item %}<li>{% if item is not iterable %}{{ block('label') }}{% else %}{{ block('list') }}{% endif %}</li>{% endblock %} +{% block label %}{{ item }}{% endblock %} +--TEMPLATE(base.twig)-- +{{ block('list') }} +--DATA-- +return ['item' => ['1', '2', ['3.1', ['3.2.1', '3.2.2'], '3.4']]] +--EXPECT-- +<ol class="b"><li>"1"</li><li>"2"</li><li><ol class="b"><li>"3.1"</li><li><ol class="b"><li>"3.2.1"</li><li>"3.2.2"</li></ol></li><li>"3.4"</li></ol></li></ol> diff --git a/vendor/twig/twig/tests/Fixtures/functions/source.test b/vendor/twig/twig/tests/Fixtures/functions/source.test new file mode 100644 index 0000000000000000000000000000000000000000..b691ce7bcd9ee45fd067fdb934b0ede31e41df10 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/source.test @@ -0,0 +1,17 @@ +--TEST-- +"source" function +--TEMPLATE-- +FOO +{{ source("foo.twig") }} + +BAR +--TEMPLATE(foo.twig)-- +{{ foo }}<br /> +--DATA-- +return [] +--EXPECT-- +FOO + +{{ foo }}<br /> + +BAR diff --git a/vendor/twig/twig/tests/Fixtures/functions/special_chars.test b/vendor/twig/twig/tests/Fixtures/functions/special_chars.test new file mode 100644 index 0000000000000000000000000000000000000000..9c9e249455ea8126dd1ad1142ce6cc8386e2ff44 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/special_chars.test @@ -0,0 +1,8 @@ +--TEST-- +"§" custom function +--TEMPLATE-- +{{ §('foo') }} +--DATA-- +return [] +--EXPECT-- +§foo§ diff --git a/vendor/twig/twig/tests/Fixtures/functions/static_calls.test b/vendor/twig/twig/tests/Fixtures/functions/static_calls.test new file mode 100644 index 0000000000000000000000000000000000000000..dd13abb0bc56901af37fefa3148143d4d57e5454 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/static_calls.test @@ -0,0 +1,10 @@ +--TEST-- +Functions as static method calls +--TEMPLATE-- +{{ static_call_string('foo') }} +{{ static_call_array('foo') }} +--DATA-- +return ['foo' => 'foo'] +--EXPECT-- +*foo* +*foo* diff --git a/vendor/twig/twig/tests/Fixtures/functions/template_from_string.test b/vendor/twig/twig/tests/Fixtures/functions/template_from_string.test new file mode 100644 index 0000000000000000000000000000000000000000..33b0e40d7c31a98d96effd8a7ee4c69f7ea8b13e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/template_from_string.test @@ -0,0 +1,15 @@ +--TEST-- +"template_from_string" function +--TEMPLATE-- +{% include template_from_string(template) %} + +{% include template_from_string("Hello {{ name }}") %} +{% include template_from_string('{% extends "parent.twig" %}{% block content %}Hello {{ name }}{% endblock %}') %} +--TEMPLATE(parent.twig)-- +{% block content %}{% endblock %} +--DATA-- +return ['name' => 'Fabien', 'template' => "Hello {{ name }}"] +--EXPECT-- +Hello Fabien +Hello Fabien +Hello Fabien diff --git a/vendor/twig/twig/tests/Fixtures/functions/template_from_string_error.test b/vendor/twig/twig/tests/Fixtures/functions/template_from_string_error.test new file mode 100644 index 0000000000000000000000000000000000000000..900d238bd2bc8f8a584a3ea9e297c0fe6d8d3ad5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/functions/template_from_string_error.test @@ -0,0 +1,8 @@ +--TEST-- +"template_from_string" function +--TEMPLATE-- +{% include template_from_string("{{ not a Twig template ", "foo.twig") %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unclosed "variable" in "foo.twig (string template 4900163d56b1af4b704c6b0afee7f98ba53418ce7a93d37a3af1882735baf9cd)" at line 1. diff --git a/vendor/twig/twig/tests/Fixtures/macros/default_values.test b/vendor/twig/twig/tests/Fixtures/macros/default_values.test new file mode 100644 index 0000000000000000000000000000000000000000..18bba524ad94134dc644155c4d1d0a96851c5061 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/default_values.test @@ -0,0 +1,16 @@ +--TEST-- +macro +--TEMPLATE-- +{% from _self import test %} + +{% macro test(a, b = 'bar') -%} +{{ a }}{{ b }} +{%- endmacro %} + +{{ test('foo') }} +{{ test('bar', 'foo') }} +--DATA-- +return [] +--EXPECT-- +foobar +barfoo diff --git a/vendor/twig/twig/tests/Fixtures/macros/nested_calls.test b/vendor/twig/twig/tests/Fixtures/macros/nested_calls.test new file mode 100644 index 0000000000000000000000000000000000000000..4577286d0cbfb87c8a7538904d8af1769c3b36a8 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/nested_calls.test @@ -0,0 +1,18 @@ +--TEST-- +macro +--TEMPLATE-- +{% import _self as macros %} + +{% macro foo(data) %} + {{ data }} +{% endmacro %} + +{% macro bar() %} + <br /> +{% endmacro %} + +{{ macros.foo(macros.bar()) }} +--DATA-- +return [] +--EXPECT-- +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/macros/reserved_variables.test b/vendor/twig/twig/tests/Fixtures/macros/reserved_variables.test new file mode 100644 index 0000000000000000000000000000000000000000..05dd9213008a5fa0772dd2f14134e7e115a22ece --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/reserved_variables.test @@ -0,0 +1,14 @@ +--TEST-- +macro +--TEMPLATE-- +{% from _self import test %} + +{% macro test(this) -%} + {{ this }} +{%- endmacro %} + +{{ test(this) }} +--DATA-- +return ['this' => 'foo'] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/macros/simple.test b/vendor/twig/twig/tests/Fixtures/macros/simple.test new file mode 100644 index 0000000000000000000000000000000000000000..8fc6b477fb2d4348ee1bb4bc3f3bd37a5de1adca --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/simple.test @@ -0,0 +1,22 @@ +--TEST-- +macro +--TEMPLATE-- +{% import _self as test %} +{% from _self import test %} + +{% macro test(a, b) -%} + {{ a|default('a') }}<br /> + {{- b|default('b') }}<br /> +{%- endmacro %} + +{{ test.test() }} +{{ test() }} +{{ test.test(1, "c") }} +{{ test(1, "c") }} +--DATA-- +return [] +--EXPECT-- +a<br />b<br /> +a<br />b<br /> +1<br />c<br /> +1<br />c<br /> diff --git a/vendor/twig/twig/tests/Fixtures/macros/varargs.test b/vendor/twig/twig/tests/Fixtures/macros/varargs.test new file mode 100644 index 0000000000000000000000000000000000000000..dd4b5c9f4710f2d172322168707979693bac039f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/varargs.test @@ -0,0 +1,21 @@ +--TEST-- +macro with arbitrary arguments +--TEMPLATE-- +{% from _self import test1, test2 %} + +{% macro test1(var) %} + {{- var }}: {{ varargs|join(", ") }} +{% endmacro %} + +{% macro test2() %} + {{- varargs|join(", ") }} +{% endmacro %} + +{{ test1("foo", "bar", "foobar") }} +{{ test2("foo", "bar", "foobar") }} +--DATA-- +return [] +--EXPECT-- +foo: bar, foobar + +foo, bar, foobar diff --git a/vendor/twig/twig/tests/Fixtures/macros/varargs_argument.test b/vendor/twig/twig/tests/Fixtures/macros/varargs_argument.test new file mode 100644 index 0000000000000000000000000000000000000000..1ad368bf1e1b30d329656292140be931a75fac41 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/varargs_argument.test @@ -0,0 +1,7 @@ +--TEST-- +macro with varargs argument +--TEMPLATE-- +{% macro test(varargs) %} +{% endmacro %} +--EXCEPTION-- +Twig\Error\SyntaxError: The argument "varargs" in macro "test" cannot be defined because the variable "varargs" is reserved for arbitrary arguments in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/macros/with_filters.test b/vendor/twig/twig/tests/Fixtures/macros/with_filters.test new file mode 100644 index 0000000000000000000000000000000000000000..96064ba0123b9c40f9a51e8819d31f503a8f82b4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/macros/with_filters.test @@ -0,0 +1,14 @@ +--TEST-- +macro with a filter +--TEMPLATE-- +{% import _self as test %} + +{% macro test() %} + {% filter escape %}foo<br />{% endfilter %} +{% endmacro %} + +{{ test.test() }} +--DATA-- +return [] +--EXPECT-- +foo<br /> diff --git a/vendor/twig/twig/tests/Fixtures/regression/block_names_unicity.test b/vendor/twig/twig/tests/Fixtures/regression/block_names_unicity.test new file mode 100644 index 0000000000000000000000000000000000000000..df0747072430fd6b44ddc97defe77da41b9fdc2c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/block_names_unicity.test @@ -0,0 +1,19 @@ +--TEST-- +Block names are unique per template +--TEMPLATE-- +{% extends 'layout' %} +{% block content -%} + {% filter title -%} + second + {% endfilter %} +{% endblock %} +--TEMPLATE(layout)-- +{% filter title -%} + first +{% endfilter %} +{% block content %}{% endblock %} +--DATA-- +return [] +--EXPECT-- +First +Second diff --git a/vendor/twig/twig/tests/Fixtures/regression/combined_debug_info.test b/vendor/twig/twig/tests/Fixtures/regression/combined_debug_info.test new file mode 100644 index 0000000000000000000000000000000000000000..6426d2c1d858d94b68092e529dd567dd3720c730 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/combined_debug_info.test @@ -0,0 +1,15 @@ +--TEST-- +Exception with bad line number +--TEMPLATE-- +{% block content %} + {{ foo }} + {{ include("foo") }} +{% endblock %} +index +--TEMPLATE(foo)-- +foo +{{ foo.bar }} +--DATA-- +return ['foo' => 'foo'] +--EXCEPTION-- +Twig\Error\RuntimeError: Impossible to access an attribute ("bar") on a string variable ("foo") in "foo" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/regression/empty_token.test b/vendor/twig/twig/tests/Fixtures/regression/empty_token.test new file mode 100644 index 0000000000000000000000000000000000000000..25bdc9e407c86c929ae79865d0036cf0e164c75e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/empty_token.test @@ -0,0 +1,8 @@ +--TEST-- +Twig outputs 0 nodes correctly +--TEMPLATE-- +{{ foo }}0{{ foo }} +--DATA-- +return ['foo' => 'foo'] +--EXPECT-- +foo0foo diff --git a/vendor/twig/twig/tests/Fixtures/regression/issue_1143.test b/vendor/twig/twig/tests/Fixtures/regression/issue_1143.test new file mode 100644 index 0000000000000000000000000000000000000000..e2ab950e18353e45d656ff5dc7bdb3e80bf3c424 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/issue_1143.test @@ -0,0 +1,23 @@ +--TEST-- +error in twig extension +--TEMPLATE-- +{{ object.region is not null ? object.regionChoices[object.region] }} +--DATA-- +class House +{ + const REGION_S = 1; + const REGION_P = 2; + + public static $regionChoices = [self::REGION_S => 'house.region.s', self::REGION_P => 'house.region.p']; + + public function getRegionChoices() + { + return self::$regionChoices; + } +} + +$object = new House(); +$object->region = 1; +return ['object' => $object] +--EXPECT-- +house.region.s diff --git a/vendor/twig/twig/tests/Fixtures/regression/multi_word_tests.test b/vendor/twig/twig/tests/Fixtures/regression/multi_word_tests.test new file mode 100644 index 0000000000000000000000000000000000000000..96ca5517a144ff79a17e2b3400a67fc4f03a24a9 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/multi_word_tests.test @@ -0,0 +1,10 @@ +--TEST-- +Twig allows multi-word tests without a custom node class +--TEMPLATE-- +{{ 'foo' is multi word ? 'yes' : 'no' }} +{{ 'foo bar' is multi word ? 'yes' : 'no' }} +--DATA-- +return [] +--EXPECT-- +no +yes diff --git a/vendor/twig/twig/tests/Fixtures/regression/simple_xml_element.test b/vendor/twig/twig/tests/Fixtures/regression/simple_xml_element.test new file mode 100644 index 0000000000000000000000000000000000000000..b6e62c8d7e15e67724ebcc28b3850119d6ca99a3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/simple_xml_element.test @@ -0,0 +1,19 @@ +--TEST-- +Twig is able to deal with SimpleXMLElement instances as variables +--CONDITION-- +version_compare(phpversion(), '5.3.0', '>=') +--TEMPLATE-- +Hello '{{ images.image.0.group }}'! +{{ images.image.0.group.attributes.myattr }} +{{ images.children().image.count() }} +{% for image in images %} + - {{ image.group }} +{% endfor %} +--DATA-- +return ['images' => new \SimpleXMLElement('<images><image><group myattr="example">foo</group></image><image><group>bar</group></image></images>')] +--EXPECT-- +Hello 'foo'! +example +2 + - foo + - bar diff --git a/vendor/twig/twig/tests/Fixtures/regression/strings_like_numbers.test b/vendor/twig/twig/tests/Fixtures/regression/strings_like_numbers.test new file mode 100644 index 0000000000000000000000000000000000000000..62fe884858740eba24d41661de3486f14538a23a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/regression/strings_like_numbers.test @@ -0,0 +1,8 @@ +--TEST-- +Twig does not confuse strings with integers in getAttribute() +--TEMPLATE-- +{{ hash['2e2'] }} +--DATA-- +return ['hash' => ['2e2' => 'works']] +--EXPECT-- +works diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/basic.test b/vendor/twig/twig/tests/Fixtures/tags/apply/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..4848ee0259795af952e1a8ca76e78678e0fd80eb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/basic.test @@ -0,0 +1,10 @@ +--TEST-- +"apply" tag applies a filter on its children +--TEMPLATE-- +{% apply upper %} +Some text with a {{ var }} +{% endapply %} +--DATA-- +return ['var' => 'var'] +--EXPECT-- +SOME TEXT WITH A VAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/json_encode.test b/vendor/twig/twig/tests/Fixtures/tags/apply/json_encode.test new file mode 100644 index 0000000000000000000000000000000000000000..8a590b44ac49ba85930c35e09f73999a010bbd11 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/json_encode.test @@ -0,0 +1,8 @@ +--TEST-- +"apply" tag applies a filter on its children +--TEMPLATE-- +{% apply json_encode|raw %}test{% endapply %} +--DATA-- +return [] +--EXPECT-- +"test" diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/multiple.test b/vendor/twig/twig/tests/Fixtures/tags/apply/multiple.test new file mode 100644 index 0000000000000000000000000000000000000000..e16998a52607fd9f97ef7f169850e27feb5227a0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/multiple.test @@ -0,0 +1,10 @@ +--TEST-- +"apply" tags accept multiple chained filters +--TEMPLATE-- +{% apply lower|title %} + {{ var }} +{% endapply %} +--DATA-- +return ['var' => 'VAR'] +--EXPECT-- + Var diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/nested.test b/vendor/twig/twig/tests/Fixtures/tags/apply/nested.test new file mode 100644 index 0000000000000000000000000000000000000000..b64a6914c535f181f521956e90a769f9300b20d3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/nested.test @@ -0,0 +1,16 @@ +--TEST-- +"apply" tags can be nested at will +--TEMPLATE-- +{% apply lower|title %} + {{ var }} + {% apply upper %} + {{ var }} + {% endapply %} + {{ var }} +{% endapply %} +--DATA-- +return ['var' => 'var'] +--EXPECT-- + Var + Var + Var diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/scope.test b/vendor/twig/twig/tests/Fixtures/tags/apply/scope.test new file mode 100644 index 0000000000000000000000000000000000000000..a87ff9116ba93994179b1617cf331c780f8c909c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/scope.test @@ -0,0 +1,15 @@ +--TEST-- +"apply" tag does not create a new scope +--TEMPLATE-- +{% set foo = 'baz' %} +{% apply spaceless %} + {% set foo = 'foo' %} + {% set bar = 'bar' %} +{% endapply %} +{{ 'foo' == foo ? 'OK ' ~ foo : 'KO' }} +{{ 'bar' == bar ? 'OK ' ~ bar : 'KO' }} +--DATA-- +return [] +--EXPECT-- +OK foo +OK bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/with_for_tag.test b/vendor/twig/twig/tests/Fixtures/tags/apply/with_for_tag.test new file mode 100644 index 0000000000000000000000000000000000000000..4453880b596763c8d81253273a41eaa1aeee2775 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/with_for_tag.test @@ -0,0 +1,13 @@ +--TEST-- +"apply" tag applies the filter on "for" tags +--TEMPLATE-- +{% apply upper %} +{% for item in items %} +{{ item }} +{% endfor %} +{% endapply %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- +A +B diff --git a/vendor/twig/twig/tests/Fixtures/tags/apply/with_if_tag.test b/vendor/twig/twig/tests/Fixtures/tags/apply/with_if_tag.test new file mode 100644 index 0000000000000000000000000000000000000000..ca7a592cbaa5773b6eca8d3bd125c44aef962155 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/apply/with_if_tag.test @@ -0,0 +1,29 @@ +--TEST-- +"apply" tag applies the filter on "if" tags +--TEMPLATE-- +{% apply upper %} +{% if items %} +{{ items|join(', ') }} +{% endif %} + +{% if items.3 is defined %} +FOO +{% else %} +{{ items.1 }} +{% endif %} + +{% if items.3 is defined %} +FOO +{% elseif items.1 %} +{{ items.0 }} +{% endif %} + +{% endapply %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- +A, B + +B + +A diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/basic.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..5979725e38d6769695462823add2ee9ea74bb2cf --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/basic.test @@ -0,0 +1,26 @@ +--TEST-- +"autoescape" tag applies escaping on its children +--TEMPLATE-- +{% autoescape %} +{{ var }}<br /> +{% endautoescape %} +{% autoescape 'html' %} +{{ var }}<br /> +{% endautoescape %} +{% autoescape false %} +{{ var }}<br /> +{% endautoescape %} +{% autoescape true %} +{{ var }}<br /> +{% endautoescape %} +{% autoescape false %} +{{ var }}<br /> +{% endautoescape %} +--DATA-- +return ['var' => '<br />'] +--EXPECT-- +<br /><br /> +<br /><br /> +<br /><br /> +<br /><br /> +<br /><br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/blocks.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/blocks.test new file mode 100644 index 0000000000000000000000000000000000000000..292e1b4167cef9a545ba9d894b9a153a548b05df --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/blocks.test @@ -0,0 +1,12 @@ +--TEST-- +"autoescape" tag applies escaping on embedded blocks +--TEMPLATE-- +{% autoescape 'html' %} + {% block foo %} + {{ var }} + {% endblock %} +{% endautoescape %} +--DATA-- +return ['var' => '<br />'] +--EXPECT-- +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/double_escaping.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/double_escaping.test new file mode 100644 index 0000000000000000000000000000000000000000..1724b48787fcfdc979f3c5968b4154ade8c88611 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/double_escaping.test @@ -0,0 +1,10 @@ +--TEST-- +"autoescape" tag does not double-escape +--TEMPLATE-- +{% autoescape 'html' %} +{{ var|escape }} +{% endautoescape %} +--DATA-- +return ['var' => '<br />'] +--EXPECT-- +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/functions.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/functions.test new file mode 100644 index 0000000000000000000000000000000000000000..170e7074edece9534552efa295a80b56f6be41d3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/functions.test @@ -0,0 +1,83 @@ +--TEST-- +"autoescape" tag applies escaping after calling functions +--TEMPLATE-- + +autoescape false +{% autoescape false %} + +safe_br +{{ safe_br() }} + +unsafe_br +{{ unsafe_br() }} + +{% endautoescape %} + +autoescape 'html' +{% autoescape 'html' %} + +safe_br +{{ safe_br() }} + +unsafe_br +{{ unsafe_br() }} + +unsafe_br()|raw +{{ (unsafe_br())|raw }} + +safe_br()|escape +{{ (safe_br())|escape }} + +safe_br()|raw +{{ (safe_br())|raw }} + +unsafe_br()|escape +{{ (unsafe_br())|escape }} + +{% endautoescape %} + +autoescape js +{% autoescape 'js' %} + +safe_br +{{ safe_br() }} + +{% endautoescape %} +--DATA-- +return [] +--EXPECT-- + +autoescape false + +safe_br +<br /> + +unsafe_br +<br /> + + +autoescape 'html' + +safe_br +<br /> + +unsafe_br +<br /> + +unsafe_br()|raw +<br /> + +safe_br()|escape +<br /> + +safe_br()|raw +<br /> + +unsafe_br()|escape +<br /> + + +autoescape js + +safe_br +\u003Cbr\u0020\/\u003E diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/literal.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/literal.test new file mode 100644 index 0000000000000000000000000000000000000000..3d8d4f8fdd2598ba829beaf7358255a12504208a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/literal.test @@ -0,0 +1,87 @@ +--TEST-- +"autoescape" tag does not apply escaping on literals +--TEMPLATE-- +{% autoescape 'html' %} + +1. Simple literal +{{ "<br />" }} + +2. Conditional expression with only literals +{{ true ? "<br />" : "<br>" }} + +3. Conditional expression with a variable +{{ true ? "<br />" : someVar }} +{{ false ? "<br />" : someVar }} +{{ true ? someVar : "<br />" }} +{{ false ? someVar : "<br />" }} + +4. Nested conditionals with only literals +{{ true ? (true ? "<br />" : "<br>") : "\n" }} + +5. Nested conditionals with a variable +{{ true ? (true ? "<br />" : someVar) : "\n" }} +{{ true ? (false ? "<br />" : someVar) : "\n" }} +{{ true ? (true ? someVar : "<br />") : "\n" }} +{{ true ? (false ? someVar : "<br />") : "\n" }} +{{ false ? "\n" : (true ? someVar : "<br />") }} +{{ false ? "\n" : (false ? someVar : "<br />") }} + +6. Nested conditionals with a variable marked safe +{{ true ? (true ? "<br />" : someVar|raw) : "\n" }} +{{ true ? (false ? "<br />" : someVar|raw) : "\n" }} +{{ true ? (true ? someVar|raw : "<br />") : "\n" }} +{{ true ? (false ? someVar|raw : "<br />") : "\n" }} +{{ false ? "\n" : (true ? someVar|raw : "<br />") }} +{{ false ? "\n" : (false ? someVar|raw : "<br />") }} + +7. Without then clause +{{ "<br />" ?: someVar }} +{{ someFalseVar ?: "<br />" }} + +8. NullCoalesce +{{ aaaa ?? "<br />" }} +{{ "<br />" ?? someVar }} + +{% endautoescape %} +--DATA-- +return ['someVar' => '<br />', 'someFalseVar' => false] +--EXPECT-- + +1. Simple literal +<br /> + +2. Conditional expression with only literals +<br /> + +3. Conditional expression with a variable +<br /> +<br /> +<br /> +<br /> + +4. Nested conditionals with only literals +<br /> + +5. Nested conditionals with a variable +<br /> +<br /> +<br /> +<br /> +<br /> +<br /> + +6. Nested conditionals with a variable marked safe +<br /> +<br /> +<br /> +<br /> +<br /> +<br /> + +7. Without then clause +<br /> +<br /> + +8. NullCoalesce +<br /> +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/nested.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/nested.test new file mode 100644 index 0000000000000000000000000000000000000000..0d88c7e3a2e4779247e27882e7e8e26b22d3ad4e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/nested.test @@ -0,0 +1,26 @@ +--TEST-- +"autoescape" tags can be nested at will +--TEMPLATE-- +{{ var }} +{% autoescape 'html' %} + {{ var }} + {% autoescape false %} + {{ var }} + {% autoescape 'html' %} + {{ var }} + {% endautoescape %} + {{ var }} + {% endautoescape %} + {{ var }} +{% endautoescape %} +{{ var }} +--DATA-- +return ['var' => '<br />'] +--EXPECT-- +<br /> + <br /> + <br /> + <br /> + <br /> + <br /> +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/objects.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/objects.test new file mode 100644 index 0000000000000000000000000000000000000000..9d959b22b4fa5018adcc6eda178812eb90c22b1d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/objects.test @@ -0,0 +1,26 @@ +--TEST-- +"autoescape" tag applies escaping to object method calls +--TEMPLATE-- +{% autoescape 'html' %} +{{ user.name }} +{{ user.name|lower }} +{{ user }} +{% endautoescape %} +--DATA-- +class UserForAutoEscapeTest +{ + public function getName() + { + return 'Fabien<br />'; + } + + public function __toString() + { + return 'Fabien<br />'; + } +} +return ['user' => new UserForAutoEscapeTest()] +--EXPECT-- +Fabien<br /> +fabien<br /> +Fabien<br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/raw.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/raw.test new file mode 100644 index 0000000000000000000000000000000000000000..187327c8017be5fcaa9cebc00cb447b9e5dff126 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/raw.test @@ -0,0 +1,10 @@ +--TEST-- +"autoescape" tag does not escape when raw is used as a filter +--TEMPLATE-- +{% autoescape 'html' %} +{{ var|raw }} +{% endautoescape %} +--DATA-- +return ['var' => '<br />'] +--EXPECT-- +<br /> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/strategy.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/strategy.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..289f2b1743327495d75982b0a084898f507df0f9 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/strategy.legacy.test @@ -0,0 +1,11 @@ +--TEST-- +"autoescape" tag accepts an escaping strategy +--TEMPLATE-- +{% autoescape true js %}{{ var }}{% endautoescape %} + +{% autoescape true html %}{{ var }}{% endautoescape %} +--DATA-- +return ['var' => '<br />"'] +--EXPECT-- +\u003Cbr\u0020\/\u003E\u0022 +<br />" diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/strategy.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/strategy.test new file mode 100644 index 0000000000000000000000000000000000000000..9a0137ee27ec67f8fcddafa411780aca1cee10f2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/strategy.test @@ -0,0 +1,11 @@ +--TEST-- +"autoescape" tag accepts an escaping strategy +--TEMPLATE-- +{% autoescape 'js' %}{{ var }}{% endautoescape %} + +{% autoescape 'html' %}{{ var }}{% endautoescape %} +--DATA-- +return ['var' => '<br />"'] +--EXPECT-- +\u003Cbr\u0020\/\u003E\u0022 +<br />" diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/type.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/type.test new file mode 100644 index 0000000000000000000000000000000000000000..9ae8d7bf9921e180caf80fc9c3e1874b388c6dab --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/type.test @@ -0,0 +1,69 @@ +--TEST-- +escape types +--TEMPLATE-- + +1. autoescape 'html' |escape('js') + +{% autoescape 'html' %} +<a onclick="alert("{{ msg|escape('js') }}")"></a> +{% endautoescape %} + +2. autoescape 'html' |escape('js') + +{% autoescape 'html' %} +<a onclick="alert("{{ msg|escape('js') }}")"></a> +{% endautoescape %} + +3. autoescape 'js' |escape('js') + +{% autoescape 'js' %} +<a onclick="alert("{{ msg|escape('js') }}")"></a> +{% endautoescape %} + +4. no escape + +{% autoescape false %} +<a onclick="alert("{{ msg }}")"></a> +{% endautoescape %} + +5. |escape('js')|escape('html') + +{% autoescape false %} +<a onclick="alert("{{ msg|escape('js')|escape('html') }}")"></a> +{% endautoescape %} + +6. autoescape 'html' |escape('js')|escape('html') + +{% autoescape 'html' %} +<a onclick="alert("{{ msg|escape('js')|escape('html') }}")"></a> +{% endautoescape %} + +--DATA-- +return ['msg' => "<>\n'\""] +--EXPECT-- + +1. autoescape 'html' |escape('js') + +<a onclick="alert("\u003C\u003E\n\u0027\u0022")"></a> + +2. autoescape 'html' |escape('js') + +<a onclick="alert("\u003C\u003E\n\u0027\u0022")"></a> + +3. autoescape 'js' |escape('js') + +<a onclick="alert("\u003C\u003E\n\u0027\u0022")"></a> + +4. no escape + +<a onclick="alert("<> +'"")"></a> + +5. |escape('js')|escape('html') + +<a onclick="alert("\u003C\u003E\n\u0027\u0022")"></a> + +6. autoescape 'html' |escape('js')|escape('html') + +<a onclick="alert("\u003C\u003E\n\u0027\u0022")"></a> + diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_filters.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_filters.test new file mode 100644 index 0000000000000000000000000000000000000000..f97105bbd1b009a7f2f08d4c6f1d2d9d66df9553 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_filters.test @@ -0,0 +1,131 @@ +--TEST-- +"autoescape" tag applies escaping after calling filters +--TEMPLATE-- +{% autoescape 'html' %} + +(escape_and_nl2br is an escaper filter) + +1. Don't escape escaper filter output +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is not escaped ) +{{ var|escape_and_nl2br }} + +2. Don't escape escaper filter output +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is not escaped, |raw is redundant ) +{{ var|escape_and_nl2br|raw }} + +3. Explicit escape +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is explicitly escaped by |escape ) +{{ var|escape_and_nl2br|escape }} + +4. Escape non-escaper filter output +( var is upper-cased by |upper, + the output is auto-escaped ) +{{ var|upper }} + +5. Escape if last filter is not an escaper +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is upper-cased by |upper, + the output is auto-escaped as |upper is not an escaper ) +{{ var|escape_and_nl2br|upper }} + +6. Don't escape escaper filter output +( var is upper cased by upper, + the output is escaped by |escape_and_nl2br, line-breaks are added, + the output is not escaped as |escape_and_nl2br is an escaper ) +{{ var|upper|escape_and_nl2br }} + +7. Escape if last filter is not an escaper +( the output of |format is "<b>" ~ var ~ "</b>", + the output is auto-escaped ) +{{ "<b>%s</b>"|format(var) }} + +8. Escape if last filter is not an escaper +( the output of |format is "<b>" ~ var ~ "</b>", + |raw is redundant, + the output is auto-escaped ) +{{ "<b>%s</b>"|raw|format(var) }} + +9. Don't escape escaper filter output +( the output of |format is "<b>" ~ var ~ "</b>", + the output is not escaped due to |raw filter at the end ) +{{ "<b>%s</b>"|format(var)|raw }} + +10. Don't escape escaper filter output +( the output of |format is "<b>" ~ var ~ "</b>", + the output is not escaped due to |raw filter at the end, + the |raw filter on var is redundant ) +{{ "<b>%s</b>"|format(var|raw)|raw }} + +{% endautoescape %} +--DATA-- +return ['var' => "<Fabien>\nTwig"] +--EXPECT-- + +(escape_and_nl2br is an escaper filter) + +1. Don't escape escaper filter output +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is not escaped ) +<Fabien><br /> +Twig + +2. Don't escape escaper filter output +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is not escaped, |raw is redundant ) +<Fabien><br /> +Twig + +3. Explicit escape +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is explicitly escaped by |escape ) +&lt;Fabien&gt;<br /> +Twig + +4. Escape non-escaper filter output +( var is upper-cased by |upper, + the output is auto-escaped ) +<FABIEN> +TWIG + +5. Escape if last filter is not an escaper +( var is escaped by |escape_and_nl2br, line-breaks are added, + the output is upper-cased by |upper, + the output is auto-escaped as |upper is not an escaper ) +&LT;FABIEN&GT;<BR /> +TWIG + +6. Don't escape escaper filter output +( var is upper cased by upper, + the output is escaped by |escape_and_nl2br, line-breaks are added, + the output is not escaped as |escape_and_nl2br is an escaper ) +<FABIEN><br /> +TWIG + +7. Escape if last filter is not an escaper +( the output of |format is "<b>" ~ var ~ "</b>", + the output is auto-escaped ) +<b><Fabien> +Twig</b> + +8. Escape if last filter is not an escaper +( the output of |format is "<b>" ~ var ~ "</b>", + |raw is redundant, + the output is auto-escaped ) +<b><Fabien> +Twig</b> + +9. Don't escape escaper filter output +( the output of |format is "<b>" ~ var ~ "</b>", + the output is not escaped due to |raw filter at the end ) +<b><Fabien> +Twig</b> + +10. Don't escape escaper filter output +( the output of |format is "<b>" ~ var ~ "</b>", + the output is not escaped due to |raw filter at the end, + the |raw filter on var is redundant ) +<b><Fabien> +Twig</b> diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_filters_arguments.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_filters_arguments.test new file mode 100644 index 0000000000000000000000000000000000000000..50f72d83a1ee7888446673bdb7c722ecb2571dc8 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_filters_arguments.test @@ -0,0 +1,23 @@ +--TEST-- +"autoescape" tag do not applies escaping on filter arguments +--TEMPLATE-- +{% autoescape 'html' %} +{{ var|nl2br("<br />") }} +{{ var|nl2br("<br />"|escape) }} +{{ var|nl2br(sep) }} +{{ var|nl2br(sep|raw) }} +{{ var|nl2br(sep|escape) }} +{% endautoescape %} +--DATA-- +return ['var' => "<Fabien>\nTwig", 'sep' => '<br />'] +--EXPECT-- +<Fabien><br /> +Twig +<Fabien><br /> +Twig +<Fabien><br /> +Twig +<Fabien><br /> +Twig +<Fabien><br /> +Twig diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_pre_escape_filters.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_pre_escape_filters.test new file mode 100644 index 0000000000000000000000000000000000000000..c9c738055dfcef96e635fa6f75b84c97bf7d43ce --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_pre_escape_filters.test @@ -0,0 +1,68 @@ +--TEST-- +"autoescape" tag applies escaping after calling filters, and before calling pre_escape filters +--TEMPLATE-- +{% autoescape 'html' %} + +(nl2br is pre_escaped for "html" and declared safe for "html") + +1. Pre-escape and don't post-escape +( var|escape|nl2br ) +{{ var|nl2br }} + +2. Don't double-pre-escape +( var|escape|nl2br ) +{{ var|escape|nl2br }} + +3. Don't escape safe values +( var|raw|nl2br ) +{{ var|raw|nl2br }} + +4. Don't escape safe values +( var|escape|nl2br|nl2br ) +{{ var|nl2br|nl2br }} + +5. Re-escape values that are escaped for an other contexts +( var|escape_something|escape|nl2br ) +{{ var|escape_something|nl2br }} + +6. Still escape when using filters not declared safe +( var|escape|nl2br|upper|escape ) +{{ var|nl2br|upper }} + +{% endautoescape %} +--DATA-- +return ['var' => "<Fabien>\nTwig"] +--EXPECT-- + +(nl2br is pre_escaped for "html" and declared safe for "html") + +1. Pre-escape and don't post-escape +( var|escape|nl2br ) +<Fabien><br /> +Twig + +2. Don't double-pre-escape +( var|escape|nl2br ) +<Fabien><br /> +Twig + +3. Don't escape safe values +( var|raw|nl2br ) +<Fabien><br /> +Twig + +4. Don't escape safe values +( var|escape|nl2br|nl2br ) +<Fabien><br /><br /> +Twig + +5. Re-escape values that are escaped for an other contexts +( var|escape_something|escape|nl2br ) +<FABIEN><br /> +TWIG + +6. Still escape when using filters not declared safe +( var|escape|nl2br|upper|escape ) +&LT;FABIEN&GT;<BR /> +TWIG + diff --git a/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_preserves_safety_filters.test b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_preserves_safety_filters.test new file mode 100644 index 0000000000000000000000000000000000000000..c764d434b099903c4347838017a69d15f43c853a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/autoescape/with_preserves_safety_filters.test @@ -0,0 +1,50 @@ +--TEST-- +"autoescape" tag handles filters preserving the safety +--TEMPLATE-- +{% autoescape 'html' %} + +(preserves_safety is preserving safety for "html") + +1. Unsafe values are still unsafe +( var|preserves_safety|escape ) +{{ var|preserves_safety }} + +2. Safe values are still safe +( var|escape|preserves_safety ) +{{ var|escape|preserves_safety }} + +3. Re-escape values that are escaped for an other contexts +( var|escape_something|preserves_safety|escape ) +{{ var|escape_something|preserves_safety }} + +4. Still escape when using filters not declared safe +( var|escape|preserves_safety|replace({'FABIEN': 'FABPOT'})|escape ) +{{ var|escape|preserves_safety|replace({'FABIEN': 'FABPOT'}) }} + +{% endautoescape %} +--DATA-- +return ['var' => "<Fabien>\nTwig"] +--EXPECT-- + +(preserves_safety is preserving safety for "html") + +1. Unsafe values are still unsafe +( var|preserves_safety|escape ) +<FABIEN> +TWIG + +2. Safe values are still safe +( var|escape|preserves_safety ) +<FABIEN> +TWIG + +3. Re-escape values that are escaped for an other contexts +( var|escape_something|preserves_safety|escape ) +<FABIEN> +TWIG + +4. Still escape when using filters not declared safe +( var|escape|preserves_safety|replace({'FABIEN': 'FABPOT'})|escape ) +&LT;FABPOT&GT; +TWIG + diff --git a/vendor/twig/twig/tests/Fixtures/tags/block/basic.test b/vendor/twig/twig/tests/Fixtures/tags/block/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..988b09ce863a8a22883d1bf03222508a1fb78a1b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/block/basic.test @@ -0,0 +1,11 @@ +--TEST-- +"block" tag +--TEMPLATE-- +{% block title1 %}FOO{% endblock %} +{% block title2 foo|lower %} +--TEMPLATE(foo.twig)-- +{% block content %}{% endblock %} +--DATA-- +return ['foo' => 'bar'] +--EXPECT-- +FOObar diff --git a/vendor/twig/twig/tests/Fixtures/tags/block/block_unique_name.test b/vendor/twig/twig/tests/Fixtures/tags/block/block_unique_name.test new file mode 100644 index 0000000000000000000000000000000000000000..3009f8b4201eb5f6f0d859f85bbd92d7e8ed5d4a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/block/block_unique_name.test @@ -0,0 +1,11 @@ +--TEST-- +"block" tag +--TEMPLATE-- +{% block content %} + {% block content %} + {% endblock %} +{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: The block 'content' has already been defined line 2 in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tags/block/special_chars.test b/vendor/twig/twig/tests/Fixtures/tags/block/special_chars.test new file mode 100644 index 0000000000000000000000000000000000000000..e8e240eb77e0d35a4e2055863f9755962b150273 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/block/special_chars.test @@ -0,0 +1,10 @@ +--TEST-- +"§" special chars in a block name +--TEMPLATE-- +{% block § %} +§ +{% endblock § %} +--DATA-- +return [] +--EXPECT-- +§ diff --git a/vendor/twig/twig/tests/Fixtures/tags/deprecated/block.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/deprecated/block.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..53729dd1f70043190c05037a6e4f26be70d288f2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/deprecated/block.legacy.test @@ -0,0 +1,20 @@ +--TEST-- +Deprecating a block with "deprecated" tag +--TEMPLATE-- +{% use 'greeting.twig' %} + +{{ block('welcome') }} + +--TEMPLATE(greeting.twig)-- +{% block welcome %} + {% deprecated 'The "welcome" block is deprecated, use "hello" instead.' %} + {{ block('hello') }} +{% endblock %} + +{% block hello %} +Hello Fabien +{% endblock %} +--DATA-- +return [] +--EXPECT-- + Hello Fabien diff --git a/vendor/twig/twig/tests/Fixtures/tags/deprecated/macro.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/deprecated/macro.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..5cc48dd873baf587edf45a579d4d43bf44181e60 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/deprecated/macro.legacy.test @@ -0,0 +1,21 @@ +--TEST-- +Deprecating a macro with "deprecated" tag +--TEMPLATE-- +{% import 'greeting.twig' as greeting %} + +{{ greeting.welcome('Fabien') }} + +--TEMPLATE(greeting.twig)-- +{% macro welcome(name) %} + {% deprecated 'The "welcome" macro is deprecated, use "hello" instead.' %} + {% import _self as self %} + {{ self.hello(name) }} +{% endmacro %} + +{% macro hello(name) %} +Hello {{ name }} +{% endmacro %} +--DATA-- +return [] +--EXPECT-- + Hello Fabien diff --git a/vendor/twig/twig/tests/Fixtures/tags/deprecated/template.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/deprecated/template.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..7f786d57fc3555b7bbe8834d413e8d3a9a52ebda --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/deprecated/template.legacy.test @@ -0,0 +1,12 @@ +--TEST-- +Deprecating a template with "deprecated" tag +--TEMPLATE-- +{% extends 'greeting.twig' %} + +{% deprecated 'The "index.twig" template is deprecated, use "greeting.twig" instead.' %} +--TEMPLATE(greeting.twig)-- +Hello Fabien +--DATA-- +return [] +--EXPECT-- +Hello Fabien diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/basic.test b/vendor/twig/twig/tests/Fixtures/tags/embed/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..16781e4186abdf2554d885b620d2326fb26ee290 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/basic.test @@ -0,0 +1,35 @@ +--TEST-- +"embed" tag +--TEMPLATE-- +FOO +{% embed "foo.twig" %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} +{% endembed %} + +BAR +--TEMPLATE(foo.twig)-- +A +{% block c1 %} + block1 +{% endblock %} +B +{% block c2 %} + block2 +{% endblock %} +C +--DATA-- +return [] +--EXPECT-- +FOO + +A + block1 + + block1extended + B + block2 +C +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/complex_dynamic_parent.test b/vendor/twig/twig/tests/Fixtures/tags/embed/complex_dynamic_parent.test new file mode 100644 index 0000000000000000000000000000000000000000..b799a8c95f8cc2ec4898b51f1acf8c20e91ee92b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/complex_dynamic_parent.test @@ -0,0 +1,35 @@ +--TEST-- +"embed" tag +--TEMPLATE-- +FOO +{% embed foo ~ ".twig" %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} +{% endembed %} + +BAR +--TEMPLATE(foo.twig)-- +A +{% block c1 %} + block1 +{% endblock %} +B +{% block c2 %} + block2 +{% endblock %} +C +--DATA-- +return ['foo' => 'foo'] +--EXPECT-- +FOO + +A + block1 + + block1extended + B + block2 +C +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/dynamic_parent.test b/vendor/twig/twig/tests/Fixtures/tags/embed/dynamic_parent.test new file mode 100644 index 0000000000000000000000000000000000000000..6f0879e28dce54d1f44db6e235cd5714138b0a16 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/dynamic_parent.test @@ -0,0 +1,35 @@ +--TEST-- +"embed" tag +--TEMPLATE-- +FOO +{% embed foo %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} +{% endembed %} + +BAR +--TEMPLATE(foo.twig)-- +A +{% block c1 %} + block1 +{% endblock %} +B +{% block c2 %} + block2 +{% endblock %} +C +--DATA-- +return ['foo' => 'foo.twig'] +--EXPECT-- +FOO + +A + block1 + + block1extended + B + block2 +C +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/error_line.test b/vendor/twig/twig/tests/Fixtures/tags/embed/error_line.test new file mode 100644 index 0000000000000000000000000000000000000000..b1c6c85e6112d165b81436eb39d9ff2c04854c01 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/error_line.test @@ -0,0 +1,16 @@ +--TEST-- +"embed" tag +--TEMPLATE(index.twig)-- +FOO +{% embed "foo.twig" %} + {% block c1 %} + {{ nothing }} + {% endblock %} +{% endembed %} +BAR +--TEMPLATE(foo.twig)-- +{% block c1 %}{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "nothing" does not exist in "index.twig" at line 5. diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/multiple.test b/vendor/twig/twig/tests/Fixtures/tags/embed/multiple.test new file mode 100644 index 0000000000000000000000000000000000000000..9f7b52f1d827be751059a540e9db446576505363 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/multiple.test @@ -0,0 +1,50 @@ +--TEST-- +"embed" tag +--TEMPLATE-- +FOO +{% embed "foo.twig" %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} +{% endembed %} + +{% embed "foo.twig" %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} +{% endembed %} + +BAR +--TEMPLATE(foo.twig)-- +A +{% block c1 %} + block1 +{% endblock %} +B +{% block c2 %} + block2 +{% endblock %} +C +--DATA-- +return [] +--EXPECT-- +FOO + +A + block1 + + block1extended + B + block2 +C + +A + block1 + + block1extended + B + block2 +C +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/nested.test b/vendor/twig/twig/tests/Fixtures/tags/embed/nested.test new file mode 100644 index 0000000000000000000000000000000000000000..9f33723366d939962e855d2b666ff6bf60ced730 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/nested.test @@ -0,0 +1,42 @@ +--TEST-- +"embed" tag +--TEMPLATE-- +{% embed "foo.twig" %} + {% block c1 %} + {{ parent() }} + {% embed "foo.twig" %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} + {% endembed %} + + {% endblock %} +{% endembed %} +--TEMPLATE(foo.twig)-- +A +{% block c1 %} + block1 +{% endblock %} +B +{% block c2 %} + block2 +{% endblock %} +C +--DATA-- +return [] +--EXPECT-- +A + block1 + + +A + block1 + + block1extended + B + block2 +C + B + block2 +C diff --git a/vendor/twig/twig/tests/Fixtures/tags/embed/with_extends.test b/vendor/twig/twig/tests/Fixtures/tags/embed/with_extends.test new file mode 100644 index 0000000000000000000000000000000000000000..ce726ac00927ec91b137dc66ed42ef35736732e9 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/embed/with_extends.test @@ -0,0 +1,60 @@ +--TEST-- +"embed" tag +--TEMPLATE-- +{% extends "base.twig" %} + +{% block c1 %} + {{ parent() }} + blockc1baseextended +{% endblock %} + +{% block c2 %} + {{ parent() }} + + {% embed "foo.twig" %} + {% block c1 %} + {{ parent() }} + block1extended + {% endblock %} + {% endembed %} + {{ parent() }} +{% endblock %} +--TEMPLATE(base.twig)-- +A +{% block c1 %} + blockc1base +{% endblock %} +{% block c2 %} + blockc2base +{% endblock %} +B +--TEMPLATE(foo.twig)-- +A +{% block c1 %} + block1 +{% endblock %} +B +{% block c2 %} + block2 +{% endblock %} +C +--DATA-- +return [] +--EXPECT-- +A + blockc1base + + blockc1baseextended + blockc2base + + + +A + block1 + + block1extended + B + block2 +C blockc2base + +B \ No newline at end of file diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/basic.test b/vendor/twig/twig/tests/Fixtures/tags/filter/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..866171ecc5ded2e1b14df5fa9cc1a9f06108f80c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/basic.test @@ -0,0 +1,10 @@ +--TEST-- +"filter" tag applies a filter on its children +--TEMPLATE-- +{% filter upper %} +Some text with a {{ var }} +{% endfilter %} +--DATA-- +return ['var' => 'var'] +--EXPECT-- +SOME TEXT WITH A VAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/json_encode.test b/vendor/twig/twig/tests/Fixtures/tags/filter/json_encode.test new file mode 100644 index 0000000000000000000000000000000000000000..a2562b995be01b417994f6b5a83d61f5ba2fb4d6 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/json_encode.test @@ -0,0 +1,8 @@ +--TEST-- +"filter" tag applies a filter on its children +--TEMPLATE-- +{% filter json_encode|raw %}test{% endfilter %} +--DATA-- +return [] +--EXPECT-- +"test" diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/multiple.test b/vendor/twig/twig/tests/Fixtures/tags/filter/multiple.test new file mode 100644 index 0000000000000000000000000000000000000000..8eb3cbdd7d28e8f76fbfe99e7ed7eda4976e1c8d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/multiple.test @@ -0,0 +1,10 @@ +--TEST-- +"filter" tags accept multiple chained filters +--TEMPLATE-- +{% filter lower|title %} + {{ var }} +{% endfilter %} +--DATA-- +return ['var' => 'VAR'] +--EXPECT-- + Var diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/nested.test b/vendor/twig/twig/tests/Fixtures/tags/filter/nested.test new file mode 100644 index 0000000000000000000000000000000000000000..6d18e1af08cbdf35d8cd9b2150a9deea24f504e8 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/nested.test @@ -0,0 +1,16 @@ +--TEST-- +"filter" tags can be nested at will +--TEMPLATE-- +{% filter lower|title %} + {{ var }} + {% filter upper %} + {{ var }} + {% endfilter %} + {{ var }} +{% endfilter %} +--DATA-- +return ['var' => 'var'] +--EXPECT-- + Var + Var + Var diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/scope.test b/vendor/twig/twig/tests/Fixtures/tags/filter/scope.test new file mode 100644 index 0000000000000000000000000000000000000000..889a46f6a218515954b6572be8acdfeb941e20fa --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/scope.test @@ -0,0 +1,11 @@ +--TEST-- +"scope" tag creates a new scope +--TEMPLATE-- +{% filter spaceless %} +{% set item = 'foo' %} +{% endfilter %} +{{ item }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "item" does not exist in "index.twig" at line 5. diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/with_for_tag.test b/vendor/twig/twig/tests/Fixtures/tags/filter/with_for_tag.test new file mode 100644 index 0000000000000000000000000000000000000000..d2d87cfda38a9d847e882d8ac7335a897fdd1fed --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/with_for_tag.test @@ -0,0 +1,13 @@ +--TEST-- +"filter" tag applies the filter on "for" tags +--TEMPLATE-- +{% filter upper %} +{% for item in items %} +{{ item }} +{% endfor %} +{% endfilter %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- +A +B diff --git a/vendor/twig/twig/tests/Fixtures/tags/filter/with_if_tag.test b/vendor/twig/twig/tests/Fixtures/tags/filter/with_if_tag.test new file mode 100644 index 0000000000000000000000000000000000000000..f2e804bfb105bff4875fa50af30fb0362424e897 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/filter/with_if_tag.test @@ -0,0 +1,29 @@ +--TEST-- +"filter" tag applies the filter on "if" tags +--TEMPLATE-- +{% filter upper %} +{% if items %} +{{ items|join(', ') }} +{% endif %} + +{% if items.3 is defined %} +FOO +{% else %} +{{ items.1 }} +{% endif %} + +{% if items.3 is defined %} +FOO +{% elseif items.1 %} +{{ items.0 }} +{% endif %} + +{% endfilter %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- +A, B + +B + +A diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/condition.test b/vendor/twig/twig/tests/Fixtures/tags/for/condition.test new file mode 100644 index 0000000000000000000000000000000000000000..b1ad22fd53fa11e82b50fca04a53ce013e99c342 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/condition.test @@ -0,0 +1,14 @@ +--TEST-- +"for" tag takes a condition +--TEMPLATE-- +{% for i in 1..5 if i is odd -%} + {{ loop.index }}.{{ i }}{{ foo.bar }} +{% endfor %} +--DATA-- +return ['foo' => ['bar' => 'X']] +--CONFIG-- +return ['strict_variables' => false] +--EXPECT-- +1.1X +2.3X +3.5X diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/context.test b/vendor/twig/twig/tests/Fixtures/tags/for/context.test new file mode 100644 index 0000000000000000000000000000000000000000..3cdd575c83e68113802756b381fb478e456adcdc --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/context.test @@ -0,0 +1,18 @@ +--TEST-- +"for" tag keeps the context safe +--TEMPLATE-- +{% for item in items %} + {% for item in items %} + * {{ item }} + {% endfor %} + * {{ item }} +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- + * a + * b + * a + * a + * b + * b diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/else.test b/vendor/twig/twig/tests/Fixtures/tags/for/else.test new file mode 100644 index 0000000000000000000000000000000000000000..86ec9c28d3ea952d83306579e24b54c91eb75799 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/else.test @@ -0,0 +1,23 @@ +--TEST-- +"for" tag can use an "else" clause +--TEMPLATE-- +{% for item in items %} + * {{ item }} +{% else %} + no item +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- + * a + * b +--DATA-- +return ['items' => []] +--EXPECT-- + no item +--DATA-- +return [] +--CONFIG-- +return ['strict_variables' => false] +--EXPECT-- + no item diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/inner_variables.test b/vendor/twig/twig/tests/Fixtures/tags/for/inner_variables.test new file mode 100644 index 0000000000000000000000000000000000000000..e1ad3c73567c9756719329b441ceaacc32422325 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/inner_variables.test @@ -0,0 +1,17 @@ +--TEST-- +"for" tag does not reset inner variables +--TEMPLATE-- +{% for i in 1..2 %} + {% for j in 0..2 %} + {{k}}{% set k = k+1 %} {{ loop.parent.loop.index }} + {% endfor %} +{% endfor %} +--DATA-- +return ['k' => 0] +--EXPECT-- + 0 1 + 1 1 + 2 1 + 3 2 + 4 2 + 5 2 diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/keys.test b/vendor/twig/twig/tests/Fixtures/tags/for/keys.test new file mode 100644 index 0000000000000000000000000000000000000000..92135575f630427fad458861536d0f2dec292ea9 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/keys.test @@ -0,0 +1,11 @@ +--TEST-- +"for" tag can iterate over keys +--TEMPLATE-- +{% for key in items|keys %} + * {{ key }} +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- + * 0 + * 1 diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/keys_and_values.test b/vendor/twig/twig/tests/Fixtures/tags/for/keys_and_values.test new file mode 100644 index 0000000000000000000000000000000000000000..ab39ddf210c31e8b4ceb9e9c1c00d8d95e47c7a3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/keys_and_values.test @@ -0,0 +1,11 @@ +--TEST-- +"for" tag can iterate over keys and values +--TEMPLATE-- +{% for key, item in items %} + * {{ key }}/{{ item }} +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- + * 0/a + * 1/b diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/loop_context.test b/vendor/twig/twig/tests/Fixtures/tags/for/loop_context.test new file mode 100644 index 0000000000000000000000000000000000000000..56a60c2e6eefe1922e1b25940645964d9dd95dbb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/loop_context.test @@ -0,0 +1,19 @@ +--TEST-- +"for" tag adds a loop variable to the context +--TEMPLATE-- +{% for item in items %} + * {{ loop.index }}/{{ loop.index0 }} + * {{ loop.revindex }}/{{ loop.revindex0 }} + * {{ loop.first }}/{{ loop.last }}/{{ loop.length }} + +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- + * 1/0 + * 2/1 + * 1//2 + + * 2/1 + * 1/0 + * /1/2 diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/loop_context_local.test b/vendor/twig/twig/tests/Fixtures/tags/for/loop_context_local.test new file mode 100644 index 0000000000000000000000000000000000000000..58e5a9b34511fbaa64f350192a38ab8f07704830 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/loop_context_local.test @@ -0,0 +1,10 @@ +--TEST-- +"for" tag adds a loop variable to the context locally +--TEMPLATE-- +{% for item in items %} +{% endfor %} +{% if loop is not defined %}WORKS{% endif %} +--DATA-- +return ['items' => []] +--EXPECT-- +WORKS diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/loop_not_defined.test b/vendor/twig/twig/tests/Fixtures/tags/for/loop_not_defined.test new file mode 100644 index 0000000000000000000000000000000000000000..2d8c0b87389f7f8dc67ab6e6e1e13d77a48a2dee --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/loop_not_defined.test @@ -0,0 +1,10 @@ +--TEST-- +"for" tag +--TEMPLATE-- +{% for i, item in items if i > 0 %} + {{ loop.last }} +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXCEPTION-- +Twig\Error\SyntaxError: The "loop.last" variable is not defined when looping with a condition in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/loop_not_defined_cond.test b/vendor/twig/twig/tests/Fixtures/tags/for/loop_not_defined_cond.test new file mode 100644 index 0000000000000000000000000000000000000000..e90e96b4ae2b6502e469b1c6f35561f7c107337f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/loop_not_defined_cond.test @@ -0,0 +1,9 @@ +--TEST-- +"for" tag +--TEMPLATE-- +{% for i, item in items if loop.last > 0 %} +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXCEPTION-- +Twig\Error\SyntaxError: The "loop" variable cannot be used in a looping condition in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/nested_else.test b/vendor/twig/twig/tests/Fixtures/tags/for/nested_else.test new file mode 100644 index 0000000000000000000000000000000000000000..df1bb07ac04a81ea22e3b55c493f020f2b3988e8 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/nested_else.test @@ -0,0 +1,17 @@ +--TEST-- +"for" tag can use an "else" clause +--TEMPLATE-- +{% for item in items %} + {% for item in items1 %} + * {{ item }} + {% else %} + no {{ item }} + {% endfor %} +{% else %} + no item1 +{% endfor %} +--DATA-- +return ['items' => ['a', 'b'], 'items1' => []] +--EXPECT-- +no a + no b diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/objects.test b/vendor/twig/twig/tests/Fixtures/tags/for/objects.test new file mode 100644 index 0000000000000000000000000000000000000000..2ba2d92c2cc2bc8ecc4a8a9adb6d8b309d806f39 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/objects.test @@ -0,0 +1,43 @@ +--TEST-- +"for" tag iterates over iterable objects +--TEMPLATE-- +{% for item in items %} + * {{ item }} + * {{ loop.index }}/{{ loop.index0 }} + * {{ loop.first }} + +{% endfor %} + +{% for key, value in items %} + * {{ key }}/{{ value }} +{% endfor %} + +{% for key in items|keys %} + * {{ key }} +{% endfor %} +--DATA-- +class ItemsIterator implements Iterator +{ + protected $values = ['foo' => 'bar', 'bar' => 'foo']; + public function current() { return current($this->values); } + public function key() { return key($this->values); } + public function next() { return next($this->values); } + public function rewind() { return reset($this->values); } + public function valid() { return false !== current($this->values); } +} +return ['items' => new ItemsIterator()] +--EXPECT-- + * bar + * 1/0 + * 1 + + * foo + * 2/1 + * + + + * foo/bar + * bar/foo + + * foo + * bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/objects_countable.test b/vendor/twig/twig/tests/Fixtures/tags/for/objects_countable.test new file mode 100644 index 0000000000000000000000000000000000000000..99146bde36fd3845993997a87ce0fc85d07dbcd6 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/objects_countable.test @@ -0,0 +1,47 @@ +--TEST-- +"for" tag iterates over iterable and countable objects +--TEMPLATE-- +{% for item in items %} + * {{ item }} + * {{ loop.index }}/{{ loop.index0 }} + * {{ loop.revindex }}/{{ loop.revindex0 }} + * {{ loop.first }}/{{ loop.last }}/{{ loop.length }} + +{% endfor %} + +{% for key, value in items %} + * {{ key }}/{{ value }} +{% endfor %} + +{% for key in items|keys %} + * {{ key }} +{% endfor %} +--DATA-- +class ItemsIteratorCountable implements Iterator, \Countable +{ + protected $values = ['foo' => 'bar', 'bar' => 'foo']; + public function current() { return current($this->values); } + public function key() { return key($this->values); } + public function next() { return next($this->values); } + public function rewind() { return reset($this->values); } + public function valid() { return false !== current($this->values); } + public function count() { return count($this->values); } +} +return ['items' => new ItemsIteratorCountable()] +--EXPECT-- + * bar + * 1/0 + * 2/1 + * 1//2 + + * foo + * 2/1 + * 1/0 + * /1/2 + + + * foo/bar + * bar/foo + + * foo + * bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/recursive.test b/vendor/twig/twig/tests/Fixtures/tags/for/recursive.test new file mode 100644 index 0000000000000000000000000000000000000000..3b677d60ffb9a3be25aa27fcf5d83359b8c05621 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/recursive.test @@ -0,0 +1,18 @@ +--TEST-- +"for" tags can be nested +--TEMPLATE-- +{% for key, item in items %} +* {{ key }} ({{ loop.length }}): +{% for value in item %} + * {{ value }} ({{ loop.length }}) +{% endfor %} +{% endfor %} +--DATA-- +return ['items' => ['a' => ['a1', 'a2', 'a3'], 'b' => ['b1']]] +--EXPECT-- +* a (2): + * a1 (3) + * a2 (3) + * a3 (3) +* b (2): + * b1 (1) diff --git a/vendor/twig/twig/tests/Fixtures/tags/for/values.test b/vendor/twig/twig/tests/Fixtures/tags/for/values.test new file mode 100644 index 0000000000000000000000000000000000000000..384c41b288678702d6dc8688b2de55fe50d0bdf5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/for/values.test @@ -0,0 +1,11 @@ +--TEST-- +"for" tag iterates over item values +--TEMPLATE-- +{% for item in items %} + * {{ item }} +{% endfor %} +--DATA-- +return ['items' => ['a', 'b']] +--EXPECT-- + * a + * b diff --git a/vendor/twig/twig/tests/Fixtures/tags/from.test b/vendor/twig/twig/tests/Fixtures/tags/from.test new file mode 100644 index 0000000000000000000000000000000000000000..1d3c9e2b58ccb8a884256ee3c6cea9133944d705 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/from.test @@ -0,0 +1,14 @@ +--TEST-- +global variables +--TEMPLATE-- +{% include "included.twig" %} +{% from "included.twig" import foobar %} +{{ foobar() }} +--TEMPLATE(included.twig)-- +{% macro foobar() %} +called foobar +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +called foobar diff --git a/vendor/twig/twig/tests/Fixtures/tags/if/basic.test b/vendor/twig/twig/tests/Fixtures/tags/if/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..a02165e539e92943f2363462e27802679f6add87 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/if/basic.test @@ -0,0 +1,22 @@ +--TEST-- +"if" creates a condition +--TEMPLATE-- +{% if a is defined %} + {{ a }} +{% elseif b is defined %} + {{ b }} +{% else %} + NOTHING +{% endif %} +--DATA-- +return ['a' => 'a'] +--EXPECT-- + a +--DATA-- +return ['b' => 'b'] +--EXPECT-- + b +--DATA-- +return [] +--EXPECT-- + NOTHING diff --git a/vendor/twig/twig/tests/Fixtures/tags/if/expression.test b/vendor/twig/twig/tests/Fixtures/tags/if/expression.test new file mode 100644 index 0000000000000000000000000000000000000000..eb65083c615e01d80a01056ddf5b988c9911e499 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/if/expression.test @@ -0,0 +1,22 @@ +--TEST-- +"if" takes an expression as a test +--TEMPLATE-- +{% if a < 2 %} + A1 +{% elseif a > 10 %} + A2 +{% else %} + A3 +{% endif %} +--DATA-- +return ['a' => 1] +--EXPECT-- + A1 +--DATA-- +return ['a' => 12] +--EXPECT-- + A2 +--DATA-- +return ['a' => 7] +--EXPECT-- + A3 diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/basic.test b/vendor/twig/twig/tests/Fixtures/tags/include/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..9982b039d02ee8bfbfe88050150932ac46408673 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/basic.test @@ -0,0 +1,16 @@ +--TEST-- +"include" tag +--TEMPLATE-- +FOO +{% include "foo.twig" %} + +BAR +--TEMPLATE(foo.twig)-- +FOOBAR +--DATA-- +return [] +--EXPECT-- +FOO + +FOOBAR +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/expression.test b/vendor/twig/twig/tests/Fixtures/tags/include/expression.test new file mode 100644 index 0000000000000000000000000000000000000000..23db181238909af98abaa2138ab73fa01ca8cd90 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/expression.test @@ -0,0 +1,16 @@ +--TEST-- +"include" tag allows expressions for the template to include +--TEMPLATE-- +FOO +{% include foo %} + +BAR +--TEMPLATE(foo.twig)-- +FOOBAR +--DATA-- +return ['foo' => 'foo.twig'] +--EXPECT-- +FOO + +FOOBAR +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/ignore_missing.test b/vendor/twig/twig/tests/Fixtures/tags/include/ignore_missing.test new file mode 100644 index 0000000000000000000000000000000000000000..6c8bdb1e92b37a6ca6c96be98219caf09ed8d74e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/ignore_missing.test @@ -0,0 +1,10 @@ +--TEST-- +"include" tag +--TEMPLATE-- +{% include ["foo.twig", "bar.twig"] ignore missing %} +{% include "foo.twig" ignore missing %} +{% include "foo.twig" ignore missing with {} %} +{% include "foo.twig" ignore missing with {} only %} +--DATA-- +return [] +--EXPECT-- diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/ignore_missing_exists.test b/vendor/twig/twig/tests/Fixtures/tags/include/ignore_missing_exists.test new file mode 100644 index 0000000000000000000000000000000000000000..1af012210e4dac336bf13c4709f314e29bdd6f2e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/ignore_missing_exists.test @@ -0,0 +1,11 @@ +--TEST-- +"include" tag +--TEMPLATE-- +{% include "included.twig" ignore missing %} +NOT DISPLAYED +--TEMPLATE(included.twig)-- +{% include "DOES NOT EXIST" %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "DOES NOT EXIST" is not defined in "included.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/include_missing_extends.test b/vendor/twig/twig/tests/Fixtures/tags/include/include_missing_extends.test new file mode 100644 index 0000000000000000000000000000000000000000..d0d1bfe5907a0ef5c7d1f5480e70402085c073de --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/include_missing_extends.test @@ -0,0 +1,13 @@ +--TEST-- +"include" tag +--TEMPLATE-- +{% include ['bad.twig', 'good.twig'] ignore missing %} +NOT DISPLAYED +--TEMPLATE(bad.twig)-- +{% extends 'DOES NOT EXIST' %} +--TEMPLATE(good.twig)-- +NOT DISPLAYED +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "DOES NOT EXIST" is not defined in "bad.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/missing.test b/vendor/twig/twig/tests/Fixtures/tags/include/missing.test new file mode 100644 index 0000000000000000000000000000000000000000..ac72838e8493e65fbddf4658fe19b89bb0278bcd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/missing.test @@ -0,0 +1,8 @@ +--TEST-- +"include" tag +--TEMPLATE-- +{% include "foo.twig" %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "foo.twig" is not defined in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/missing_nested.test b/vendor/twig/twig/tests/Fixtures/tags/include/missing_nested.test new file mode 100644 index 0000000000000000000000000000000000000000..0ee51b78622a90580798a17ff4c7174c66245776 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/missing_nested.test @@ -0,0 +1,16 @@ +--TEST-- +"include" tag +--TEMPLATE-- +{% extends "base.twig" %} + +{% block content %} + {{ parent() }} +{% endblock %} +--TEMPLATE(base.twig)-- +{% block content %} + {% include "foo.twig" %} +{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\LoaderError: Template "foo.twig" is not defined in "base.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/only.test b/vendor/twig/twig/tests/Fixtures/tags/include/only.test new file mode 100644 index 0000000000000000000000000000000000000000..8da402f7a83e32d07e6c5f5add9c6987bf91bcba --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/only.test @@ -0,0 +1,20 @@ +--TEST-- +"include" tag accept variables and only +--TEMPLATE-- +{% include "foo.twig" %} +{% include "foo.twig" only %} +{% include "foo.twig" with vars1 %} +{% include "foo.twig" with vars1 only %} +{% include "foo.twig" with vars2 %} +{% include "foo.twig" with vars2 only %} +--TEMPLATE(foo.twig)-- +{% for k, v in _context %}{{ k }},{% endfor %} +--DATA-- +return ['vars1' => ['foo1' => 'bar'], 'vars2' => new ArrayObject(['foo2' => 'bar'])] +--EXPECT-- +vars1,vars2,global,_parent, +global,_parent, +vars1,vars2,global,foo1,_parent, +foo1,global,_parent, +vars1,vars2,global,foo2,_parent, +foo2,global,_parent, diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/template_instance.test b/vendor/twig/twig/tests/Fixtures/tags/include/template_instance.test new file mode 100644 index 0000000000000000000000000000000000000000..4fb862a175c195b7d747194cafc75646c18c2636 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/template_instance.test @@ -0,0 +1,10 @@ +--TEST-- +"include" tag accepts \Twig\TemplateWrapper instance +--TEMPLATE-- +{% include foo %} FOO +--TEMPLATE(foo.twig)-- +BAR +--DATA-- +return ['foo' => $twig->load('foo.twig')] +--EXPECT-- +BAR FOO diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/templates_as_array.test b/vendor/twig/twig/tests/Fixtures/tags/include/templates_as_array.test new file mode 100644 index 0000000000000000000000000000000000000000..38063952d41aa60a74e5318e43bedf1cb0d0b7d2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/templates_as_array.test @@ -0,0 +1,12 @@ +--TEST-- +"include" tag +--TEMPLATE-- +{% include ["foo.twig", "bar.twig"] %} +{% include ["bar.twig", "foo.twig"] %} +--TEMPLATE(foo.twig)-- +foo +--DATA-- +return [] +--EXPECT-- +foo +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/include/with_variables.test b/vendor/twig/twig/tests/Fixtures/tags/include/with_variables.test new file mode 100644 index 0000000000000000000000000000000000000000..45a05199ec61c6445b1324ee7d2567c62a15cabe --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/include/with_variables.test @@ -0,0 +1,14 @@ +--TEST-- +"include" tag accept variables +--TEMPLATE-- +{% include "foo.twig" with {'foo': 'bar'} %} +{% include "foo.twig" with vars1 %} +{% include "foo.twig" with vars2 %} +--TEMPLATE(foo.twig)-- +{{ foo }} +--DATA-- +return ['vars1' => ['foo' => 'bar'], 'vars2' => new ArrayObject(['foo' => 'bar'])] +--EXPECT-- +bar +bar +bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/basic.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..703b61be176557b82a769ecc098c2d8e1c1e0eff --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/basic.test @@ -0,0 +1,14 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "foo.twig" %} + +{% block content %} +FOO +{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}{% endblock %} +--DATA-- +return [] +--EXPECT-- +FOO diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/block_expr.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/block_expr.test new file mode 100644 index 0000000000000000000000000000000000000000..0b82d4cf2ddb24de10ba92a8162d812fe36001af --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/block_expr.test @@ -0,0 +1,30 @@ +--TEST-- +block_expr +--TEMPLATE-- +{% extends "base.twig" %} + +{% block element -%} + Element: + {{- parent() -}} +{% endblock %} +--TEMPLATE(base.twig)-- +{% block element -%} + <div> + {%- if item.children is defined %} + {%- for item in item.children %} + {{- block('element') -}} + {% endfor %} + {%- endif -%} + </div> +{%- endblock %} +--DATA-- +return [ + 'item' => [ + 'children' => [ + null, + null, + ] + ] +] +--EXPECT-- +Element:<div>Element:<div></div>Element:<div></div></div> diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/block_expr2.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/block_expr2.test new file mode 100644 index 0000000000000000000000000000000000000000..18f6604113e8650b79a26c19a893fed8115b544c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/block_expr2.test @@ -0,0 +1,32 @@ +--TEST-- +block_expr2 +--TEMPLATE-- +{% extends "base2.twig" %} + +{% block element -%} + Element: + {{- parent() -}} +{% endblock %} +--TEMPLATE(base2.twig)-- +{% extends "base.twig" %} +--TEMPLATE(base.twig)-- +{% block element -%} + <div> + {%- if item.children is defined %} + {%- for item in item.children %} + {{- block('element') -}} + {% endfor %} + {%- endif -%} + </div> +{%- endblock %} +--DATA-- +return [ + 'item' => [ + 'children' => [ + null, + null, + ] + ] +] +--EXPECT-- +Element:<div>Element:<div></div>Element:<div></div></div> diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/conditional.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/conditional.test new file mode 100644 index 0000000000000000000000000000000000000000..bd28248d137731dd99d25b0dad05ba6124e535cc --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/conditional.test @@ -0,0 +1,14 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends standalone ? foo : 'bar.twig' %} + +{% block content %}{{ parent() }}FOO{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}FOO{% endblock %} +--TEMPLATE(bar.twig)-- +{% block content %}BAR{% endblock %} +--DATA-- +return ['foo' => 'foo.twig', 'standalone' => true] +--EXPECT-- +FOOFOO diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/dynamic.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/dynamic.test new file mode 100644 index 0000000000000000000000000000000000000000..e6a0f017280fa58e20d22ba45026e5401f14897d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/dynamic.test @@ -0,0 +1,14 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends foo %} + +{% block content %} +FOO +{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}{% endblock %} +--DATA-- +return ['foo' => 'foo.twig'] +--EXPECT-- +FOO diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/empty.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/empty.test new file mode 100644 index 0000000000000000000000000000000000000000..ca11bf20d1b2109d22c9a779ae7d55890a6c1f7e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/empty.test @@ -0,0 +1,10 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "foo.twig" %} +--TEMPLATE(foo.twig)-- +{% block content %}FOO{% endblock %} +--DATA-- +return [] +--EXPECT-- +FOO diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array.test new file mode 100644 index 0000000000000000000000000000000000000000..4d2cb6c65724d30c3d95ddc27388a124329377b3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array.test @@ -0,0 +1,12 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends ["foo.twig", "bar.twig"] %} +--TEMPLATE(bar.twig)-- +{% block content %} +foo +{% endblock %} +--DATA-- +return [] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array_with_empty_name.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array_with_empty_name.test new file mode 100644 index 0000000000000000000000000000000000000000..5108651103bcb5b4954e538559529e5c1d050b59 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array_with_empty_name.test @@ -0,0 +1,12 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends ["", "bar.twig"] %} +--TEMPLATE(bar.twig)-- +{% block content %} +foo +{% endblock %} +--DATA-- +return [] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array_with_null_name.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array_with_null_name.test new file mode 100644 index 0000000000000000000000000000000000000000..c5ee6f193b7d77a47eaa23cbcc378d17cfd6e72a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_as_array_with_null_name.test @@ -0,0 +1,12 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends [null, "bar.twig"] %} +--TEMPLATE(bar.twig)-- +{% block content %} +foo +{% endblock %} +--DATA-- +return [] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_in_block.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_in_block.test new file mode 100644 index 0000000000000000000000000000000000000000..a372ea1c81ec000b4f79999fcea4449becb00f0f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_in_block.test @@ -0,0 +1,10 @@ +--TEST-- +"extends" tag in a block +--TEMPLATE-- +{% block foo %} + {% extends "foo.twig" %} +{% endblock %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Cannot use "extend" in a block in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_in_macro.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_in_macro.test new file mode 100644 index 0000000000000000000000000000000000000000..dc87b2a8c2dd086cacf5fd31807245c606743804 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/extends_in_macro.test @@ -0,0 +1,10 @@ +--TEST-- +"extends" tag in a macro +--TEMPLATE-- +{% macro foo() %} + {% extends "foo.twig" %} +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Cannot use "extend" in a macro in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/multiple.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/multiple.test new file mode 100644 index 0000000000000000000000000000000000000000..fc25badd34f1d4c35dacd728d2ee8c471b62e9aa --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/multiple.test @@ -0,0 +1,12 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "layout.twig" %}{% block content %}{{ parent() }}index {% endblock %} +--TEMPLATE(layout.twig)-- +{% extends "base.twig" %}{% block content %}{{ parent() }}layout {% endblock %} +--TEMPLATE(base.twig)-- +{% block content %}base {% endblock %} +--DATA-- +return [] +--EXPECT-- +base layout index diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/multiple_dynamic.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/multiple_dynamic.test new file mode 100644 index 0000000000000000000000000000000000000000..fa887177bd31aca407c2385fdabb74d1d0079479 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/multiple_dynamic.test @@ -0,0 +1,22 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% set foo = 1 %} +{{ include('parent.twig') }} +{{ include('parent.twig') }} +{% set foo = 2 %} +{{ include('parent.twig') }} +--TEMPLATE(parent.twig)-- +{% extends foo~'_parent.twig' %}{% block content %}{{ parent() }} parent{% endblock %} +--TEMPLATE(1_parent.twig)-- +{% block content %}1{% endblock %} +--TEMPLATE(2_parent.twig)-- +{% block content %}2{% endblock %} +--DATA-- +return [] +--EXPECT-- +1 parent + +1 parent + +2 parent diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_blocks.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_blocks.test new file mode 100644 index 0000000000000000000000000000000000000000..abea2e9d4730ba1aad960001d8efd72ef361d757 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_blocks.test @@ -0,0 +1,22 @@ +--TEST-- +"block" tag +--TEMPLATE-- +{% extends "foo.twig" %} + +{% block content %} + {% block subcontent %} + {% block subsubcontent %} + SUBSUBCONTENT + {% endblock %} + {% endblock %} +{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %} + {% block subcontent %} + SUBCONTENT + {% endblock %} +{% endblock %} +--DATA-- +return [] +--EXPECT-- +SUBSUBCONTENT diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_blocks_parent_only.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_blocks_parent_only.test new file mode 100644 index 0000000000000000000000000000000000000000..20b7848f8d329776d1c8d2d40b775852c4ce6aaa --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_blocks_parent_only.test @@ -0,0 +1,15 @@ +--TEST-- +"block" tag +--TEMPLATE-- +{% block content %} + CONTENT + {%- block subcontent -%} + SUBCONTENT + {%- endblock -%} + ENDCONTENT +{% endblock %} +--TEMPLATE(foo.twig)-- +--DATA-- +return [] +--EXPECT-- +CONTENTSUBCONTENTENDCONTENT diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_inheritance.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_inheritance.test new file mode 100644 index 0000000000000000000000000000000000000000..0b585b4809cbeba1935d04ea2080edee72aa7774 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/nested_inheritance.test @@ -0,0 +1,16 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "layout.twig" %} +{% block inside %}INSIDE{% endblock inside %} +--TEMPLATE(layout.twig)-- +{% extends "base.twig" %} +{% block body %} + {% block inside '' %} +{% endblock body %} +--TEMPLATE(base.twig)-- +{% block body '' %} +--DATA-- +return [] +--EXPECT-- +INSIDE diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent.test new file mode 100644 index 0000000000000000000000000000000000000000..73f4c0ec5eb54b323b3e4cbb81cd964abf541792 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent.test @@ -0,0 +1,12 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "foo.twig" %} + +{% block content %}{{ parent() }}FOO{{ parent() }}{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}BAR{% endblock %} +--DATA-- +return [] +--EXPECT-- +BARFOOBAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_as_template_wrapper.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_as_template_wrapper.test new file mode 100644 index 0000000000000000000000000000000000000000..1aaed556c5761bfe4f6032cb9a717f4d6472fb08 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_as_template_wrapper.test @@ -0,0 +1,12 @@ +--TEST-- +"extends" tag with a parent as a Twig_TemplateWrapper instance +--TEMPLATE-- +{% extends foo %} + +{% block content %}New{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}Default{% endblock %} +--DATA-- +return ['foo' => $twig->load('foo.twig')] +--EXPECT-- +New diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_change.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_change.test new file mode 100644 index 0000000000000000000000000000000000000000..01bd544f83c21e00b76fe7695ad18b767fe1c8b0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_change.test @@ -0,0 +1,16 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends foo ? 'foo.twig' : 'bar.twig' %} +--TEMPLATE(foo.twig)-- +FOO +--TEMPLATE(bar.twig)-- +BAR +--DATA-- +return ['foo' => true] +--EXPECT-- +FOO +--DATA-- +return ['foo' => false] +--EXPECT-- +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_isolation.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_isolation.test new file mode 100644 index 0000000000000000000000000000000000000000..58a37bd9021a6b4ad58d4155f26b4136d4665ecb --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_isolation.test @@ -0,0 +1,20 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "base.twig" %} +{% block content %}{% include "included.twig" %}{% endblock %} + +{% block footer %}Footer{% endblock %} +--TEMPLATE(included.twig)-- +{% extends "base.twig" %} +{% block content %}Included Content{% endblock %} +--TEMPLATE(base.twig)-- +{% block content %}Default Content{% endblock %} + +{% block footer %}Default Footer{% endblock %} +--DATA-- +return [] +--EXPECT-- +Included Content +Default Footer +Footer diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_nested.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_nested.test new file mode 100644 index 0000000000000000000000000000000000000000..d4347bac4f8b4bd54c154bd2d4b12218652657d4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_nested.test @@ -0,0 +1,28 @@ +--TEST-- +"extends" tag +--TEMPLATE-- +{% extends "foo.twig" %} + +{% block content %} + {% block inside %} + INSIDE OVERRIDDEN + {% endblock %} + + BEFORE + {{ parent() }} + AFTER +{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %} + BAR +{% endblock %} +--DATA-- +return [] +--EXPECT-- + +INSIDE OVERRIDDEN + + BEFORE + BAR + + AFTER diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_without_extends.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_without_extends.test new file mode 100644 index 0000000000000000000000000000000000000000..6d98891553d07630f4cb015f23c73bb12ae8b954 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_without_extends.test @@ -0,0 +1,8 @@ +--TEST-- +"parent" tag +--TEMPLATE-- +{% block content %} + {{ parent() }} +{% endblock %} +--EXCEPTION-- +Twig\Error\SyntaxError: Calling "parent" on a template that does not extend nor "use" another template is forbidden in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_without_extends_but_traits.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_without_extends_but_traits.test new file mode 100644 index 0000000000000000000000000000000000000000..39882b8b39d3714e35d1a87eca28505e97742ffd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/parent_without_extends_but_traits.test @@ -0,0 +1,14 @@ +--TEST-- +"parent" tag +--TEMPLATE-- +{% use 'foo.twig' %} + +{% block content %} + {{ parent() }} +{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}BAR{% endblock %} +--DATA-- +return [] +--EXPECT-- +BAR diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/template_instance.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/template_instance.test new file mode 100644 index 0000000000000000000000000000000000000000..a5a223886dc640742a579ff9326c3c061b6e4b5c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/template_instance.test @@ -0,0 +1,14 @@ +--TEST-- +"extends" tag accepts Twig_Template instance +--TEMPLATE-- +{% extends foo %} + +{% block content %} +{{ parent() }}FOO +{% endblock %} +--TEMPLATE(foo.twig)-- +{% block content %}BAR{% endblock %} +--DATA-- +return ['foo' => $twig->load('foo.twig')] +--EXPECT-- +BARFOO diff --git a/vendor/twig/twig/tests/Fixtures/tags/inheritance/use.test b/vendor/twig/twig/tests/Fixtures/tags/inheritance/use.test new file mode 100644 index 0000000000000000000000000000000000000000..4df32ee9d3f24b8d0aecc96f843adec898c36d58 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/inheritance/use.test @@ -0,0 +1,44 @@ +--TEST-- +"parent" function +--TEMPLATE-- +{% extends "parent.twig" %} + +{% use "use1.twig" %} +{% use "use2.twig" %} + +{% block content_parent %} + {{ parent() }} +{% endblock %} + +{% block content_use1 %} + {{ parent() }} +{% endblock %} + +{% block content_use2 %} + {{ parent() }} +{% endblock %} + +{% block content %} + {{ block('content_use1_only') }} + {{ block('content_use2_only') }} +{% endblock %} +--TEMPLATE(parent.twig)-- +{% block content_parent 'content_parent' %} +{% block content_use1 'content_parent' %} +{% block content_use2 'content_parent' %} +{% block content '' %} +--TEMPLATE(use1.twig)-- +{% block content_use1 'content_use1' %} +{% block content_use2 'content_use1' %} +{% block content_use1_only 'content_use1_only' %} +--TEMPLATE(use2.twig)-- +{% block content_use2 'content_use2' %} +{% block content_use2_only 'content_use2_only' %} +--DATA-- +return [] +--EXPECT-- + content_parent + content_use1 + content_use2 + content_use1_only + content_use2_only diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/basic.test b/vendor/twig/twig/tests/Fixtures/tags/macro/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..ae090f9a06911e925230150cc5294e874e0f44fe --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/basic.test @@ -0,0 +1,17 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% import _self as macros %} + +{{ macros.input('username') }} +{{ macros.input('password', null, 'password', 1) }} + +{% macro input(name, value, type, size) %} + <input type="{{ type|default("text") }}" name="{{ name }}" value="{{ value|e|default('') }}" size="{{ size|default(20) }}"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- + <input type="text" name="username" value="" size="20"> + + <input type="password" name="password" value="" size="1"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/endmacro_name.test b/vendor/twig/twig/tests/Fixtures/tags/macro/endmacro_name.test new file mode 100644 index 0000000000000000000000000000000000000000..3f3caf7773b30878d21152a594d0efbb66dc096e --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/endmacro_name.test @@ -0,0 +1,16 @@ +--TEST-- +"macro" tag supports name for endmacro +--TEMPLATE-- +{% import _self as macros %} + +{{ macros.foo() }} +{{ macros.bar() }} + +{% macro foo() %}foo{% endmacro %} +{% macro bar() %}bar{% endmacro bar %} +--DATA-- +return [] +--EXPECT-- +foo +bar + diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/external.test b/vendor/twig/twig/tests/Fixtures/tags/macro/external.test new file mode 100644 index 0000000000000000000000000000000000000000..b28ca19f029ebe1f945cde0c8584197f0bb886b3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/external.test @@ -0,0 +1,17 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% import 'forms.twig' as forms %} + +{{ forms.input('username') }} +{{ forms.input('password', null, 'password', 1) }} +--TEMPLATE(forms.twig)-- +{% macro input(name, value, type, size) %} + <input type="{{ type|default("text") }}" name="{{ name }}" value="{{ value|e|default('') }}" size="{{ size|default(20) }}"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- + <input type="text" name="username" value="" size="20"> + + <input type="password" name="password" value="" size="1"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from.test new file mode 100644 index 0000000000000000000000000000000000000000..8b9aae87890f34e791425ac62b42bfcb743addd8 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% from 'forms.twig' import foo %} +{% from 'forms.twig' import foo as foobar, bar %} + +{{ foo('foo') }} +{{ foobar('foo') }} +{{ bar('foo') }} +--TEMPLATE(forms.twig)-- +{% macro foo(name) %}foo{{ name }}{% endmacro %} +{% macro bar(name) %}bar{{ name }}{% endmacro %} +--DATA-- +return [] +--EXPECT-- +foofoo +foofoo +barfoo diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_in_block_is_local.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_in_block_is_local.test new file mode 100644 index 0000000000000000000000000000000000000000..0c89ce62a8f5cf9fdbb4dd89e58213b2b05a26b5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_in_block_is_local.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% block foo %} + {%- from _self import input as linput %} +{% endblock %} + +{% block bar %} + {{- linput('username') }} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unknown "linput" function in "index.twig" at line 7. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_local_override.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_local_override.test new file mode 100644 index 0000000000000000000000000000000000000000..27bfbaee1f19c63e8b57e211ed6e6de0b9e84846 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_local_override.test @@ -0,0 +1,28 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{%- from _self import input %} + +{% block foo %} + {%- from "macros" import input %} + {{- input('username') }} +{% endblock %} + +{% block bar %} + {{- input('username') }} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--TEMPLATE(macros)-- +{% macro input(name) %} + <input name="{{ name }}" value="local"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +<input name="username" value="local"> + + +<input name="username"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_macro_in_a_macro.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_macro_in_a_macro.test new file mode 100644 index 0000000000000000000000000000000000000000..87ac25c3103003bad44e03236e3ee98e0b30a4c2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_macro_in_a_macro.test @@ -0,0 +1,18 @@ +--TEST-- +"from" tag with syntax error +--TEMPLATE-- +{% from _self import another, foo %} + +{{ foo() }} + +{% macro foo() %} + {{ another() }} +{% endmacro %} + +{% macro another() %} + OK +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unknown "another" function in "index.twig" at line 7. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_nested_blocks.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_nested_blocks.test new file mode 100644 index 0000000000000000000000000000000000000000..8ede5db5094fac92ecc2f6fcce9e5b7552059b82 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_nested_blocks.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% block foo %} + {%- from _self import input as linput %} + + {% block bar %} + {{- linput('username') }} + {% endblock %} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unknown "linput" function in "index.twig" at line 6. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_nested_blocks_with_global_macro.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_nested_blocks_with_global_macro.test new file mode 100644 index 0000000000000000000000000000000000000000..f737bf0d8b5e06fdffd03c627ae4d44988846862 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_nested_blocks_with_global_macro.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{%- from _self import input %} + +{% block foo %} + {% block bar %} + {{- input('username') }} + {% endblock %} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unknown "input" function in "index.twig" at line 6. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_syntax_error.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_syntax_error.test new file mode 100644 index 0000000000000000000000000000000000000000..6223cfe947a8261e6c5decb8b0b1396d3023adf3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_syntax_error.test @@ -0,0 +1,8 @@ +--TEST-- +"from" tag with syntax error +--TEMPLATE-- +{% from 'forms.twig' %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected token "end of statement block" ("name" expected with value "import") in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/from_with_reserved_name.test b/vendor/twig/twig/tests/Fixtures/tags/macro/from_with_reserved_name.test new file mode 100644 index 0000000000000000000000000000000000000000..19adb9df4cec1113a211559c4139c550ac40a5aa --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/from_with_reserved_name.test @@ -0,0 +1,8 @@ +--TEST-- +"from" tag with reserved name +--TEMPLATE-- +{% from 'forms.twig' import templateName %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: "templateName" cannot be an imported macro as it is a reserved keyword in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/global.test b/vendor/twig/twig/tests/Fixtures/tags/macro/global.test new file mode 100644 index 0000000000000000000000000000000000000000..832740eac5612f57ea35e9ef0de43c0fb8162014 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/global.test @@ -0,0 +1,14 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% from 'forms.twig' import foo %} + +{{ foo('foo') }} +{{ foo() }} +--TEMPLATE(forms.twig)-- +{% macro foo(name) %}{{ name|default('foo') }}{{ global }}{% endmacro %} +--DATA-- +return [] +--EXPECT-- +fooglobal +fooglobal diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_and_blocks.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_and_blocks.test new file mode 100644 index 0000000000000000000000000000000000000000..721f5506a5ab2a442596e4acabc37e9255bb6529 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_and_blocks.test @@ -0,0 +1,36 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% import _self as macros %} +{% from _self import input %} + +{% block foo %} + {{- macros.input('username') }} + {{- input('username') }} + + {%- import _self as lmacros %} + {%- from _self import input as linput %} + + {{- lmacros.input('username') }} + {{- linput('username') }} +{% endblock %} + +{% block bar %} + {{- macros.input('username') }} + {{- input('username') }} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +<input name="username"> +<input name="username"> +<input name="username"> +<input name="username"> + + +<input name="username"> +<input name="username"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_from_string_template.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_from_string_template.test new file mode 100644 index 0000000000000000000000000000000000000000..6c1817be7db40f04059847cc0729aa25cff41c42 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_from_string_template.test @@ -0,0 +1,10 @@ +--TEST-- +"import" tag with a template as string +--TEMPLATE-- +{% import template_from_string("{% macro test() %}ok{% endmacro %}") as m %} +{{ m.test() }} +--TEMPLATE(forms.twig)-- +--DATA-- +return [] +--EXPECT-- +ok diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_in_block_is_local.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_in_block_is_local.test new file mode 100644 index 0000000000000000000000000000000000000000..9443e122215446fc1942dbc9677013fe5c2f06fd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_in_block_is_local.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% block foo %} + {%- import _self as lmacros %} +{% endblock %} + +{% block bar %} + {{- lmacros.input('username') }} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "lmacros" does not exist in "index.twig" at line 7. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_local_override.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_local_override.test new file mode 100644 index 0000000000000000000000000000000000000000..7cf0552f836ce5a36d2b2612614b8d2ce664457c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_local_override.test @@ -0,0 +1,28 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{%- import _self as macros %} + +{% block foo %} + {%- import "macros" as macros %} + {{- macros.input('username') }} +{% endblock %} + +{% block bar %} + {{- macros.input('username') }} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--TEMPLATE(macros)-- +{% macro input(name) %} + <input name="{{ name }}" value="local"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +<input name="username" value="local"> + + +<input name="username"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_macro_in_a_macro.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_macro_in_a_macro.test new file mode 100644 index 0000000000000000000000000000000000000000..d224482e197725c6c7daac9eba4dc79dd4e25014 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_macro_in_a_macro.test @@ -0,0 +1,18 @@ +--TEST-- +"import" tag with syntax error +--TEMPLATE-- +{% import _self as foo %} + +{{ foo.foo() }} + +{% macro foo() %} + {{ foo.another() }} +{% endmacro %} + +{% macro another() %} + OK +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "foo" does not exist in "index.twig" at line 7. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_nested_blocks.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_nested_blocks.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..e822c7ff48258b49891decf44520f15087ed2b1c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_nested_blocks.legacy.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% block foo %} + {%- import _self as lmacros %} + + {% block bar %} + {{- lmacros.input('username') }} + {% endblock %} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +<input name="username"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_nested_blocks_with_global_macro.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_nested_blocks_with_global_macro.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..697d665f84f523677eedaf550637ac0f8009905c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_nested_blocks_with_global_macro.legacy.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{%- import _self as macros %} + +{% block foo %} + {% block bar %} + {{- macros.input('username') }} + {% endblock %} +{% endblock %} + +{% macro input(name) -%} + <input name="{{ name }}"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +<input name="username"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_self_parent.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_self_parent.test new file mode 100644 index 0000000000000000000000000000000000000000..24a8cdb50b7d22c0e12158a6f2e60ee3d0769802 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_self_parent.test @@ -0,0 +1,23 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% extends "parent" %} +{% import _self as me %} + +{% block test %} + {{ me.hello() }} +{% endblock test %} +--TEMPLATE(parent)-- +{% import _self as me %} + +{% block test %} +Hello +{% endblock test %} + +{% macro hello() %} + Test +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +Test diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_syntax_error.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_syntax_error.test new file mode 100644 index 0000000000000000000000000000000000000000..b9817f0eed63523308d37f1e8e5a0041aed30a8f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_syntax_error.test @@ -0,0 +1,10 @@ +--TEST-- +"import" tag with reserved name +--TEMPLATE-- +{% import 'forms.twig' %} + +{{ macros.parent() }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected token "end of statement block" ("name" expected with value "as") in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/import_with_reserved_name.test b/vendor/twig/twig/tests/Fixtures/tags/macro/import_with_reserved_name.test new file mode 100644 index 0000000000000000000000000000000000000000..34b8d43a25ae24fa9deb80e816f085148d025db1 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/import_with_reserved_name.test @@ -0,0 +1,10 @@ +--TEST-- +"from" tag with reserved name +--TEMPLATE-- +{% import 'forms.twig' as macros %} + +{{ macros.parent() }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: "parent" cannot be called as macro as it is a reserved keyword in "index.twig" at line 4. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/reserved_name.test b/vendor/twig/twig/tests/Fixtures/tags/macro/reserved_name.test new file mode 100644 index 0000000000000000000000000000000000000000..e58dd7caccbc18162ac9e5ac56e3907d3dd09bcc --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/reserved_name.test @@ -0,0 +1,10 @@ +--TEST-- +"macro" tag with reserved name +--TEMPLATE-- +{% macro parent(arg1, arg2) %} + parent +{% endmacro %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: "parent" cannot be used as a macro name as it is a reserved keyword in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/self_import.test b/vendor/twig/twig/tests/Fixtures/tags/macro/self_import.test new file mode 100644 index 0000000000000000000000000000000000000000..ca3157dd88451a0a605e7b16a2d45d2a9b90aa11 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/self_import.test @@ -0,0 +1,17 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% import _self as forms %} + +{{ forms.input('username') }} +{{ forms.input('password', null, 'password', 1) }} + +{% macro input(name, value, type, size) %} + <input type="{{ type|default("text") }}" name="{{ name }}" value="{{ value|e|default('') }}" size="{{ size|default(20) }}"> +{% endmacro %} +--DATA-- +return [] +--EXPECT-- + <input type="text" name="username" value="" size="20"> + + <input type="password" name="password" value="" size="1"> diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/special_chars.test b/vendor/twig/twig/tests/Fixtures/tags/macro/special_chars.test new file mode 100644 index 0000000000000000000000000000000000000000..491e91e80d70c1659455a13d72602bfe26c6a647 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/special_chars.test @@ -0,0 +1,14 @@ +--TEST-- +"§" as a macro name +--TEMPLATE-- +{% import _self as macros %} + +{{ macros.§('foo') }} + +{% macro §(foo) %} + §{{ foo }}§ +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +§foo§ diff --git a/vendor/twig/twig/tests/Fixtures/tags/macro/super_globals.test b/vendor/twig/twig/tests/Fixtures/tags/macro/super_globals.test new file mode 100644 index 0000000000000000000000000000000000000000..643697ce28cabfee458c56229a6b50d69c197361 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/macro/super_globals.test @@ -0,0 +1,14 @@ +--TEST-- +Super globals as macro arguments +--TEMPLATE-- +{% import _self as macros %} + +{{ macros.foo('foo') }} + +{% macro foo(GET) %} + {{ GET }} +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/raw/basic.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/raw/basic.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..7875b2af72331d977a5cd9decb386c8c1686d028 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/raw/basic.legacy.test @@ -0,0 +1,10 @@ +--TEST-- +"raw" tag +--TEMPLATE-- +{% raw %} +{{ foo }} +{% endraw %} +--DATA-- +return [] +--EXPECT-- +{{ foo }} diff --git a/vendor/twig/twig/tests/Fixtures/tags/raw/mixed_usage_with_raw.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/raw/mixed_usage_with_raw.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..d4c8dd2cd1fc07fea17a0446ce6e078d864771d7 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/raw/mixed_usage_with_raw.legacy.test @@ -0,0 +1,10 @@ +--TEST-- +"raw" tag +--TEMPLATE-- +{% raw %} +{{ foo }} +{% endverbatim %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected end of file: Unclosed "raw" block in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/raw/whitespace_control.legacy.test b/vendor/twig/twig/tests/Fixtures/tags/raw/whitespace_control.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..11f42025e13d2c08680a017cd6a42a0a1d5815db --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/raw/whitespace_control.legacy.test @@ -0,0 +1,56 @@ +--TEST-- +"raw" tag +--TEMPLATE-- +1*** + +{%- raw %} + {{ 'bla' }} +{% endraw %} + +1*** +2*** + +{%- raw -%} + {{ 'bla' }} +{% endraw %} + +2*** +3*** + +{%- raw -%} + {{ 'bla' }} +{% endraw -%} + +3*** +4*** + +{%- raw -%} + {{ 'bla' }} +{%- endraw %} + +4*** +5*** + +{%- raw -%} + {{ 'bla' }} +{%- endraw -%} + +5*** +--DATA-- +return [] +--EXPECT-- +1*** + {{ 'bla' }} + + +1*** +2***{{ 'bla' }} + + +2*** +3***{{ 'bla' }} +3*** +4***{{ 'bla' }} + +4*** +5***{{ 'bla' }}5*** diff --git a/vendor/twig/twig/tests/Fixtures/tags/sandbox/array.test b/vendor/twig/twig/tests/Fixtures/tags/sandbox/array.test new file mode 100644 index 0000000000000000000000000000000000000000..b432427e4a638079edf4d67fb76d570081078d56 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/sandbox/array.test @@ -0,0 +1,16 @@ +--TEST-- +sandbox tag +--TEMPLATE-- +{%- sandbox %} + {%- include "foo.twig" %} +{%- endsandbox %} +--TEMPLATE(foo.twig)-- +{{ [a][0] }} +{{ dump([a][0]) }} +--DATA-- +return ['a' => 'b'] +--CONFIG-- +return ['autoescape' => false, 'debug' => true] +--EXPECT-- +b +string(1) "b" diff --git a/vendor/twig/twig/tests/Fixtures/tags/sandbox/not_valid1.test b/vendor/twig/twig/tests/Fixtures/tags/sandbox/not_valid1.test new file mode 100644 index 0000000000000000000000000000000000000000..e26a78bc1576df3d70fc79230ab2a2b52246573d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/sandbox/not_valid1.test @@ -0,0 +1,11 @@ +--TEST-- +sandbox tag +--TEMPLATE-- +{%- sandbox %} + {%- include "foo.twig" %} + a +{%- endsandbox %} +--TEMPLATE(foo.twig)-- +foo +--EXCEPTION-- +Twig\Error\SyntaxError: Only "include" tags are allowed within a "sandbox" section in "index.twig" at line 4. diff --git a/vendor/twig/twig/tests/Fixtures/tags/sandbox/not_valid2.test b/vendor/twig/twig/tests/Fixtures/tags/sandbox/not_valid2.test new file mode 100644 index 0000000000000000000000000000000000000000..bb2a329715aa20d74484396ef9afc9fa9b430279 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/sandbox/not_valid2.test @@ -0,0 +1,14 @@ +--TEST-- +sandbox tag +--TEMPLATE-- +{%- sandbox %} + {%- include "foo.twig" %} + + {% if 1 %} + {%- include "foo.twig" %} + {% endif %} +{%- endsandbox %} +--TEMPLATE(foo.twig)-- +foo +--EXCEPTION-- +Twig\Error\SyntaxError: Only "include" tags are allowed within a "sandbox" section in "index.twig" at line 5. diff --git a/vendor/twig/twig/tests/Fixtures/tags/sandbox/simple.test b/vendor/twig/twig/tests/Fixtures/tags/sandbox/simple.test new file mode 100644 index 0000000000000000000000000000000000000000..4d232d8bbd2447d00d79dcb7a0edc2c4a144ab1f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/sandbox/simple.test @@ -0,0 +1,22 @@ +--TEST-- +sandbox tag +--TEMPLATE-- +{%- sandbox %} + {%- include "foo.twig" %} +{%- endsandbox %} + +{%- sandbox %} + {%- include "foo.twig" %} + {%- include "foo.twig" %} +{%- endsandbox %} + +{%- sandbox %}{% include "foo.twig" %}{% endsandbox %} +--TEMPLATE(foo.twig)-- +foo +--DATA-- +return [] +--EXPECT-- +foo +foo +foo +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/basic.test b/vendor/twig/twig/tests/Fixtures/tags/set/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..aae1427e8103cd7617a82c53b5d7e74ce29f9d08 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/basic.test @@ -0,0 +1,20 @@ +--TEST-- +"set" tag +--TEMPLATE-- +{% set foo = 'foo' %} +{% set bar = 'foo<br />' %} + +{{ foo }} +{{ bar }} + +{% set foo, bar = 'foo', 'bar' %} + +{{ foo }}{{ bar }} +--DATA-- +return [] +--EXPECT-- +foo +foo<br /> + + +foobar diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/capture-empty.test b/vendor/twig/twig/tests/Fixtures/tags/set/capture-empty.test new file mode 100644 index 0000000000000000000000000000000000000000..97fc43cc2ab57f7a01b0599776d5c06ab9a70c9d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/capture-empty.test @@ -0,0 +1,9 @@ +--TEST-- +"set" tag block empty capture +--TEMPLATE-- +{% set foo %}{% endset %} + +{% if foo %}FAIL{% endif %} +--DATA-- +return [] +--EXPECT-- diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/capture.test b/vendor/twig/twig/tests/Fixtures/tags/set/capture.test new file mode 100644 index 0000000000000000000000000000000000000000..c3faf250038f5b20b6b7a175de4d332dcd2f0791 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/capture.test @@ -0,0 +1,10 @@ +--TEST-- +"set" tag block capture +--TEMPLATE-- +{% set foo %}f<br />o<br />o{% endset %} + +{{ foo }} +--DATA-- +return [] +--EXPECT-- +f<br />o<br />o diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/capture_scope.test b/vendor/twig/twig/tests/Fixtures/tags/set/capture_scope.test new file mode 100644 index 0000000000000000000000000000000000000000..bb2bbebaf0eb94acdeb9e7b5773b9828cfd0d752 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/capture_scope.test @@ -0,0 +1,10 @@ +--TEST-- +"set" tag block capture +--TEMPLATE-- +{% set foo %}{{ foo }}{% endset %} + +{{ foo }} +--DATA-- +return ['foo' => 'foo'] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/expression.test b/vendor/twig/twig/tests/Fixtures/tags/set/expression.test new file mode 100644 index 0000000000000000000000000000000000000000..bd472771a66c69311c06a4d94ab227bec8e4aaae --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/expression.test @@ -0,0 +1,12 @@ +--TEST-- +"set" tag +--TEMPLATE-- +{% set foo, bar = 'foo' ~ 'bar', 'bar' ~ 'foo' %} + +{{ foo }} +{{ bar }} +--DATA-- +return [] +--EXPECT-- +foobar +barfoo diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/inheritance.test b/vendor/twig/twig/tests/Fixtures/tags/set/inheritance.test new file mode 100644 index 0000000000000000000000000000000000000000..79e89ce79b7d1c21c436050e6e0dbc3f9c438d6f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/inheritance.test @@ -0,0 +1,24 @@ +--TEST-- +"set" tag with inheritance +--TEMPLATE-- +{% extends "layout.twig" %} + +{% set bar %}bar{% endset %} + +{% block var_from_child %} + {{- bar -}} +{% endblock %} +--TEMPLATE(layout.twig)-- +{% set foo %}foo{% endset %} + +{% block var_from_layout %} + {{- foo -}} +{% endblock %} + +{% block var_from_child %} +{% endblock %} +--DATA-- +return [] +--EXPECT-- +foo +bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/inheritance_overriding.test b/vendor/twig/twig/tests/Fixtures/tags/set/inheritance_overriding.test new file mode 100644 index 0000000000000000000000000000000000000000..2d23c83ae6725b5aaa0953a038009cdf5c060e38 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/inheritance_overriding.test @@ -0,0 +1,24 @@ +--TEST-- +"set" tag with inheritance +--TEMPLATE-- +{% extends "layout.twig" %} + +{% set foo %}bar{% endset %} + +{% block var_from_child %} + {{- foo -}} +{% endblock %} +--TEMPLATE(layout.twig)-- +{% set foo %}foo{% endset %} + +{% block var_from_layout %} + {{- foo -}} +{% endblock %} + +{% block var_from_child %} +{% endblock %} +--DATA-- +return [] +--EXPECT-- +foo +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/set/mutating.test b/vendor/twig/twig/tests/Fixtures/tags/set/mutating.test new file mode 100644 index 0000000000000000000000000000000000000000..ae388bb873a3f3f059698ede4c29e7eb498851f4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/set/mutating.test @@ -0,0 +1,17 @@ +--TEST-- +"set" tag +--TEMPLATE-- +{% set foo = "foo" %} + +{% set bar %} + {%- set foo = "bar" -%} + bar +{% endset %} + +{{ foo }} +{{ bar }} +--DATA-- +return [] +--EXPECT-- +bar +bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/spaceless/simple.test b/vendor/twig/twig/tests/Fixtures/tags/spaceless/simple.test new file mode 100644 index 0000000000000000000000000000000000000000..98bd27a13a7bf460c1e730ea8f2dcbc6a8e27434 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/spaceless/simple.test @@ -0,0 +1,12 @@ +--TEST-- +"spaceless" tag removes whites between HTML tags +--TEMPLATE-- +{% spaceless %} + + <div> <div> foo </div> </div> + +{% endspaceless %} +--DATA-- +return [] +--EXPECT-- +<div><div> foo </div></div> diff --git a/vendor/twig/twig/tests/Fixtures/tags/special_chars.test b/vendor/twig/twig/tests/Fixtures/tags/special_chars.test new file mode 100644 index 0000000000000000000000000000000000000000..64ffd1d76bf70c56809c91c0435bea52b4b00f7c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/special_chars.test @@ -0,0 +1,8 @@ +--TEST-- +"§" custom tag +--TEMPLATE-- +{% § %} +--DATA-- +return [] +--EXPECT-- +§ diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/aliases.test b/vendor/twig/twig/tests/Fixtures/tags/use/aliases.test new file mode 100644 index 0000000000000000000000000000000000000000..b6b1d5c668894281f540162e4e79409b19344438 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/aliases.test @@ -0,0 +1,12 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "blocks.twig" with content as foo %} + +{{ block('foo') }} +--TEMPLATE(blocks.twig)-- +{% block content 'foo' %} +--DATA-- +return [] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/basic.test b/vendor/twig/twig/tests/Fixtures/tags/use/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..be622a10e20424baa57ea56cefbfa309eaa2541f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/basic.test @@ -0,0 +1,12 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "blocks.twig" %} + +{{ block('content') }} +--TEMPLATE(blocks.twig)-- +{% block content 'foo' %} +--DATA-- +return [] +--EXPECT-- +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/deep.test b/vendor/twig/twig/tests/Fixtures/tags/use/deep.test new file mode 100644 index 0000000000000000000000000000000000000000..771ba642b905dfeefffe4ea2ec0d2111b6bd3039 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/deep.test @@ -0,0 +1,22 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "foo.twig" %} + +{{ block('content') }} +{{ block('foo') }} +{{ block('bar') }} +--TEMPLATE(foo.twig)-- +{% use "bar.twig" %} + +{% block content 'foo' %} +{% block foo 'foo' %} +--TEMPLATE(bar.twig)-- +{% block content 'bar' %} +{% block bar 'bar' %} +--DATA-- +return [] +--EXPECT-- +foo +foo +bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/deep_empty.test b/vendor/twig/twig/tests/Fixtures/tags/use/deep_empty.test new file mode 100644 index 0000000000000000000000000000000000000000..f14ce83de5e7e75b1a6eec7ddd620f710604b471 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/deep_empty.test @@ -0,0 +1,10 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "foo.twig" %} +--TEMPLATE(foo.twig)-- +{% use "bar.twig" %} +--TEMPLATE(bar.twig)-- +--DATA-- +return [] +--EXPECT-- diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/inheritance.test b/vendor/twig/twig/tests/Fixtures/tags/use/inheritance.test new file mode 100644 index 0000000000000000000000000000000000000000..1edeaa1115d06f632796b8b80c216b1ff66fb801 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/inheritance.test @@ -0,0 +1,25 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "parent.twig" %} + +{{ block('container') }} +--TEMPLATE(parent.twig)-- +{% use "ancestor.twig" %} + +{% block sub_container %} + <div class="overridden_sub_container">overridden sub_container</div> +{% endblock %} +--TEMPLATE(ancestor.twig)-- +{% block container %} + <div class="container">{{ block('sub_container') }}</div> +{% endblock %} + +{% block sub_container %} + <div class="sub_container">sub_container</div> +{% endblock %} +--DATA-- +return [] +--EXPECT-- +<div class="container"> <div class="overridden_sub_container">overridden sub_container</div> +</div> diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/inheritance2.test b/vendor/twig/twig/tests/Fixtures/tags/use/inheritance2.test new file mode 100644 index 0000000000000000000000000000000000000000..accec5094b1aae0c68a0975ecc98135d31962c5a --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/inheritance2.test @@ -0,0 +1,24 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "ancestor.twig" %} +{% use "parent.twig" %} + +{{ block('container') }} +--TEMPLATE(parent.twig)-- +{% block sub_container %} + <div class="overridden_sub_container">overridden sub_container</div> +{% endblock %} +--TEMPLATE(ancestor.twig)-- +{% block container %} + <div class="container">{{ block('sub_container') }}</div> +{% endblock %} + +{% block sub_container %} + <div class="sub_container">sub_container</div> +{% endblock %} +--DATA-- +return [] +--EXPECT-- +<div class="container"> <div class="overridden_sub_container">overridden sub_container</div> +</div> diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/multiple.test b/vendor/twig/twig/tests/Fixtures/tags/use/multiple.test new file mode 100644 index 0000000000000000000000000000000000000000..85a63958dfc46b6474f0a5c43c3d2d5a20476a40 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/multiple.test @@ -0,0 +1,21 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "foo.twig" %} +{% use "bar.twig" %} + +{{ block('content') }} +{{ block('foo') }} +{{ block('bar') }} +--TEMPLATE(foo.twig)-- +{% block content 'foo' %} +{% block foo 'foo' %} +--TEMPLATE(bar.twig)-- +{% block content 'bar' %} +{% block bar 'bar' %} +--DATA-- +return [] +--EXPECT-- +bar +foo +bar diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/multiple_aliases.test b/vendor/twig/twig/tests/Fixtures/tags/use/multiple_aliases.test new file mode 100644 index 0000000000000000000000000000000000000000..413bdfa4ddf33657c870cfaf2ae5edc05f207657 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/multiple_aliases.test @@ -0,0 +1,23 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use "foo.twig" with content as foo_content %} +{% use "bar.twig" %} + +{{ block('content') }} +{{ block('foo') }} +{{ block('bar') }} +{{ block('foo_content') }} +--TEMPLATE(foo.twig)-- +{% block content 'foo' %} +{% block foo 'foo' %} +--TEMPLATE(bar.twig)-- +{% block content 'bar' %} +{% block bar 'bar' %} +--DATA-- +return [] +--EXPECT-- +bar +foo +bar +foo diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/parent_block.test b/vendor/twig/twig/tests/Fixtures/tags/use/parent_block.test new file mode 100644 index 0000000000000000000000000000000000000000..49328f6e87b0bca7d4f14b8ca8acf6df16740c43 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/parent_block.test @@ -0,0 +1,24 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use 'file2.html.twig' with foobar as base_base_foobar %} +{% block foobar %} + {{- block('base_base_foobar') -}} + Content of block (second override) +{% endblock foobar %} +--TEMPLATE(file2.html.twig)-- +{% use 'file1.html.twig' with foobar as base_foobar %} +{% block foobar %} + {{- block('base_foobar') -}} + Content of block (first override) +{% endblock foobar %} +--TEMPLATE(file1.html.twig)-- +{% block foobar -%} + Content of block +{% endblock foobar %} +--DATA-- +return [] +--EXPECT-- +Content of block +Content of block (first override) +Content of block (second override) diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/parent_block2.test b/vendor/twig/twig/tests/Fixtures/tags/use/parent_block2.test new file mode 100644 index 0000000000000000000000000000000000000000..274baa82166ab99704d66b93a69fef40a6803348 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/parent_block2.test @@ -0,0 +1,24 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use 'file2.html.twig'%} +{% block foobar %} + {{- parent() -}} + Content of block (second override) +{% endblock foobar %} +--TEMPLATE(file2.html.twig)-- +{% use 'file1.html.twig' %} +{% block foobar %} + {{- parent() -}} + Content of block (first override) +{% endblock foobar %} +--TEMPLATE(file1.html.twig)-- +{% block foobar -%} + Content of block +{% endblock foobar %} +--DATA-- +return [] +--EXPECT-- +Content of block +Content of block (first override) +Content of block (second override) diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/parent_block3.test b/vendor/twig/twig/tests/Fixtures/tags/use/parent_block3.test new file mode 100644 index 0000000000000000000000000000000000000000..f6f221273f2b65c450284f4197c36e8219048a1c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/parent_block3.test @@ -0,0 +1,38 @@ +--TEST-- +"use" tag +--TEMPLATE-- +{% use 'file2.html.twig' %} +{% use 'file1.html.twig' with foo %} +{% block foo %} + {{- parent() -}} + Content of foo (second override) +{% endblock foo %} +{% block bar %} + {{- parent() -}} + Content of bar (second override) +{% endblock bar %} +--TEMPLATE(file2.html.twig)-- +{% use 'file1.html.twig' %} +{% block foo %} + {{- parent() -}} + Content of foo (first override) +{% endblock foo %} +{% block bar %} + {{- parent() -}} + Content of bar (first override) +{% endblock bar %} +--TEMPLATE(file1.html.twig)-- +{% block foo -%} + Content of foo +{% endblock foo %} +{% block bar -%} + Content of bar +{% endblock bar %} +--DATA-- +return [] +--EXPECT-- +Content of foo +Content of foo (first override) +Content of foo (second override) +Content of bar +Content of bar (second override) diff --git a/vendor/twig/twig/tests/Fixtures/tags/use/use_with_parent.test b/vendor/twig/twig/tests/Fixtures/tags/use/use_with_parent.test new file mode 100644 index 0000000000000000000000000000000000000000..fad9a2d18964989910271ac57eb6db61e7c60baf --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/use/use_with_parent.test @@ -0,0 +1,24 @@ +--TEST-- +"use" tag with a parent block +--TEMPLATE-- +{% extends "parent.twig" %} + +{% use 'blocks.twig' %} + +{% block body %} + {{ parent() -}} + CHILD + {{ block('content') }} +{% endblock %} +--TEMPLATE(parent.twig)-- +{% block body %} + PARENT +{% endblock %} +--TEMPLATE(blocks.twig)-- +{% block content 'BLOCK' %} +--DATA-- +return [] +--EXPECT-- +PARENT +CHILD + BLOCK diff --git a/vendor/twig/twig/tests/Fixtures/tags/verbatim/basic.test b/vendor/twig/twig/tests/Fixtures/tags/verbatim/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..9b60abc49fd79e11e2cd3331a36879f77a30ac24 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/verbatim/basic.test @@ -0,0 +1,10 @@ +--TEST-- +"verbatim" tag +--TEMPLATE-- +{% verbatim %} +{{ foo }} +{% endverbatim %} +--DATA-- +return [] +--EXPECT-- +{{ foo }} diff --git a/vendor/twig/twig/tests/Fixtures/tags/verbatim/mixed_usage_with_raw.test b/vendor/twig/twig/tests/Fixtures/tags/verbatim/mixed_usage_with_raw.test new file mode 100644 index 0000000000000000000000000000000000000000..2177538d51b40f88ab26e1e90b042ff2cfa95af3 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/verbatim/mixed_usage_with_raw.test @@ -0,0 +1,10 @@ +--TEST-- +"verbatim" tag +--TEMPLATE-- +{% verbatim %} +{{ foo }} +{% endraw %} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: Unexpected end of file: Unclosed "verbatim" block in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/verbatim/whitespace_control.test b/vendor/twig/twig/tests/Fixtures/tags/verbatim/whitespace_control.test new file mode 100644 index 0000000000000000000000000000000000000000..501922bddd29eca528ccc8dae049e60bf2f3f526 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/verbatim/whitespace_control.test @@ -0,0 +1,56 @@ +--TEST-- +"verbatim" tag +--TEMPLATE-- +1*** + +{%- verbatim %} + {{ 'bla' }} +{% endverbatim %} + +1*** +2*** + +{%- verbatim -%} + {{ 'bla' }} +{% endverbatim %} + +2*** +3*** + +{%- verbatim -%} + {{ 'bla' }} +{% endverbatim -%} + +3*** +4*** + +{%- verbatim -%} + {{ 'bla' }} +{%- endverbatim %} + +4*** +5*** + +{%- verbatim -%} + {{ 'bla' }} +{%- endverbatim -%} + +5*** +--DATA-- +return [] +--EXPECT-- +1*** + {{ 'bla' }} + + +1*** +2***{{ 'bla' }} + + +2*** +3***{{ 'bla' }} +3*** +4***{{ 'bla' }} + +4*** +5***{{ 'bla' }}5*** diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/basic.test b/vendor/twig/twig/tests/Fixtures/tags/with/basic.test new file mode 100644 index 0000000000000000000000000000000000000000..7c2abd0f9bb20e194a80a24383df28f7a8c013fd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/basic.test @@ -0,0 +1,13 @@ +--TEST-- +"with" tag +--TEMPLATE-- +{% with %} + {% set bar = 'BAZ' %} + {{ foo }}{{ bar }} +{% endwith %} +{{ foo }}{{ bar }} +--DATA-- +return ['foo' => 'foo', 'bar' => 'bar'] +--EXPECT-- +fooBAZ +foobar diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/expression.test b/vendor/twig/twig/tests/Fixtures/tags/with/expression.test new file mode 100644 index 0000000000000000000000000000000000000000..e4433d44c8c614e8f3ed48b271d7e3f270057c39 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/expression.test @@ -0,0 +1,10 @@ +--TEST-- +"with" tag with expression +--TEMPLATE-- +{% with {foo: 'foo', bar: 'BAZ'} %} + {{ foo }}{{ bar }} +{% endwith %} +--DATA-- +return ['foo' => 'baz'] +--EXPECT-- +fooBAZ diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/globals.test b/vendor/twig/twig/tests/Fixtures/tags/with/globals.test new file mode 100644 index 0000000000000000000000000000000000000000..b030e7eff3fe8895331b30563b5cadcaa1b6e4ef --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/globals.test @@ -0,0 +1,10 @@ +--TEST-- +"with" tag +--TEMPLATE-- +{% with [] only %} + {{ global }} +{% endwith %} +--DATA-- +return [] +--EXPECT-- +global diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/iterable.test b/vendor/twig/twig/tests/Fixtures/tags/with/iterable.test new file mode 100644 index 0000000000000000000000000000000000000000..1b0cbc63e5e92135239a75ce698b73815d394809 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/iterable.test @@ -0,0 +1,10 @@ +--TEST-- +"with" tag with an iterable expression +--TEMPLATE-- +{% with vars %} + {{ foo }}{{ bar }} +{% endwith %} +--DATA-- +return ['vars' => new ArrayObject(['foo' => 'baz', 'bar' => 'qux'])] +--EXPECT-- +bazqux diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/nested.test b/vendor/twig/twig/tests/Fixtures/tags/with/nested.test new file mode 100644 index 0000000000000000000000000000000000000000..33ca390b2a8c034bb59206748b5f0c794199c146 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/nested.test @@ -0,0 +1,15 @@ +--TEST-- +nested "with" tags +--TEMPLATE-- +{% set foo, bar = 'foo', 'bar' %} +{% with {bar: 'BAZ'} %} + {% with {foo: 'FOO'} %} + {{ foo }}{{ bar }} + {% endwith %} +{% endwith %} +{{ foo }}{{ bar }} +--DATA-- +return [] +--EXPECT-- +FOOBAZ + foobar diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/with_no_hash.test b/vendor/twig/twig/tests/Fixtures/tags/with/with_no_hash.test new file mode 100644 index 0000000000000000000000000000000000000000..7083050b42e08ab997234fb7eabbd2418f555857 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/with_no_hash.test @@ -0,0 +1,10 @@ +--TEST-- +"with" tag with an expression that is not a hash +--TEMPLATE-- +{% with vars %} + {{ foo }}{{ bar }} +{% endwith %} +--DATA-- +return ['vars' => 'no-hash'] +--EXCEPTION-- +Twig\Error\RuntimeError: Variables passed to the "with" tag must be a hash in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tags/with/with_only.test b/vendor/twig/twig/tests/Fixtures/tags/with/with_only.test new file mode 100644 index 0000000000000000000000000000000000000000..1aca34fc15572ae3082d0da98371b1b1d229d224 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tags/with/with_only.test @@ -0,0 +1,10 @@ +--TEST-- +"with" tag with expression and only +--TEMPLATE-- +{% with {foo: 'foo', bar: 'BAZ'} only %} + {{ foo }}{{ bar }}{{ baz }} +{% endwith %} +--DATA-- +return ['foo' => 'baz', 'baz' => 'baz'] +--EXCEPTION-- +Twig\Error\RuntimeError: Variable "baz" does not exist in "index.twig" at line 3. diff --git a/vendor/twig/twig/tests/Fixtures/tests/array.test b/vendor/twig/twig/tests/Fixtures/tests/array.test new file mode 100644 index 0000000000000000000000000000000000000000..7c9a6c80aa9fa992ba0e92fd4d9e25cbbd728a03 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/array.test @@ -0,0 +1,24 @@ +--TEST-- +array index test +--TEMPLATE-- +{% for key, value in days %} +{{ key }} +{% endfor %} +--DATA-- +return ['days' => [ + 1 => ['money' => 9], + 2 => ['money' => 21], + 3 => ['money' => 38], + 4 => ['money' => 6], + 18 => ['money' => 6], + 19 => ['money' => 3], + 31 => ['money' => 11], +]] +--EXPECT-- +1 +2 +3 +4 +18 +19 +31 diff --git a/vendor/twig/twig/tests/Fixtures/tests/constant.test b/vendor/twig/twig/tests/Fixtures/tests/constant.test new file mode 100644 index 0000000000000000000000000000000000000000..d4a9be7764b2324f8e510e01b93c481995d318d5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/constant.test @@ -0,0 +1,14 @@ +--TEST-- +"const" test +--TEMPLATE-- +{{ 8 is constant('E_NOTICE') ? 'ok' : 'no' }} +{{ 'bar' is constant('Twig\\Tests\\TwigTestFoo::BAR_NAME') ? 'ok' : 'no' }} +{{ value is constant('Twig\\Tests\\TwigTestFoo::BAR_NAME') ? 'ok' : 'no' }} +{{ 2 is constant('ARRAY_AS_PROPS', object) ? 'ok' : 'no' }} +--DATA-- +return ['value' => 'bar', 'object' => new \ArrayObject(['hi'])] +--EXPECT-- +ok +ok +ok +ok \ No newline at end of file diff --git a/vendor/twig/twig/tests/Fixtures/tests/defined.test b/vendor/twig/twig/tests/Fixtures/tests/defined.test new file mode 100644 index 0000000000000000000000000000000000000000..1648c66fbaac4bb5ef3c0914d23aa56a51f1c3c0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/defined.test @@ -0,0 +1,129 @@ +--TEST-- +"defined" test +--TEMPLATE-- +{{ definedVar is defined ? 'ok' : 'ko' }} +{{ definedVar is not defined ? 'ko' : 'ok' }} +{{ undefinedVar is defined ? 'ko' : 'ok' }} +{{ undefinedVar is not defined ? 'ok' : 'ko' }} +{{ zeroVar is defined ? 'ok' : 'ko' }} +{{ nullVar is defined ? 'ok' : 'ko' }} +{{ nested.definedVar is defined ? 'ok' : 'ko' }} +{{ nested['definedVar'] is defined ? 'ok' : 'ko' }} +{{ nested.definedVar is not defined ? 'ko' : 'ok' }} +{{ nested.undefinedVar is defined ? 'ko' : 'ok' }} +{{ nested['undefinedVar'] is defined ? 'ko' : 'ok' }} +{{ nested.undefinedVar is not defined ? 'ok' : 'ko' }} +{{ nested.zeroVar is defined ? 'ok' : 'ko' }} +{{ nested.nullVar is defined ? 'ok' : 'ko' }} +{{ nested.definedArray.0 is defined ? 'ok' : 'ko' }} +{{ nested['definedArray'][0] is defined ? 'ok' : 'ko' }} +{{ object.foo is defined ? 'ok' : 'ko' }} +{{ object.undefinedMethod is defined ? 'ko' : 'ok' }} +{{ object.getFoo() is defined ? 'ok' : 'ko' }} +{{ object.getFoo('a') is defined ? 'ok' : 'ko' }} +{{ object.undefinedMethod() is defined ? 'ko' : 'ok' }} +{{ object.undefinedMethod('a') is defined ? 'ko' : 'ok' }} +{{ object.self.foo is defined ? 'ok' : 'ko' }} +{{ object.self.undefinedMethod is defined ? 'ko' : 'ok' }} +{{ object.undefinedMethod.self is defined ? 'ko' : 'ok' }} +{{ 0 is defined ? 'ok' : 'ko' }} +{{ "foo" is defined ? 'ok' : 'ko' }} +{{ true is defined ? 'ok' : 'ko' }} +{{ false is defined ? 'ok' : 'ko' }} +{{ null is defined ? 'ok' : 'ko' }} +{{ [1, 2] is defined ? 'ok' : 'ko' }} +{{ { foo: "bar" } is defined ? 'ok' : 'ko' }} +--DATA-- +return [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'nullVar' => null, + 'nested' => [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'nullVar' => null, + 'definedArray' => [0], + ], + 'object' => new Twig\Tests\TwigTestFoo(), +] +--EXPECT-- +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +--DATA-- +return [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'nullVar' => null, + 'nested' => [ + 'definedVar' => 'defined', + 'zeroVar' => 0, + 'nullVar' => null, + 'definedArray' => [0], + ], + 'object' => new Twig\Tests\TwigTestFoo(), +] +--CONFIG-- +return ['strict_variables' => false] +--EXPECT-- +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/tests/defined_for_attribute.test b/vendor/twig/twig/tests/Fixtures/tests/defined_for_attribute.test new file mode 100644 index 0000000000000000000000000000000000000000..5fd2fe3f2d2c601d0dd9d942a2acc813da3eeab2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/defined_for_attribute.test @@ -0,0 +1,35 @@ +--TEST-- +"defined" support for attribute +--TEMPLATE-- +{{ attribute(nested, "definedVar") is defined ? 'ok' : 'ko' }} +{{ attribute(nested, "undefinedVar") is not defined ? 'ok' : 'ko' }} +{{ attribute(nested, definedVarName) is defined ? 'ok' : 'ko' }} +{{ attribute(nested, undefinedVarName) is not defined ? 'ok' : 'ko' }} +--DATA-- +return [ + 'nested' => [ + 'definedVar' => 'defined', + ], + 'definedVarName' => 'definedVar', + 'undefinedVarName' => 'undefinedVar', +] +--EXPECT-- +ok +ok +ok +ok +--DATA-- +return [ + 'nested' => [ + 'definedVar' => 'defined', + ], + 'definedVarName' => 'definedVar', + 'undefinedVarName' => 'undefinedVar', +] +--CONFIG-- +return ['strict_variables' => false] +--EXPECT-- +ok +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/tests/defined_for_blocks.test b/vendor/twig/twig/tests/Fixtures/tests/defined_for_blocks.test new file mode 100644 index 0000000000000000000000000000000000000000..c8b90f8c9c421738db103af758378c59a8f557a0 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/defined_for_blocks.test @@ -0,0 +1,38 @@ +--TEST-- +"defined" support for blocks +--TEMPLATE-- +{% extends 'parent' %} +{% block icon %}icon{% endblock %} +{% block body %} + {{ parent() }} + {{ block('foo') is defined ? 'ok' : 'ko' }} + {{ block('footer') is defined ? 'ok' : 'ko' }} + {{ block('icon') is defined ? 'ok' : 'ko' }} + {{ block('block1') is defined ? 'ok' : 'ko' }} + {%- embed 'embed' %} + {% block content %}content{% endblock %} + {% endembed %} +{% endblock %} +{% use 'blocks' %} +--TEMPLATE(parent)-- +{% block body %} + {{ block('icon') is defined ? 'ok' : 'ko' -}} +{% endblock %} +{% block footer %}{% endblock %} +--TEMPLATE(embed)-- +{{ block('icon') is defined ? 'ok' : 'ko' }} +{{ block('content') is defined ? 'ok' : 'ko' }} +{{ block('block1') is defined ? 'ok' : 'ko' }} +--TEMPLATE(blocks)-- +{% block block1 %}{%endblock %} +--DATA-- +return [] +--EXPECT-- +ok + ko + ok + ok + ok +ko +ok +ko diff --git a/vendor/twig/twig/tests/Fixtures/tests/defined_for_blocks_with_template.test b/vendor/twig/twig/tests/Fixtures/tests/defined_for_blocks_with_template.test new file mode 100644 index 0000000000000000000000000000000000000000..68540de7aa364f3865ba4ba2be43182b4be74cb7 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/defined_for_blocks_with_template.test @@ -0,0 +1,17 @@ +--TEST-- +"defined" support for blocks with a template argument +--TEMPLATE-- +{{ block('foo', 'included.twig') is defined ? 'ok' : 'ko' }} +{{ block('foo', included_loaded) is defined ? 'ok' : 'ko' }} +{{ block('foo', included_loaded_internal) is defined ? 'ok' : 'ko' }} +--TEMPLATE(included.twig)-- +{% block foo %}FOO{% endblock %} +--DATA-- +return [ + 'included_loaded' => $twig->load('included.twig'), + 'included_loaded_internal' => $twig->load('included.twig'), +] +--EXPECT-- +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/tests/defined_for_constants.test b/vendor/twig/twig/tests/Fixtures/tests/defined_for_constants.test new file mode 100644 index 0000000000000000000000000000000000000000..62172e4f1f5e6153d11e1a22d2c9d4ff14dce1ab --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/defined_for_constants.test @@ -0,0 +1,14 @@ +--TEST-- +"defined" support for constants +--TEMPLATE-- +{{ constant('DATE_W3C') is defined ? 'ok' : 'ko' }} +{{ constant('ARRAY_AS_PROPS', object) is defined ? 'ok' : 'ko' }} +{{ constant('FOOBAR') is not defined ? 'ok' : 'ko' }} +{{ constant('FOOBAR', object) is not defined ? 'ok' : 'ko' }} +--DATA-- +return ['expect' => DATE_W3C, 'object' => new \ArrayObject(['hi'])] +--EXPECT-- +ok +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/tests/defined_on_complex_expr.test b/vendor/twig/twig/tests/Fixtures/tests/defined_on_complex_expr.test new file mode 100644 index 0000000000000000000000000000000000000000..2d0615832f4f1416177c94eee35b9acdc83d2af2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/defined_on_complex_expr.test @@ -0,0 +1,8 @@ +--TEST-- +"defined" support for "complex" expressions +--TEMPLATE-- +{{ (1 + 2) is defined ? 'ok' : 'ko' }} +--DATA-- +return [] +--EXCEPTION-- +Twig\Error\SyntaxError: The "defined" test only works with simple variables in "index.twig" at line 2. diff --git a/vendor/twig/twig/tests/Fixtures/tests/dynamic_test.test b/vendor/twig/twig/tests/Fixtures/tests/dynamic_test.test new file mode 100644 index 0000000000000000000000000000000000000000..41625f6af1e71af15d36c83a3a7a815311d532df --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/dynamic_test.test @@ -0,0 +1,14 @@ +--TEST-- +dynamic test +--TEMPLATE-- +{{ 'bar' is test_bar ? '1' :'0' }} +{{ 'foo' is test_foo ? '1' :'0' }} +{{ 'bar' is test_foo ? '1' :'0' }} +{{ 'foo' is test_bar ? '1' :'0' }} +--DATA-- +return [] +--EXPECT-- +1 +1 +0 +0 diff --git a/vendor/twig/twig/tests/Fixtures/tests/empty.test b/vendor/twig/twig/tests/Fixtures/tests/empty.test new file mode 100644 index 0000000000000000000000000000000000000000..ffcd518708d1f57cd14092a14f9e696d416173d5 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/empty.test @@ -0,0 +1,54 @@ +--TEST-- +"empty" test +--TEMPLATE-- +{{ string_empty is empty ? 'ok' : 'ko' }} +{{ string_zero is empty ? 'ko' : 'ok' }} +{{ value_null is empty ? 'ok' : 'ko' }} +{{ value_false is empty ? 'ok' : 'ko' }} +{{ value_int_zero is empty ? 'ko' : 'ok' }} +{{ array_empty is empty ? 'ok' : 'ko' }} +{{ array_not_empty is empty ? 'ko' : 'ok' }} +{{ magically_callable is empty ? 'ko' : 'ok' }} +{{ countable_empty is empty ? 'ok' : 'ko' }} +{{ countable_not_empty is empty ? 'ko' : 'ok' }} +{{ tostring_empty is empty ? 'ok' : 'ko' }} +{{ tostring_not_empty is empty ? 'ko' : 'ok' }} +{{ markup_empty is empty ? 'ok' : 'ko' }} +{{ markup_not_empty is empty ? 'ko' : 'ok' }} +{{ iterator is empty ? 'ko' : 'ok' }} +{{ empty_iterator is empty ? 'ok' : 'ko' }} +{{ callback_iterator is empty ? 'ko' : 'ok' }} +{{ empty_callback_iterator is empty ? 'ok' : 'ko' }} +--DATA-- +return [ + 'string_empty' => '', 'string_zero' => '0', + 'value_null' => null, 'value_false' => false, 'value_int_zero' => 0, + 'array_empty' => [], 'array_not_empty' => [1, 2], + 'magically_callable' => new \Twig\Tests\MagicCallStub(), + 'countable_empty' => new \Twig\Tests\CountableStub([]), 'countable_not_empty' => new \Twig\Tests\CountableStub([1, 2]), + 'tostring_empty' => new \Twig\Tests\ToStringStub(''), 'tostring_not_empty' => new \Twig\Tests\ToStringStub('0' /* edge case of using "0" as the string */), + 'markup_empty' => new \Twig\Markup('', 'UTF-8'), 'markup_not_empty' => new \Twig\Markup('test', 'UTF-8'), + 'iterator' => $iter = new \ArrayIterator(['bar', 'foo']), + 'empty_iterator' => new \ArrayIterator(), + 'callback_iterator' => new \CallbackFilterIterator($iter, function ($el) { return true; }), + 'empty_callback_iterator' => new \CallbackFilterIterator($iter, function ($el) { return false; }), +] +--EXPECT-- +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/tests/even.test b/vendor/twig/twig/tests/Fixtures/tests/even.test new file mode 100644 index 0000000000000000000000000000000000000000..5c73b01e908feb6c8b10a1a8f263113ced04da2b --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/even.test @@ -0,0 +1,14 @@ +--TEST-- +"even" test +--TEMPLATE-- +{{ 1 is even ? 'ko' : 'ok' }} +{{ 2 is even ? 'ok' : 'ko' }} +{{ 1 is not even ? 'ok' : 'ko' }} +{{ 2 is not even ? 'ko' : 'ok' }} +--DATA-- +return [] +--EXPECT-- +ok +ok +ok +ok diff --git a/vendor/twig/twig/tests/Fixtures/tests/in.test b/vendor/twig/twig/tests/Fixtures/tests/in.test new file mode 100644 index 0000000000000000000000000000000000000000..f7b172e8d0cea5b39bd2eb837822905ecb75d13d --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/in.test @@ -0,0 +1,118 @@ +--TEST-- +Twig supports the in operator +--TEMPLATE-- +{{ bar in foo ? 'OK' : 'KO' }} +{{ not (bar in foo) ? 'KO' : 'OK' }} +{{ bar not in foo ? 'KO' : 'OK' }} +{{ 'a' in bar ? 'OK' : 'KO' }} +{{ 'c' not in bar ? 'OK' : 'KO' }} +{{ '' in bar ? 'OK' : 'KO' }} +{{ '' in '' ? 'OK' : 'KO' }} +{{ '0' not in '' ? 'OK' : 'KO' }} +{{ 'a' not in '0' ? 'OK' : 'KO' }} +{{ '0' in '0' ? 'OK' : 'KO' }} + +{{ false in [0, 1] ? 'OK' : 'KO' }} +{{ true in [0, 1] ? 'OK' : 'KO' }} +{{ '0' in [0, 1] ? 'OK' : 'KO' }} +{{ '0' in [1, 0] ? 'OK' : 'KO' }} +{{ '' in [0, 1] ? 'OK' : 'KO' }} +{{ '' in [1, 0] ? 'OK' : 'KO' }} +{{ 0 in ['', 1] ? 'OK' : 'KO' }} +{{ 0 in [1, ''] ? 'OK' : 'KO' }} + +{{ '' in 'foo' ? 'OK' : 'KO' }} +{{ 0 in 'foo' ? 'KO' : 'OK' }} +{{ false in 'foo' ? 'KO' : 'OK' }} +{{ false in '100' ? 'KO' : 'OK' }} +{{ true in '100' ? 'KO' : 'OK' }} + +{{ [] in [true, false] ? 'OK' : 'KO' }} +{{ [] in [true, ''] ? 'KO' : 'OK' }} +{{ [] in [true, []] ? 'OK' : 'KO' }} + +{{ resource ? 'OK' : 'KO' }} +{{ resource in 'foo'~resource ? 'KO' : 'OK' }} +{{ object in 'stdClass' ? 'KO' : 'OK' }} +{{ [] in 'Array' ? 'KO' : 'OK' }} +{{ dir_object in 'foo'~dir_object ? 'KO' : 'OK' }} + +{{ ''~resource in resource ? 'KO' : 'OK' }} +{{ 'stdClass' in object ? 'KO' : 'OK' }} +{{ 'Array' in [] ? 'KO' : 'OK' }} +{{ ''~dir_object in dir_object ? 'KO' : 'OK' }} + +{{ resource in [''~resource] ? 'KO' : 'OK' }} +{{ resource in [resource + 1 - 1] ? 'KO' : 'OK' }} +{{ dir_object in [''~dir_object] ? 'KO' : 'OK' }} + +{{ 5 in 125 ? 'KO' : 'OK' }} +{{ 5 in '125' ? 'OK' : 'KO' }} +{{ '5' in 125 ? 'KO' : 'OK' }} +{{ '5' in '125' ? 'OK' : 'KO' }} + +{{ 5.5 in 125.5 ? 'KO' : 'OK' }} +{{ 5.5 in '125.5' ? 'OK' : 'KO' }} +{{ '5.5' in 125.5 ? 'KO' : 'OK' }} + +{{ safe in ['foo', 'bar'] ? 'OK' : 'KO' }} +{{ 'fo' in safe ? 'OK' : 'KO' }} +--DATA-- +return ['bar' => 'bar', 'foo' => ['bar' => 'bar'], 'dir_object' => new \SplFileInfo(dirname(__FILE__)), 'object' => new \stdClass(), 'resource' => opendir(dirname(__FILE__)), 'safe' => new \Twig\Markup('foo', 'UTF-8')] +--EXPECT-- +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK + +OK +OK +OK +OK +OK +OK +OK +OK + +OK +OK +OK +OK +OK + +OK +OK +OK + +OK +OK +OK +OK +OK + +OK +OK +OK +OK + +OK +OK +OK + +OK +OK +OK +OK + +OK +OK +OK + +OK +OK diff --git a/vendor/twig/twig/tests/Fixtures/tests/in_with_objects.test b/vendor/twig/twig/tests/Fixtures/tests/in_with_objects.test new file mode 100644 index 0000000000000000000000000000000000000000..1f9fc6393a2380bd440c30023e5d7616010d838c --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/in_with_objects.test @@ -0,0 +1,19 @@ +--TEST-- +Twig supports the in operator when using objects +--TEMPLATE-- +{% if object in object_list %} +TRUE +{% endif %} +--DATA-- +$foo = new Twig\Tests\TwigTestFoo(); +$foo1 = new Twig\Tests\TwigTestFoo(); + +$foo->position = $foo1; +$foo1->position = $foo; + +return [ + 'object' => $foo, + 'object_list' => [$foo1, $foo], +] +--EXPECT-- +TRUE diff --git a/vendor/twig/twig/tests/Fixtures/tests/iterable.test b/vendor/twig/twig/tests/Fixtures/tests/iterable.test new file mode 100644 index 0000000000000000000000000000000000000000..75b5756e1e64a651ed02156ea63c2a091fc6f013 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/iterable.test @@ -0,0 +1,19 @@ +--TEST-- +"iterable" test +--TEMPLATE-- +{{ foo is iterable ? 'ok' : 'ko' }} +{{ traversable is iterable ? 'ok' : 'ko' }} +{{ obj is iterable ? 'ok' : 'ko' }} +{{ val is iterable ? 'ok' : 'ko' }} +--DATA-- +return [ + 'foo' => [], + 'traversable' => new \ArrayIterator([]), + 'obj' => new \stdClass(), + 'val' => 'test', +] +--EXPECT-- +ok +ok +ko +ko \ No newline at end of file diff --git a/vendor/twig/twig/tests/Fixtures/tests/null_coalesce.test b/vendor/twig/twig/tests/Fixtures/tests/null_coalesce.test new file mode 100644 index 0000000000000000000000000000000000000000..7af3255d61d3b5e9552f49261d0722af36ced0bd --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/null_coalesce.test @@ -0,0 +1,30 @@ +--TEST-- +Twig supports the ?? operator +--TEMPLATE-- +{{ 'OK' ?? 'KO' }} +{{ null ?? 'OK' }} +{{ bar ?? 'KO' }} +{{ baz ?? 'OK' }} +{{ foo.bar ?? 'KO' }} +{{ foo.missing ?? 'OK' }} +{{ foo.bar.baz.missing ?? 'OK' }} +{{ foo['bar'] ?? 'KO' }} +{{ foo['missing'] ?? 'OK' }} +{{ nope ?? nada ?? 'OK' }} +{{ 1 + nope ?? nada ?? 2 }} +{{ 1 + nope ?? 3 + nada ?? 2 }} +--DATA-- +return ['bar' => 'OK', 'foo' => ['bar' => 'OK']] +--EXPECT-- +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +3 +6 diff --git a/vendor/twig/twig/tests/Fixtures/tests/odd.test b/vendor/twig/twig/tests/Fixtures/tests/odd.test new file mode 100644 index 0000000000000000000000000000000000000000..ec88bb519c1f6ac42c15ff62b584e346ef30fad2 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/tests/odd.test @@ -0,0 +1,10 @@ +--TEST-- +"odd" test +--TEMPLATE-- +{{ 1 is odd ? 'ok' : 'ko' }} +{{ 2 is odd ? 'ko' : 'ok' }} +--DATA-- +return [] +--EXPECT-- +ok +ok \ No newline at end of file diff --git a/vendor/twig/twig/tests/Fixtures/whitespace/trim_block.test b/vendor/twig/twig/tests/Fixtures/whitespace/trim_block.test new file mode 100644 index 0000000000000000000000000000000000000000..346a11076c34d71854091957e7070255375ae00f --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/whitespace/trim_block.test @@ -0,0 +1,68 @@ +--TEST-- +Whitespace trimming on tags. +--TEMPLATE-- +Trim on control tag: +{% for i in range(1, 9) -%} + {{ i }} +{%- endfor %} + + +Trim on output tag: +{% for i in range(1, 9) %} + {{- i -}} +{% endfor %} + + +Trim comments: + +{#- Invisible -#} + +After the comment. + +Trim leading space: +{% if leading %} + + {{- leading }} +{% endif %} + +{%- if leading %} + {{- leading }} + +{%- endif %} + + +Trim trailing space: +{% if trailing -%} + {{ trailing -}} + +{% endif -%} + +Combined: + +{%- if both -%} +<ul> + <li> {{- both -}} </li> +</ul> + +{%- endif -%} + +end +--DATA-- +return ['leading' => 'leading space', 'trailing' => 'trailing space', 'both' => 'both'] +--EXPECT-- +Trim on control tag: +123456789 + +Trim on output tag: +123456789 + +Trim comments:After the comment. + +Trim leading space: +leading space +leading space + +Trim trailing space: +trailing spaceCombined:<ul> + <li>both</li> +</ul>end diff --git a/vendor/twig/twig/tests/Fixtures/whitespace/trim_delimiter_as_strings.test b/vendor/twig/twig/tests/Fixtures/whitespace/trim_delimiter_as_strings.test new file mode 100644 index 0000000000000000000000000000000000000000..a58818dde479345cab39f568bfc0422a172d24ca --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/whitespace/trim_delimiter_as_strings.test @@ -0,0 +1,10 @@ +--TEST-- +Whitespace trimming as strings. +--TEMPLATE-- +{{ 5 * '{#-'|length }} +{{ '{{-'|length * 5 + '{%-'|length }} +--DATA-- +return [] +--EXPECT-- +15 +18 diff --git a/vendor/twig/twig/tests/Fixtures/whitespace/trim_left.test b/vendor/twig/twig/tests/Fixtures/whitespace/trim_left.test new file mode 100644 index 0000000000000000000000000000000000000000..75d0f80319367777be0cc602a4f164b51abbfdd4 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/whitespace/trim_left.test @@ -0,0 +1,32 @@ +--TEST-- +Whitespace trimming on tags (left side). +--TEMPLATE-- +**{% if true %} +foo + + {%- endif %}** + +** + + {{- 'foo' }}** + +** + + +{#- comment #}** + +**{% verbatim %} +foo + + {%- endverbatim %}** +--DATA-- +return [] +--EXPECT-- +**foo** + +**foo** + +**** + +** +foo** diff --git a/vendor/twig/twig/tests/Fixtures/whitespace/trim_line_left.test b/vendor/twig/twig/tests/Fixtures/whitespace/trim_line_left.test new file mode 100644 index 0000000000000000000000000000000000000000..e5e845f08b77b76657bfe7e23ebaa97b9ce58090 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/whitespace/trim_line_left.test @@ -0,0 +1,33 @@ +--TEST-- +Line whitespace trimming on tags (left side). +--TEMPLATE-- +**{% if true %} +foo + {%~ endif %}** + +** + {{~ 'foo' }}** + +** + {#~ comment #}** + +**{% verbatim %} +foo + + {%~ endverbatim %}** +--DATA-- +return [] +--EXPECT-- +**foo +** + +** +foo** + +** +** + +** +foo + +** diff --git a/vendor/twig/twig/tests/Fixtures/whitespace/trim_line_right.test b/vendor/twig/twig/tests/Fixtures/whitespace/trim_line_right.test new file mode 100644 index 0000000000000000000000000000000000000000..e7b510c85d8e1d21f6c30c3edabbb6bf140b0824 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/whitespace/trim_line_right.test @@ -0,0 +1,32 @@ +--TEST-- +Line whitespace trimming on tags (right side). +--TEMPLATE-- +**{% if true ~%} +foo{% endif %}** + +**{{ 'foo' ~}} +foo +** + +**{# comment ~#} + foo +** + +**{% verbatim ~%} + foo{% endverbatim %}** +--DATA-- +return [] +--EXPECT-- +** +foo** + +**foo +foo +** + +** + foo +** + +** + foo** diff --git a/vendor/twig/twig/tests/Fixtures/whitespace/trim_right.test b/vendor/twig/twig/tests/Fixtures/whitespace/trim_right.test new file mode 100644 index 0000000000000000000000000000000000000000..0ec3b0ceaa90904207471a422da3668b54832f09 --- /dev/null +++ b/vendor/twig/twig/tests/Fixtures/whitespace/trim_right.test @@ -0,0 +1,28 @@ +--TEST-- +Whitespace trimming on tags (right side). +--TEMPLATE-- +**{% if true -%} + + foo{% endif %}** + +**{{ 'foo' -}} + +** + +**{# comment -#} + +** + +**{% verbatim -%} + +foo{% endverbatim %}** +--DATA-- +return [] +--EXPECT-- +**foo** + +**foo** + +**** + +**foo** diff --git a/vendor/twig/twig/tests/IntegrationTest.php b/vendor/twig/twig/tests/IntegrationTest.php new file mode 100644 index 0000000000000000000000000000000000000000..243aadb2bfec439c897bc17cf0349ac155edc2b0 --- /dev/null +++ b/vendor/twig/twig/tests/IntegrationTest.php @@ -0,0 +1,386 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Extension\AbstractExtension; +use Twig\Extension\DebugExtension; +use Twig\Extension\SandboxExtension; +use Twig\Extension\StringLoaderExtension; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\PrintNode; +use Twig\Sandbox\SecurityPolicy; +use Twig\Test\IntegrationTestCase; +use Twig\Token; +use Twig\TokenParser\AbstractTokenParser; +use Twig\TwigFilter; +use Twig\TwigFunction; +use Twig\TwigTest; + +// This function is defined to check that escaping strategies +// like html works even if a function with the same name is defined. +function html() +{ + return 'foo'; +} + +class IntegrationTest extends IntegrationTestCase +{ + public function getExtensions() + { + $policy = new SecurityPolicy([], [], [], [], ['dump']); + + return [ + new DebugExtension(), + new SandboxExtension($policy, false), + new StringLoaderExtension(), + new TwigTestExtension(), + ]; + } + + public function getFixturesDir() + { + return __DIR__.'/Fixtures/'; + } +} + +function test_foo($value = 'foo') +{ + return $value; +} + +class TwigTestFoo implements \Iterator +{ + const BAR_NAME = 'bar'; + + public $position = 0; + public $array = [1, 2]; + + public function bar($param1 = null, $param2 = null) + { + return 'bar'.($param1 ? '_'.$param1 : '').($param2 ? '-'.$param2 : ''); + } + + public function getFoo() + { + return 'foo'; + } + + public function getSelf() + { + return $this; + } + + public function is() + { + return 'is'; + } + + public function in() + { + return 'in'; + } + + public function not() + { + return 'not'; + } + + public function strToLower($value) + { + return strtolower($value); + } + + public function rewind() + { + $this->position = 0; + } + + public function current() + { + return $this->array[$this->position]; + } + + public function key() + { + return 'a'; + } + + public function next() + { + ++$this->position; + } + + public function valid() + { + return isset($this->array[$this->position]); + } +} + +class TwigTestTokenParser_§ extends AbstractTokenParser +{ + public function parse(Token $token) + { + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new PrintNode(new ConstantExpression('§', -1), -1); + } + + public function getTag() + { + return '§'; + } +} + +class TwigTestExtension extends AbstractExtension +{ + public function getTokenParsers() + { + return [ + new TwigTestTokenParser_§(), + ]; + } + + public function getFilters() + { + return [ + new TwigFilter('§', [$this, '§Filter']), + new TwigFilter('escape_and_nl2br', [$this, 'escape_and_nl2br'], ['needs_environment' => true, 'is_safe' => ['html']]), + new TwigFilter('nl2br', [$this, 'nl2br'], ['pre_escape' => 'html', 'is_safe' => ['html']]), + new TwigFilter('escape_something', [$this, 'escape_something'], ['is_safe' => ['something']]), + new TwigFilter('preserves_safety', [$this, 'preserves_safety'], ['preserves_safety' => ['html']]), + new TwigFilter('static_call_string', 'Twig\Tests\TwigTestExtension::staticCall'), + new TwigFilter('static_call_array', ['Twig\Tests\TwigTestExtension', 'staticCall']), + new TwigFilter('magic_call', [$this, 'magicCall']), + new TwigFilter('magic_call_string', 'Twig\Tests\TwigTestExtension::magicStaticCall'), + new TwigFilter('magic_call_array', ['Twig\Tests\TwigTestExtension', 'magicStaticCall']), + new TwigFilter('*_path', [$this, 'dynamic_path']), + new TwigFilter('*_foo_*_bar', [$this, 'dynamic_foo']), + ]; + } + + public function getFunctions() + { + return [ + new TwigFunction('§', [$this, '§Function']), + new TwigFunction('safe_br', [$this, 'br'], ['is_safe' => ['html']]), + new TwigFunction('unsafe_br', [$this, 'br']), + new TwigFunction('static_call_string', 'Twig\Tests\TwigTestExtension::staticCall'), + new TwigFunction('static_call_array', ['Twig\Tests\TwigTestExtension', 'staticCall']), + new TwigFunction('*_path', [$this, 'dynamic_path']), + new TwigFunction('*_foo_*_bar', [$this, 'dynamic_foo']), + ]; + } + + public function getTests() + { + return [ + new TwigTest('multi word', [$this, 'is_multi_word']), + new TwigTest('test_*', [$this, 'dynamic_test']), + ]; + } + + public function §Filter($value) + { + return "§{$value}§"; + } + + public function §Function($value) + { + return "§{$value}§"; + } + + /** + * nl2br which also escapes, for testing escaper filters. + */ + public function escape_and_nl2br($env, $value, $sep = '<br />') + { + return $this->nl2br(twig_escape_filter($env, $value, 'html'), $sep); + } + + /** + * nl2br only, for testing filters with pre_escape. + */ + public function nl2br($value, $sep = '<br />') + { + // not secure if $value contains html tags (not only entities) + // don't use + return str_replace("\n", "$sep\n", $value); + } + + public function dynamic_path($element, $item) + { + return $element.'/'.$item; + } + + public function dynamic_foo($foo, $bar, $item) + { + return $foo.'/'.$bar.'/'.$item; + } + + public function dynamic_test($element, $item) + { + return $element === $item; + } + + public function escape_something($value) + { + return strtoupper($value); + } + + public function preserves_safety($value) + { + return strtoupper($value); + } + + public static function staticCall($value) + { + return "*$value*"; + } + + public function br() + { + return '<br />'; + } + + public function is_multi_word($value) + { + return false !== strpos($value, ' '); + } + + public function __call($method, $arguments) + { + if ('magicCall' !== $method) { + throw new \BadMethodCallException('Unexpected call to __call'); + } + + return 'magic_'.$arguments[0]; + } + + public static function __callStatic($method, $arguments) + { + if ('magicStaticCall' !== $method) { + throw new \BadMethodCallException('Unexpected call to __callStatic'); + } + + return 'static_magic_'.$arguments[0]; + } +} + +/** + * This class is used in tests for the "length" filter and "empty" test. It asserts that __call is not + * used to convert such objects to strings. + */ +class MagicCallStub +{ + public function __call($name, $args) + { + throw new \Exception('__call shall not be called'); + } +} + +class ToStringStub +{ + /** + * @var string + */ + private $string; + + public function __construct($string) + { + $this->string = $string; + } + + public function __toString() + { + return $this->string; + } +} + +/** + * This class is used in tests for the length filter and empty test to show + * that when \Countable is implemented, it is preferred over the __toString() + * method. + */ +class CountableStub implements \Countable +{ + private $count; + + public function __construct($count) + { + $this->count = $count; + } + + public function count() + { + return $this->count; + } + + public function __toString() + { + throw new \Exception('__toString shall not be called on \Countables'); + } +} + +/** + * This class is used in tests for the length filter. + */ +class IteratorAggregateStub implements \IteratorAggregate +{ + private $data; + + public function __construct(array $data) + { + $this->data = $data; + } + + public function getIterator() + { + return new \ArrayIterator($this->data); + } +} + +class SimpleIteratorForTesting implements \Iterator +{ + private $data = [1, 2, 3, 4, 5, 6, 7]; + private $key = 0; + + public function current() + { + return $this->key; + } + + public function next() + { + ++$this->key; + } + + public function key() + { + return $this->key; + } + + public function valid() + { + return isset($this->data[$this->key]); + } + + public function rewind() + { + $this->key = 0; + } + + public function __toString() + { + // for testing, make sure string length returned is not the same as the `iterator_count` + return str_repeat('X', iterator_count($this) + 10); + } +} diff --git a/vendor/twig/twig/tests/LegacyFixtures/autoescape/filename.legacy.test b/vendor/twig/twig/tests/LegacyFixtures/autoescape/filename.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..d25f75e8ee0ae0242b28fe86804867013cbf058f --- /dev/null +++ b/vendor/twig/twig/tests/LegacyFixtures/autoescape/filename.legacy.test @@ -0,0 +1,18 @@ +--TEST-- +"filename" autoescape strategy +--TEMPLATE-- +{{ br -}} +{{ include('index.html.twig') -}} +{{ include('index.txt.twig') -}} +--TEMPLATE(index.html.twig)-- +{{ br -}} +--TEMPLATE(index.txt.twig)-- +{{ br -}} +--DATA-- +return ['br' => '<br />'] +--CONFIG-- +return ['autoescape' => 'filename'] +--EXPECT-- +<br /> +<br /> +<br /> diff --git a/vendor/twig/twig/tests/LegacyFixtures/functions/undefined_block.legacy.test b/vendor/twig/twig/tests/LegacyFixtures/functions/undefined_block.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..e52c3b259239b7478720f5d7169c3a5b38977415 --- /dev/null +++ b/vendor/twig/twig/tests/LegacyFixtures/functions/undefined_block.legacy.test @@ -0,0 +1,12 @@ +--TEST-- +"block" function with undefined block +--TEMPLATE-- +{% extends "base.twig" %} +{% block foo %}{{ parent() }}{{ block('unknown') }}{{ block('bar') }}{% endblock %} +--TEMPLATE(base.twig)-- +{% block foo %}Foo{% endblock %} +{% block bar %}Bar{% endblock %} +--DATA-- +return [] +--EXPECT-- +FooBarBar diff --git a/vendor/twig/twig/tests/LegacyFixtures/test.legacy.test b/vendor/twig/twig/tests/LegacyFixtures/test.legacy.test new file mode 100644 index 0000000000000000000000000000000000000000..4bd1f6ac0a5e288dd050ba1e95e829e3c69093fc --- /dev/null +++ b/vendor/twig/twig/tests/LegacyFixtures/test.legacy.test @@ -0,0 +1,8 @@ +--TEST-- +Old test classes usage +--TEMPLATE-- +{{ 'foo' is multi word ? 'yes' : 'no' }} +--DATA-- +return [] +--EXPECT-- +no diff --git a/vendor/twig/twig/tests/LegacyIntegrationTest.php b/vendor/twig/twig/tests/LegacyIntegrationTest.php new file mode 100644 index 0000000000000000000000000000000000000000..db556f31bf7e124264a30306823a7098e1469bdc --- /dev/null +++ b/vendor/twig/twig/tests/LegacyIntegrationTest.php @@ -0,0 +1,59 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Extension\AbstractExtension; +use Twig\Test\IntegrationTestCase; + +class LegacyIntegrationTest extends IntegrationTestCase +{ + public function getExtensions() + { + return [ + new LegacyTwigTestExtension(), + ]; + } + + public function getFixturesDir() + { + return __DIR__.'/LegacyFixtures/'; + } + + public function getTests($name, $legacyTests = false) + { + if (!$legacyTests) { + return [['', '', '', [], '', []]]; + } + + return parent::getTests($name, true); + } +} + +class LegacyTwigTestExtension extends AbstractExtension +{ + public function getTests() + { + return [ + 'multi word' => new \Twig_Test_Method($this, 'is_multi_word'), + ]; + } + + public function is_multi_word($value) + { + return false !== strpos($value, ' '); + } + + public function getName() + { + return 'legacy_integration_test'; + } +} diff --git a/vendor/twig/twig/tests/LexerTest.php b/vendor/twig/twig/tests/LexerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..8bd2de5cf9b1de1f4816934790aa5d83f495d0cf --- /dev/null +++ b/vendor/twig/twig/tests/LexerTest.php @@ -0,0 +1,378 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Lexer; +use Twig\Source; +use Twig\Token; + +class LexerTest extends \PHPUnit\Framework\TestCase +{ + /** + * @group legacy + */ + public function testLegacyConstructorSignature() + { + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize('{{ foo }}', 'foo'); + $this->assertEquals('foo', $stream->getFilename()); + $this->assertEquals('{{ foo }}', $stream->getSource()); + } + + public function testNameLabelForTag() + { + $template = '{% § %}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + + $stream->expect(Token::BLOCK_START_TYPE); + $this->assertSame('§', $stream->expect(Token::NAME_TYPE)->getValue()); + } + + public function testNameLabelForFunction() + { + $template = '{{ §() }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + + $stream->expect(Token::VAR_START_TYPE); + $this->assertSame('§', $stream->expect(Token::NAME_TYPE)->getValue()); + } + + public function testBracketsNesting() + { + $template = '{{ {"a":{"b":"c"}} }}'; + + $this->assertEquals(2, $this->countToken($template, Token::PUNCTUATION_TYPE, '{')); + $this->assertEquals(2, $this->countToken($template, Token::PUNCTUATION_TYPE, '}')); + } + + protected function countToken($template, $type, $value = null) + { + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + + $count = 0; + while (!$stream->isEOF()) { + $token = $stream->next(); + if ($type === $token->getType()) { + if (null === $value || $value === $token->getValue()) { + ++$count; + } + } + } + + return $count; + } + + public function testLineDirective() + { + $template = "foo\n" + ."bar\n" + ."{% line 10 %}\n" + ."{{\n" + ."baz\n" + ."}}\n"; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + + // foo\nbar\n + $this->assertSame(1, $stream->expect(Token::TEXT_TYPE)->getLine()); + // \n (after {% line %}) + $this->assertSame(10, $stream->expect(Token::TEXT_TYPE)->getLine()); + // {{ + $this->assertSame(11, $stream->expect(Token::VAR_START_TYPE)->getLine()); + // baz + $this->assertSame(12, $stream->expect(Token::NAME_TYPE)->getLine()); + } + + public function testLineDirectiveInline() + { + $template = "foo\n" + ."bar{% line 10 %}{{\n" + ."baz\n" + ."}}\n"; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + + // foo\nbar + $this->assertSame(1, $stream->expect(Token::TEXT_TYPE)->getLine()); + // {{ + $this->assertSame(10, $stream->expect(Token::VAR_START_TYPE)->getLine()); + // baz + $this->assertSame(11, $stream->expect(Token::NAME_TYPE)->getLine()); + } + + public function testLongComments() + { + $template = '{# '.str_repeat('*', 100000).' #}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testLongVerbatim() + { + $template = '{% verbatim %}'.str_repeat('*', 100000).'{% endverbatim %}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testLongVar() + { + $template = '{{ '.str_repeat('x', 100000).' }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testLongBlock() + { + $template = '{% '.str_repeat('x', 100000).' %}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testBigNumbers() + { + $template = '{{ 922337203685477580700 }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->next(); + $node = $stream->next(); + $this->assertEquals('922337203685477580700', $node->getValue()); + } + + public function testStringWithEscapedDelimiter() + { + $tests = [ + "{{ 'foo \' bar' }}" => 'foo \' bar', + '{{ "foo \" bar" }}' => 'foo " bar', + ]; + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + foreach ($tests as $template => $expected) { + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::STRING_TYPE, $expected); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + } + + public function testStringWithInterpolation() + { + $template = 'foo {{ "bar #{ baz + 1 }" }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::TEXT_TYPE, 'foo '); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::STRING_TYPE, 'bar '); + $stream->expect(Token::INTERPOLATION_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'baz'); + $stream->expect(Token::OPERATOR_TYPE, '+'); + $stream->expect(Token::NUMBER_TYPE, '1'); + $stream->expect(Token::INTERPOLATION_END_TYPE); + $stream->expect(Token::VAR_END_TYPE); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testStringWithEscapedInterpolation() + { + $template = '{{ "bar \#{baz+1}" }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::STRING_TYPE, 'bar #{baz+1}'); + $stream->expect(Token::VAR_END_TYPE); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testStringWithHash() + { + $template = '{{ "bar # baz" }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::STRING_TYPE, 'bar # baz'); + $stream->expect(Token::VAR_END_TYPE); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testStringWithUnterminatedInterpolation() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unclosed """'); + + $template = '{{ "bar #{x" }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + } + + public function testStringWithNestedInterpolations() + { + $template = '{{ "bar #{ "foo#{bar}" }" }}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::STRING_TYPE, 'bar '); + $stream->expect(Token::INTERPOLATION_START_TYPE); + $stream->expect(Token::STRING_TYPE, 'foo'); + $stream->expect(Token::INTERPOLATION_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'bar'); + $stream->expect(Token::INTERPOLATION_END_TYPE); + $stream->expect(Token::INTERPOLATION_END_TYPE); + $stream->expect(Token::VAR_END_TYPE); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testStringWithNestedInterpolationsInBlock() + { + $template = '{% foo "bar #{ "foo#{bar}" }" %}'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::BLOCK_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'foo'); + $stream->expect(Token::STRING_TYPE, 'bar '); + $stream->expect(Token::INTERPOLATION_START_TYPE); + $stream->expect(Token::STRING_TYPE, 'foo'); + $stream->expect(Token::INTERPOLATION_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'bar'); + $stream->expect(Token::INTERPOLATION_END_TYPE); + $stream->expect(Token::INTERPOLATION_END_TYPE); + $stream->expect(Token::BLOCK_END_TYPE); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testOperatorEndingWithALetterAtTheEndOfALine() + { + $template = "{{ 1 and\n0}}"; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::NUMBER_TYPE, 1); + $stream->expect(Token::OPERATOR_TYPE, 'and'); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } + + public function testUnterminatedVariable() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unclosed "variable" in "index" at line 3'); + + $template = ' + +{{ + +bar + + +'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + } + + public function testUnterminatedBlock() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unclosed "block" in "index" at line 3'); + + $template = ' + +{% + +bar + + +'; + + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $lexer->tokenize(new Source($template, 'index')); + } + + public function testOverridingSyntax() + { + $template = '[# comment #]{# variable #}/# if true #/true/# endif #/'; + $lexer = new Lexer(new Environment($this->createMock('\Twig\Loader\LoaderInterface')), [ + 'tag_comment' => ['[#', '#]'], + 'tag_block' => ['/#', '#/'], + 'tag_variable' => ['{#', '#}'], + ]); + $stream = $lexer->tokenize(new Source($template, 'index')); + $stream->expect(Token::VAR_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'variable'); + $stream->expect(Token::VAR_END_TYPE); + $stream->expect(Token::BLOCK_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'if'); + $stream->expect(Token::NAME_TYPE, 'true'); + $stream->expect(Token::BLOCK_END_TYPE); + $stream->expect(Token::TEXT_TYPE, 'true'); + $stream->expect(Token::BLOCK_START_TYPE); + $stream->expect(Token::NAME_TYPE, 'endif'); + $stream->expect(Token::BLOCK_END_TYPE); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without throwing any exceptions + $this->addToAssertionCount(1); + } +} diff --git a/vendor/twig/twig/tests/Loader/ArrayTest.php b/vendor/twig/twig/tests/Loader/ArrayTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ab670b58aa21962c9c52a5e5f9a5881064f26ce0 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/ArrayTest.php @@ -0,0 +1,139 @@ +<?php + +namespace Twig\Tests\Loader; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Loader\ArrayLoader; + +class ArrayTest extends \PHPUnit\Framework\TestCase +{ + /** + * @group legacy + */ + public function testGetSource() + { + $loader = new ArrayLoader(['foo' => 'bar']); + + $this->assertEquals('bar', $loader->getSource('foo')); + } + + /** + * @group legacy + */ + public function testGetSourceWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ArrayLoader([]); + + $loader->getSource('foo'); + } + + public function testGetSourceContextWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ArrayLoader([]); + + $loader->getSourceContext('foo'); + } + + public function testGetCacheKey() + { + $loader = new ArrayLoader(['foo' => 'bar']); + + $this->assertEquals('foo:bar', $loader->getCacheKey('foo')); + } + + public function testGetCacheKeyWhenTemplateHasDuplicateContent() + { + $loader = new ArrayLoader([ + 'foo' => 'bar', + 'baz' => 'bar', + ]); + + $this->assertEquals('foo:bar', $loader->getCacheKey('foo')); + $this->assertEquals('baz:bar', $loader->getCacheKey('baz')); + } + + public function testGetCacheKeyIsProtectedFromEdgeCollisions() + { + $loader = new ArrayLoader([ + 'foo__' => 'bar', + 'foo' => '__bar', + ]); + + $this->assertEquals('foo__:bar', $loader->getCacheKey('foo__')); + $this->assertEquals('foo:__bar', $loader->getCacheKey('foo')); + } + + public function testGetCacheKeyWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ArrayLoader([]); + + $loader->getCacheKey('foo'); + } + + public function testSetTemplate() + { + $loader = new ArrayLoader([]); + $loader->setTemplate('foo', 'bar'); + + $this->assertEquals('bar', $loader->getSourceContext('foo')->getCode()); + } + + public function testIsFresh() + { + $loader = new ArrayLoader(['foo' => 'bar']); + $this->assertTrue($loader->isFresh('foo', time())); + } + + public function testIsFreshWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ArrayLoader([]); + + $loader->isFresh('foo', time()); + } + + public function testTemplateReference() + { + $name = new Twig_Test_Loader_TemplateReference('foo'); + $loader = new ArrayLoader(['foo' => 'bar']); + + $loader->getCacheKey($name); + $loader->getSourceContext($name); + $loader->isFresh($name, time()); + $loader->setTemplate($name, 'foo:bar'); + + // add a dummy assertion here to satisfy PHPUnit, the only thing we want to test is that the code above + // can be executed without crashing PHP + $this->addToAssertionCount(1); + } +} + +class Twig_Test_Loader_TemplateReference +{ + private $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function __toString() + { + return $this->name; + } +} diff --git a/vendor/twig/twig/tests/Loader/ChainTest.php b/vendor/twig/twig/tests/Loader/ChainTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d89e2cc23f99bdec75eb8873508e17eecc3100f1 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/ChainTest.php @@ -0,0 +1,133 @@ +<?php + +namespace Twig\Tests\Loader; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Loader\ArrayLoader; +use Twig\Loader\ChainLoader; +use Twig\Loader\ExistsLoaderInterface; +use Twig\Loader\FilesystemLoader; +use Twig\Loader\LoaderInterface; +use Twig\Loader\SourceContextLoaderInterface; +use Twig\Source; + +class ChainTest extends \PHPUnit\Framework\TestCase +{ + /** + * @group legacy + */ + public function testGetSource() + { + $loader = new ChainLoader([ + new ArrayLoader(['foo' => 'bar']), + new ArrayLoader(['foo' => 'foobar', 'bar' => 'foo']), + ]); + + $this->assertEquals('bar', $loader->getSource('foo')); + $this->assertEquals('foo', $loader->getSource('bar')); + } + + public function testGetSourceContext() + { + $path = __DIR__.'/../Fixtures'; + $loader = new ChainLoader([ + new ArrayLoader(['foo' => 'bar']), + new ArrayLoader(['errors/index.html' => 'baz']), + new FilesystemLoader([$path]), + ]); + + $this->assertEquals('foo', $loader->getSourceContext('foo')->getName()); + $this->assertSame('', $loader->getSourceContext('foo')->getPath()); + + $this->assertEquals('errors/index.html', $loader->getSourceContext('errors/index.html')->getName()); + $this->assertSame('', $loader->getSourceContext('errors/index.html')->getPath()); + $this->assertEquals('baz', $loader->getSourceContext('errors/index.html')->getCode()); + + $this->assertEquals('errors/base.html', $loader->getSourceContext('errors/base.html')->getName()); + $this->assertEquals(realpath($path.'/errors/base.html'), realpath($loader->getSourceContext('errors/base.html')->getPath())); + $this->assertNotEquals('baz', $loader->getSourceContext('errors/base.html')->getCode()); + } + + public function testGetSourceContextWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ChainLoader([]); + + $loader->getSourceContext('foo'); + } + + /** + * @group legacy + */ + public function testGetSourceWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ChainLoader([]); + + $loader->getSource('foo'); + } + + public function testGetCacheKey() + { + $loader = new ChainLoader([ + new ArrayLoader(['foo' => 'bar']), + new ArrayLoader(['foo' => 'foobar', 'bar' => 'foo']), + ]); + + $this->assertEquals('foo:bar', $loader->getCacheKey('foo')); + $this->assertEquals('bar:foo', $loader->getCacheKey('bar')); + } + + public function testGetCacheKeyWhenTemplateDoesNotExist() + { + $this->expectException('\Twig\Error\LoaderError'); + + $loader = new ChainLoader([]); + + $loader->getCacheKey('foo'); + } + + public function testAddLoader() + { + $loader = new ChainLoader(); + $loader->addLoader(new ArrayLoader(['foo' => 'bar'])); + + $this->assertEquals('bar', $loader->getSourceContext('foo')->getCode()); + } + + public function testExists() + { + $loader1 = $this->createMock('Twig\Tests\Loader\ChainTestLoaderWithExistsInterface'); + $loader1->expects($this->once())->method('exists')->willReturn(false); + $loader1->expects($this->never())->method('getSourceContext'); + + // can be removed in 2.0 + $loader2 = $this->createMock('Twig\Tests\Loader\ChainTestLoaderInterface'); + //$loader2 = $this->createMock(['\Twig\Loader\LoaderInterface', '\Twig\Loader\SourceContextLoaderInterface']); + $loader2->expects($this->once())->method('getSourceContext')->willReturn(new Source('content', 'index')); + + $loader = new ChainLoader(); + $loader->addLoader($loader1); + $loader->addLoader($loader2); + + $this->assertTrue($loader->exists('foo')); + } +} + +interface ChainTestLoaderInterface extends LoaderInterface, SourceContextLoaderInterface +{ +} + +interface ChainTestLoaderWithExistsInterface extends LoaderInterface, ExistsLoaderInterface, SourceContextLoaderInterface +{ +} diff --git a/vendor/twig/twig/tests/Loader/FilesystemTest.php b/vendor/twig/twig/tests/Loader/FilesystemTest.php new file mode 100644 index 0000000000000000000000000000000000000000..3307a9b7e932d73862ec977d80b7d2a3597c3ad5 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/FilesystemTest.php @@ -0,0 +1,247 @@ +<?php + +namespace Twig\Tests\Loader; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Error\LoaderError; +use Twig\Loader\FilesystemLoader; + +class FilesystemTest extends \PHPUnit\Framework\TestCase +{ + public function testGetSourceContext() + { + $path = __DIR__.'/../Fixtures'; + $loader = new FilesystemLoader([$path]); + $this->assertEquals('errors/index.html', $loader->getSourceContext('errors/index.html')->getName()); + $this->assertEquals(realpath($path.'/errors/index.html'), realpath($loader->getSourceContext('errors/index.html')->getPath())); + } + + /** + * @dataProvider getSecurityTests + */ + public function testSecurity($template) + { + $loader = new FilesystemLoader([__DIR__.'/../Fixtures']); + + try { + $loader->getCacheKey($template); + $this->fail(); + } catch (LoaderError $e) { + $this->assertStringNotContainsString('Unable to find template', $e->getMessage()); + } + } + + public function getSecurityTests() + { + return [ + ["AutoloaderTest\0.php"], + ['..\\AutoloaderTest.php'], + ['..\\\\\\AutoloaderTest.php'], + ['../AutoloaderTest.php'], + ['..////AutoloaderTest.php'], + ['./../AutoloaderTest.php'], + ['.\\..\\AutoloaderTest.php'], + ['././././././../AutoloaderTest.php'], + ['.\\./.\\./.\\./../AutoloaderTest.php'], + ['foo/../../AutoloaderTest.php'], + ['foo\\..\\..\\AutoloaderTest.php'], + ['foo/../bar/../../AutoloaderTest.php'], + ['foo/bar/../../../AutoloaderTest.php'], + ['filters/../../AutoloaderTest.php'], + ['filters//..//..//AutoloaderTest.php'], + ['filters\\..\\..\\AutoloaderTest.php'], + ['filters\\\\..\\\\..\\\\AutoloaderTest.php'], + ['filters\\//../\\/\\..\\AutoloaderTest.php'], + ['/../AutoloaderTest.php'], + ]; + } + + /** + * @dataProvider getBasePaths + */ + public function testPaths($basePath, $cacheKey, $rootPath) + { + $loader = new FilesystemLoader([$basePath.'/normal', $basePath.'/normal_bis'], $rootPath); + $loader->setPaths([$basePath.'/named', $basePath.'/named_bis'], 'named'); + $loader->addPath($basePath.'/named_ter', 'named'); + $loader->addPath($basePath.'/normal_ter'); + $loader->prependPath($basePath.'/normal_final'); + $loader->prependPath($basePath.'/named/../named_quater', 'named'); + $loader->prependPath($basePath.'/named_final', 'named'); + + $this->assertEquals([ + $basePath.'/normal_final', + $basePath.'/normal', + $basePath.'/normal_bis', + $basePath.'/normal_ter', + ], $loader->getPaths()); + $this->assertEquals([ + $basePath.'/named_final', + $basePath.'/named/../named_quater', + $basePath.'/named', + $basePath.'/named_bis', + $basePath.'/named_ter', + ], $loader->getPaths('named')); + + // do not use realpath here as it would make the test unuseful + $this->assertEquals($cacheKey, str_replace('\\', '/', $loader->getCacheKey('@named/named_absolute.html'))); + $this->assertEquals("path (final)\n", $loader->getSourceContext('index.html')->getCode()); + $this->assertEquals("path (final)\n", $loader->getSourceContext('@__main__/index.html')->getCode()); + $this->assertEquals("named path (final)\n", $loader->getSourceContext('@named/index.html')->getCode()); + } + + public function getBasePaths() + { + return [ + [ + __DIR__.'/Fixtures', + 'tests/Loader/Fixtures/named_quater/named_absolute.html', + null, + ], + [ + __DIR__.'/Fixtures/../Fixtures', + 'tests/Loader/Fixtures/named_quater/named_absolute.html', + null, + ], + [ + 'tests/Loader/Fixtures', + 'tests/Loader/Fixtures/named_quater/named_absolute.html', + getcwd(), + ], + [ + 'Fixtures', + 'Fixtures/named_quater/named_absolute.html', + getcwd().'/tests/Loader', + ], + [ + 'Fixtures', + 'Fixtures/named_quater/named_absolute.html', + getcwd().'/tests/../tests/Loader', + ], + ]; + } + + public function testEmptyConstructor() + { + $loader = new FilesystemLoader(); + $this->assertEquals([], $loader->getPaths()); + } + + public function testGetNamespaces() + { + $loader = new FilesystemLoader(sys_get_temp_dir()); + $this->assertEquals([FilesystemLoader::MAIN_NAMESPACE], $loader->getNamespaces()); + + $loader->addPath(sys_get_temp_dir(), 'named'); + $this->assertEquals([FilesystemLoader::MAIN_NAMESPACE, 'named'], $loader->getNamespaces()); + } + + public function testFindTemplateExceptionNamespace() + { + $basePath = __DIR__.'/Fixtures'; + + $loader = new FilesystemLoader([$basePath.'/normal']); + $loader->addPath($basePath.'/named', 'named'); + + try { + $loader->getSourceContext('@named/nowhere.html'); + } catch (\Exception $e) { + $this->assertInstanceOf('\Twig\Error\LoaderError', $e); + $this->assertStringContainsString('Unable to find template "@named/nowhere.html"', $e->getMessage()); + } + } + + public function testFindTemplateWithCache() + { + $basePath = __DIR__.'/Fixtures'; + + $loader = new FilesystemLoader([$basePath.'/normal']); + $loader->addPath($basePath.'/named', 'named'); + + // prime the cache for index.html in the named namespace + $namedSource = $loader->getSourceContext('@named/index.html')->getCode(); + $this->assertEquals("named path\n", $namedSource); + + // get index.html from the main namespace + $this->assertEquals("path\n", $loader->getSourceContext('index.html')->getCode()); + } + + public function testLoadTemplateAndRenderBlockWithCache() + { + $loader = new FilesystemLoader([]); + $loader->addPath(__DIR__.'/Fixtures/themes/theme2'); + $loader->addPath(__DIR__.'/Fixtures/themes/theme1'); + $loader->addPath(__DIR__.'/Fixtures/themes/theme1', 'default_theme'); + + $twig = new Environment($loader); + + $template = $twig->load('blocks.html.twig'); + $this->assertSame('block from theme 1', $template->renderBlock('b1', [])); + + $template = $twig->load('blocks.html.twig'); + $this->assertSame('block from theme 2', $template->renderBlock('b2', [])); + } + + public function getArrayInheritanceTests() + { + return [ + 'valid array inheritance' => ['array_inheritance_valid_parent.html.twig'], + 'array inheritance with null first template' => ['array_inheritance_null_parent.html.twig'], + 'array inheritance with empty first template' => ['array_inheritance_empty_parent.html.twig'], + 'array inheritance with non-existent first template' => ['array_inheritance_nonexistent_parent.html.twig'], + ]; + } + + /** + * @dataProvider getArrayInheritanceTests + * + * @param $templateName string Template name with array inheritance + */ + public function testArrayInheritance($templateName) + { + $loader = new FilesystemLoader([]); + $loader->addPath(__DIR__.'/Fixtures/inheritance'); + + $twig = new Environment($loader); + + $template = $twig->load($templateName); + $this->assertSame('VALID Child', $template->renderBlock('body', [])); + } + + /** + * @requires PHP 5.3 + */ + public function testLoadTemplateFromPhar() + { + $loader = new FilesystemLoader([]); + // phar-sample.phar was created with the following script: + // $f = new Phar('phar-test.phar'); + // $f->addFromString('hello.twig', 'hello from phar'); + $loader->addPath('phar://'.__DIR__.'/Fixtures/phar/phar-sample.phar'); + $this->assertSame('hello from phar', $loader->getSourceContext('hello.twig')->getCode()); + } + + public function testTemplateExistsAlwaysReturnsBool() + { + $loader = new FilesystemLoader([]); + $this->assertFalse($loader->exists("foo\0.twig")); + $this->assertFalse($loader->exists('../foo.twig')); + $this->assertFalse($loader->exists('@foo')); + $this->assertFalse($loader->exists('foo')); + $this->assertFalse($loader->exists('@foo/bar.twig')); + + $loader->addPath(__DIR__.'/Fixtures/normal'); + $this->assertTrue($loader->exists('index.html')); + $loader->addPath(__DIR__.'/Fixtures/normal', 'foo'); + $this->assertTrue($loader->exists('@foo/index.html')); + } +} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_empty_parent.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_empty_parent.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..6977ebf66cd2e3570953196b801fcfe216b9a630 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_empty_parent.html.twig @@ -0,0 +1,3 @@ +{% extends ['','parent.html.twig'] %} + +{% block body %}{{ parent() }} Child{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_nonexistent_parent.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_nonexistent_parent.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5b50a8b211c8d1f487aa6d49ee23b6b74f40feca --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_nonexistent_parent.html.twig @@ -0,0 +1,3 @@ +{% extends ['nonexistent.html.twig','parent.html.twig'] %} + +{% block body %}{{ parent() }} Child{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_null_parent.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_null_parent.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..a16b3adedb835a534e175b9685f8b557aef93aac --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_null_parent.html.twig @@ -0,0 +1,3 @@ +{% extends [null,'parent.html.twig'] %} + +{% block body %}{{ parent() }} Child{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_valid_parent.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_valid_parent.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..4940dad4167c426bfcbe83220b38f215983f1eba --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/array_inheritance_valid_parent.html.twig @@ -0,0 +1,3 @@ +{% extends ['parent.html.twig','spare_parent.html.twig'] %} + +{% block body %}{{ parent() }} Child{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/inheritance/parent.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/parent.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..d594c0ed49dd21d7b045723d6af779ee7e6a2e37 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/parent.html.twig @@ -0,0 +1 @@ +{% block body %}VALID{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/inheritance/spare_parent.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/spare_parent.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..70b7360a2c037b179c11a493a1fd4ad68d2204dd --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/inheritance/spare_parent.html.twig @@ -0,0 +1 @@ +{% block body %}SPARE PARENT{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/named/index.html b/vendor/twig/twig/tests/Loader/Fixtures/named/index.html new file mode 100644 index 0000000000000000000000000000000000000000..9e5449c7c50ee5c04705925262a39c58ba6a8b27 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/named/index.html @@ -0,0 +1 @@ +named path diff --git a/vendor/twig/twig/tests/Loader/Fixtures/named_bis/index.html b/vendor/twig/twig/tests/Loader/Fixtures/named_bis/index.html new file mode 100644 index 0000000000000000000000000000000000000000..d3a272b19d640cf0163dc4913408a5f8946c3cad --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/named_bis/index.html @@ -0,0 +1 @@ +named path (bis) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/named_final/index.html b/vendor/twig/twig/tests/Loader/Fixtures/named_final/index.html new file mode 100644 index 0000000000000000000000000000000000000000..9f05d15075c697baad20e91143f3774b3d5c91e7 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/named_final/index.html @@ -0,0 +1 @@ +named path (final) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/named_quater/named_absolute.html b/vendor/twig/twig/tests/Loader/Fixtures/named_quater/named_absolute.html new file mode 100644 index 0000000000000000000000000000000000000000..b1fb5f5d7cacdd89a85d6c30059ce2663364c489 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/named_quater/named_absolute.html @@ -0,0 +1 @@ +named path (quater) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/named_ter/index.html b/vendor/twig/twig/tests/Loader/Fixtures/named_ter/index.html new file mode 100644 index 0000000000000000000000000000000000000000..24fb68ad2e9be450bb6ddecffd040523bdad7918 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/named_ter/index.html @@ -0,0 +1 @@ +named path (ter) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/normal/index.html b/vendor/twig/twig/tests/Loader/Fixtures/normal/index.html new file mode 100644 index 0000000000000000000000000000000000000000..e7a8fd4d0a8d87356d50e1f950a5be802aa2b1a3 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/normal/index.html @@ -0,0 +1 @@ +path diff --git a/vendor/twig/twig/tests/Loader/Fixtures/normal_bis/index.html b/vendor/twig/twig/tests/Loader/Fixtures/normal_bis/index.html new file mode 100644 index 0000000000000000000000000000000000000000..bfa916049ff601250716d8dd9e6585c98d659d22 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/normal_bis/index.html @@ -0,0 +1 @@ +path (bis) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/normal_final/index.html b/vendor/twig/twig/tests/Loader/Fixtures/normal_final/index.html new file mode 100644 index 0000000000000000000000000000000000000000..73a089bbda5b1c45b20bd06934402a60e4d4975a --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/normal_final/index.html @@ -0,0 +1 @@ +path (final) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/normal_ter/index.html b/vendor/twig/twig/tests/Loader/Fixtures/normal_ter/index.html new file mode 100644 index 0000000000000000000000000000000000000000..b7ad97d8f480bf9cd8cf80146aef1ee548d19961 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/normal_ter/index.html @@ -0,0 +1 @@ +path (ter) diff --git a/vendor/twig/twig/tests/Loader/Fixtures/phar/phar-sample.phar b/vendor/twig/twig/tests/Loader/Fixtures/phar/phar-sample.phar new file mode 100644 index 0000000000000000000000000000000000000000..092bbfae3e4c98b308dc98bf7653ead68ae3ee6e --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/phar/phar-sample.phar @@ -0,0 +1,293 @@ +<?php + +$web = 'index.php'; + +if (in_array('phar', stream_get_wrappers()) && class_exists('Phar', 0)) { +Phar::interceptFileFuncs(); +set_include_path('phar://' . __FILE__ . PATH_SEPARATOR . get_include_path()); +Phar::webPhar(null, $web); +include 'phar://' . __FILE__ . '/' . Extract_Phar::START; +return; +} + +if (@(isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && ($_SERVER['REQUEST_METHOD'] == 'GET' || $_SERVER['REQUEST_METHOD'] == 'POST'))) { +Extract_Phar::go(true); +$mimes = array( +'phps' => 2, +'c' => 'text/plain', +'cc' => 'text/plain', +'cpp' => 'text/plain', +'c++' => 'text/plain', +'dtd' => 'text/plain', +'h' => 'text/plain', +'log' => 'text/plain', +'rng' => 'text/plain', +'txt' => 'text/plain', +'xsd' => 'text/plain', +'php' => 1, +'inc' => 1, +'avi' => 'video/avi', +'bmp' => 'image/bmp', +'css' => 'text/css', +'gif' => 'image/gif', +'htm' => 'text/html', +'html' => 'text/html', +'htmls' => 'text/html', +'ico' => 'image/x-ico', +'jpe' => 'image/jpeg', +'jpg' => 'image/jpeg', +'jpeg' => 'image/jpeg', +'js' => 'application/x-javascript', +'midi' => 'audio/midi', +'mid' => 'audio/midi', +'mod' => 'audio/mod', +'mov' => 'movie/quicktime', +'mp3' => 'audio/mp3', +'mpg' => 'video/mpeg', +'mpeg' => 'video/mpeg', +'pdf' => 'application/pdf', +'png' => 'image/png', +'swf' => 'application/shockwave-flash', +'tif' => 'image/tiff', +'tiff' => 'image/tiff', +'wav' => 'audio/wav', +'xbm' => 'image/xbm', +'xml' => 'text/xml', +); + +header("Cache-Control: no-cache, must-revalidate"); +header("Pragma: no-cache"); + +$basename = basename(__FILE__); +if (!strpos($_SERVER['REQUEST_URI'], $basename)) { +chdir(Extract_Phar::$temp); +include $web; +return; +} +$pt = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], $basename) + strlen($basename)); +if (!$pt || $pt == '/') { +$pt = $web; +header('HTTP/1.1 301 Moved Permanently'); +header('Location: ' . $_SERVER['REQUEST_URI'] . '/' . $pt); +exit; +} +$a = realpath(Extract_Phar::$temp . DIRECTORY_SEPARATOR . $pt); +if (!$a || strlen(dirname($a)) < strlen(Extract_Phar::$temp)) { +header('HTTP/1.0 404 Not Found'); +echo "<html>\n <head>\n <title>File Not Found<title>\n </head>\n <body>\n <h1>404 - File ", $pt, " Not Found</h1>\n </body>\n</html>"; +exit; +} +$b = pathinfo($a); +if (!isset($b['extension'])) { +header('Content-Type: text/plain'); +header('Content-Length: ' . filesize($a)); +readfile($a); +exit; +} +if (isset($mimes[$b['extension']])) { +if ($mimes[$b['extension']] === 1) { +include $a; +exit; +} +if ($mimes[$b['extension']] === 2) { +highlight_file($a); +exit; +} +header('Content-Type: ' .$mimes[$b['extension']]); +header('Content-Length: ' . filesize($a)); +readfile($a); +exit; +} +} + +class Extract_Phar +{ +static $temp; +static $origdir; +const GZ = 0x1000; +const BZ2 = 0x2000; +const MASK = 0x3000; +const START = 'index.php'; +const LEN = 6685; + +static function go($return = false) +{ +$fp = fopen(__FILE__, 'rb'); +fseek($fp, self::LEN); +$L = unpack('V', $a = (binary)fread($fp, 4)); +$m = (binary)''; + +do { +$read = 8192; +if ($L[1] - strlen($m) < 8192) { +$read = $L[1] - strlen($m); +} +$last = (binary)fread($fp, $read); +$m .= $last; +} while (strlen($last) && strlen($m) < $L[1]); + +if (strlen($m) < $L[1]) { +die('ERROR: manifest length read was "' . +strlen($m) .'" should be "' . +$L[1] . '"'); +} + +$info = self::_unpack($m); +$f = $info['c']; + +if ($f & self::GZ) { +if (!function_exists('gzinflate')) { +die('Error: zlib extension is not enabled -' . +' gzinflate() function needed for zlib-compressed .phars'); +} +} + +if ($f & self::BZ2) { +if (!function_exists('bzdecompress')) { +die('Error: bzip2 extension is not enabled -' . +' bzdecompress() function needed for bz2-compressed .phars'); +} +} + +$temp = self::tmpdir(); + +if (!$temp || !is_writable($temp)) { +$sessionpath = session_save_path(); +if (strpos ($sessionpath, ";") !== false) +$sessionpath = substr ($sessionpath, strpos ($sessionpath, ";")+1); +if (!file_exists($sessionpath) || !is_dir($sessionpath)) { +die('Could not locate temporary directory to extract phar'); +} +$temp = $sessionpath; +} + +$temp .= '/pharextract/'.basename(__FILE__, '.phar'); +self::$temp = $temp; +self::$origdir = getcwd(); +@mkdir($temp, 0777, true); +$temp = realpath($temp); + +if (!file_exists($temp . DIRECTORY_SEPARATOR . md5_file(__FILE__))) { +self::_removeTmpFiles($temp, getcwd()); +@mkdir($temp, 0777, true); +@file_put_contents($temp . '/' . md5_file(__FILE__), ''); + +foreach ($info['m'] as $path => $file) { +$a = !file_exists(dirname($temp . '/' . $path)); +@mkdir(dirname($temp . '/' . $path), 0777, true); +clearstatcache(); + +if ($path[strlen($path) - 1] == '/') { +@mkdir($temp . '/' . $path, 0777); +} else { +file_put_contents($temp . '/' . $path, self::extractFile($path, $file, $fp)); +@chmod($temp . '/' . $path, 0666); +} +} +} + +chdir($temp); + +if (!$return) { +include self::START; +} +} + +static function tmpdir() +{ +if (strpos(PHP_OS, 'WIN') !== false) { +if ($var = getenv('TMP') ? getenv('TMP') : getenv('TEMP')) { +return $var; +} +if (is_dir('/temp') || mkdir('/temp')) { +return realpath('/temp'); +} +return false; +} +if ($var = getenv('TMPDIR')) { +return $var; +} +return realpath('/tmp'); +} + +static function _unpack($m) +{ +$info = unpack('V', substr($m, 0, 4)); + $l = unpack('V', substr($m, 10, 4)); +$m = substr($m, 14 + $l[1]); +$s = unpack('V', substr($m, 0, 4)); +$o = 0; +$start = 4 + $s[1]; +$ret['c'] = 0; + +for ($i = 0; $i < $info[1]; $i++) { + $len = unpack('V', substr($m, $start, 4)); +$start += 4; + $savepath = substr($m, $start, $len[1]); +$start += $len[1]; + $ret['m'][$savepath] = array_values(unpack('Va/Vb/Vc/Vd/Ve/Vf', substr($m, $start, 24))); +$ret['m'][$savepath][3] = sprintf('%u', $ret['m'][$savepath][3] +& 0xffffffff); +$ret['m'][$savepath][7] = $o; +$o += $ret['m'][$savepath][2]; +$start += 24 + $ret['m'][$savepath][5]; +$ret['c'] |= $ret['m'][$savepath][4] & self::MASK; +} +return $ret; +} + +static function extractFile($path, $entry, $fp) +{ +$data = ''; +$c = $entry[2]; + +while ($c) { +if ($c < 8192) { +$data .= @fread($fp, $c); +$c = 0; +} else { +$c -= 8192; +$data .= @fread($fp, 8192); +} +} + +if ($entry[4] & self::GZ) { +$data = gzinflate($data); +} elseif ($entry[4] & self::BZ2) { +$data = bzdecompress($data); +} + +if (strlen($data) != $entry[0]) { +die("Invalid internal .phar file (size error " . strlen($data) . " != " . +$stat[7] . ")"); +} + +if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +die("Invalid internal .phar file (checksum error)"); +} + +return $data; +} + +static function _removeTmpFiles($temp, $origdir) +{ +chdir($temp); + +foreach (glob('*') as $f) { +if (file_exists($f)) { +is_dir($f) ? @rmdir($f) : @unlink($f); +if (file_exists($f) && is_dir($f)) { +self::_removeTmpFiles($f, getcwd()); +} +} +} + +@rmdir($temp); +clearstatcache(); +chdir($origdir); +} +} + +Extract_Phar::go(); +__HALT_COMPILER(); ?>8������������������ +���hello.twig������W���xY5A�������hello from phar�`�E��8�5��A�����x����GBMB \ No newline at end of file diff --git a/vendor/twig/twig/tests/Loader/Fixtures/themes/theme1/blocks.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/themes/theme1/blocks.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..dd0cbc2e712d9833a96172813b24f8297b544f7d --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/themes/theme1/blocks.html.twig @@ -0,0 +1,3 @@ +{% block b1 %}block from theme 1{% endblock %} + +{% block b2 %}block from theme 1{% endblock %} diff --git a/vendor/twig/twig/tests/Loader/Fixtures/themes/theme2/blocks.html.twig b/vendor/twig/twig/tests/Loader/Fixtures/themes/theme2/blocks.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..07cf9db0dea5cbca6dfeab4093c8c376a6e93603 --- /dev/null +++ b/vendor/twig/twig/tests/Loader/Fixtures/themes/theme2/blocks.html.twig @@ -0,0 +1,3 @@ +{% use '@default_theme/blocks.html.twig' %} + +{% block b2 %}block from theme 2{% endblock %} diff --git a/vendor/twig/twig/tests/NativeExtensionTest.php b/vendor/twig/twig/tests/NativeExtensionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..3399292e386402927b47d7d3633765bf8926d19c --- /dev/null +++ b/vendor/twig/twig/tests/NativeExtensionTest.php @@ -0,0 +1,43 @@ +<?php + +namespace Twig\Tests; + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Loader\ArrayLoader; + +class NativeExtensionTest extends \PHPUnit\Framework\TestCase +{ + /** + * @requires PHP 5.3 + */ + public function testGetProperties() + { + if (\PHP_VERSION_ID >= 70000) { + $this->markTestSkipped('Extension is not available on PHP 7+'); + } + + $twig = new Environment(new ArrayLoader(['index' => '{{ d1.date }}{{ d2.date }}']), [ + 'debug' => true, + 'cache' => false, + 'autoescape' => false, + ]); + + $d1 = new \DateTime(); + $d2 = new \DateTime(); + $output = $twig->render('index', compact('d1', 'd2')); + + // If it fails, PHP will crash. + $this->assertEquals($output, $d1->date.$d2->date); + } +} diff --git a/vendor/twig/twig/tests/Node/AutoEscapeTest.php b/vendor/twig/twig/tests/Node/AutoEscapeTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d0f641c083c0b36ee1247c9d738fa2a6e756cd65 --- /dev/null +++ b/vendor/twig/twig/tests/Node/AutoEscapeTest.php @@ -0,0 +1,39 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\AutoEscapeNode; +use Twig\Node\Node; +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class AutoEscapeTest extends NodeTestCase +{ + public function testConstructor() + { + $body = new Node([new TextNode('foo', 1)]); + $node = new AutoEscapeNode(true, $body, 1); + + $this->assertEquals($body, $node->getNode('body')); + $this->assertTrue($node->getAttribute('value')); + } + + public function getTests() + { + $body = new Node([new TextNode('foo', 1)]); + $node = new AutoEscapeNode(true, $body, 1); + + return [ + [$node, "// line 1\necho \"foo\";"], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/BlockReferenceTest.php b/vendor/twig/twig/tests/Node/BlockReferenceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..63dc0707c78bf5673060d03bfd1bc0fd4756554e --- /dev/null +++ b/vendor/twig/twig/tests/Node/BlockReferenceTest.php @@ -0,0 +1,36 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\BlockReferenceNode; +use Twig\Test\NodeTestCase; + +class BlockReferenceTest extends NodeTestCase +{ + public function testConstructor() + { + $node = new BlockReferenceNode('foo', 1); + + $this->assertEquals('foo', $node->getAttribute('name')); + } + + public function getTests() + { + return [ + [new BlockReferenceNode('foo', 1), <<<EOF +// line 1 +\$this->displayBlock('foo', \$context, \$blocks); +EOF + ], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/BlockTest.php b/vendor/twig/twig/tests/Node/BlockTest.php new file mode 100644 index 0000000000000000000000000000000000000000..235cbaf84fd4f830a61b02e8ebf3ce823a97e060 --- /dev/null +++ b/vendor/twig/twig/tests/Node/BlockTest.php @@ -0,0 +1,45 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\BlockNode; +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class BlockTest extends NodeTestCase +{ + public function testConstructor() + { + $body = new TextNode('foo', 1); + $node = new BlockNode('foo', $body, 1); + + $this->assertEquals($body, $node->getNode('body')); + $this->assertEquals('foo', $node->getAttribute('name')); + } + + public function getTests() + { + $body = new TextNode('foo', 1); + $node = new BlockNode('foo', $body, 1); + + return [ + [$node, <<<EOF +// line 1 +public function block_foo(\$context, array \$blocks = []) +{ + echo "foo"; +} +EOF + ], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/DeprecatedTest.php b/vendor/twig/twig/tests/Node/DeprecatedTest.php new file mode 100644 index 0000000000000000000000000000000000000000..f4d1cb3b4dafd65d4c069d3cbfadbb6d2c6ba0ae --- /dev/null +++ b/vendor/twig/twig/tests/Node/DeprecatedTest.php @@ -0,0 +1,82 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\DeprecatedNode; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FunctionExpression; +use Twig\Node\IfNode; +use Twig\Node\Node; +use Twig\Test\NodeTestCase; +use Twig\TwigFunction; + +class DeprecatedTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression('foo', 1); + $node = new DeprecatedNode($expr, 1); + + $this->assertEquals($expr, $node->getNode('expr')); + } + + public function getTests() + { + $tests = []; + + $expr = new ConstantExpression('This section is deprecated', 1); + $node = new DeprecatedNode($expr, 1, 'deprecated'); + $node->setTemplateName('foo.twig'); + + $tests[] = [$node, <<<EOF +// line 1 +@trigger_error("This section is deprecated"." (\"foo.twig\" at line 1).", E_USER_DEPRECATED); +EOF + ]; + + $t = new Node([ + new ConstantExpression(true, 1), + new DeprecatedNode($expr, 2, 'deprecated'), + ], [], 1); + $node = new IfNode($t, null, 1); + $node->setTemplateName('foo.twig'); + + $tests[] = [$node, <<<EOF +// line 1 +if (true) { + // line 2 + @trigger_error("This section is deprecated"." (\"foo.twig\" at line 2).", E_USER_DEPRECATED); +} +EOF + ]; + + $environment = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $environment->addFunction(new TwigFunction('foo', 'foo', [])); + + $expr = new FunctionExpression('foo', new Node(), 1); + $node = new DeprecatedNode($expr, 1, 'deprecated'); + $node->setTemplateName('foo.twig'); + + $compiler = $this->getCompiler($environment); + $varName = $compiler->getVarName(); + + $tests[] = [$node, <<<EOF +// line 1 +\$$varName = foo(); +@trigger_error(\$$varName." (\"foo.twig\" at line 1).", E_USER_DEPRECATED); +EOF + , $environment]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/DoTest.php b/vendor/twig/twig/tests/Node/DoTest.php new file mode 100644 index 0000000000000000000000000000000000000000..aaebba5f7952418c486b4b7d163f7fef32483753 --- /dev/null +++ b/vendor/twig/twig/tests/Node/DoTest.php @@ -0,0 +1,38 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\DoNode; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class DoTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression('foo', 1); + $node = new DoNode($expr, 1); + + $this->assertEquals($expr, $node->getNode('expr')); + } + + public function getTests() + { + $tests = []; + + $expr = new ConstantExpression('foo', 1); + $node = new DoNode($expr, 1); + $tests[] = [$node, "// line 1\n\"foo\";"]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/ArrayTest.php b/vendor/twig/twig/tests/Node/Expression/ArrayTest.php new file mode 100644 index 0000000000000000000000000000000000000000..cfd9c67f3cbd70143b07af929c3565c84cfa2de7 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/ArrayTest.php @@ -0,0 +1,43 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class ArrayTest extends NodeTestCase +{ + public function testConstructor() + { + $elements = [new ConstantExpression('foo', 1), $foo = new ConstantExpression('bar', 1)]; + $node = new ArrayExpression($elements, 1); + + $this->assertEquals($foo, $node->getNode(1)); + } + + public function getTests() + { + $elements = [ + new ConstantExpression('foo', 1), + new ConstantExpression('bar', 1), + + new ConstantExpression('bar', 1), + new ConstantExpression('foo', 1), + ]; + $node = new ArrayExpression($elements, 1); + + return [ + [$node, '["foo" => "bar", "bar" => "foo"]'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/AssignNameTest.php b/vendor/twig/twig/tests/Node/Expression/AssignNameTest.php new file mode 100644 index 0000000000000000000000000000000000000000..80dbe94c6c0b613bf2e48ca8032ffa7526acf572 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/AssignNameTest.php @@ -0,0 +1,34 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\AssignNameExpression; +use Twig\Test\NodeTestCase; + +class AssignNameTest extends NodeTestCase +{ + public function testConstructor() + { + $node = new AssignNameExpression('foo', 1); + + $this->assertEquals('foo', $node->getAttribute('name')); + } + + public function getTests() + { + $node = new AssignNameExpression('foo', 1); + + return [ + [$node, '$context["foo"]'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/AddTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/AddTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5cff2bcff1de1599964c151722f360f81ac39bd3 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/AddTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\AddBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class AddTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new AddBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new AddBinary($left, $right, 1); + + return [ + [$node, '(1 + 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/AndTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/AndTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d83aed04d964c73aed57cdbbf379c35471b26f4d --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/AndTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\AndBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class AndTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new AndBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new AndBinary($left, $right, 1); + + return [ + [$node, '(1 && 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/ConcatTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/ConcatTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0eff603ba282a8bcf23d18435c6095c4a9f99fb5 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/ConcatTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\ConcatBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class ConcatTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new ConcatBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new ConcatBinary($left, $right, 1); + + return [ + [$node, '(1 . 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/DivTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/DivTest.php new file mode 100644 index 0000000000000000000000000000000000000000..20cf4646f850e1f922d4aa9bf48627805f5fe623 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/DivTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\DivBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class DivTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new DivBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new DivBinary($left, $right, 1); + + return [ + [$node, '(1 / 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/FloorDivTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/FloorDivTest.php new file mode 100644 index 0000000000000000000000000000000000000000..826859851bbb97b4e285bf3c7560a434e7e65ae0 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/FloorDivTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\FloorDivBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class FloorDivTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new FloorDivBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new FloorDivBinary($left, $right, 1); + + return [ + [$node, '(int) floor((1 / 2))'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/ModTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/ModTest.php new file mode 100644 index 0000000000000000000000000000000000000000..2069ef08950d31b313e09d4710f2ca3094bd7cc1 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/ModTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\ModBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class ModTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new ModBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new ModBinary($left, $right, 1); + + return [ + [$node, '(1 % 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/MulTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/MulTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c50dfc12b1bb35e04b78dfdedb9513b266c0934d --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/MulTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\MulBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class MulTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new MulBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new MulBinary($left, $right, 1); + + return [ + [$node, '(1 * 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/OrTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/OrTest.php new file mode 100644 index 0000000000000000000000000000000000000000..94df7c0b165fa2e1451117c1d25301a77a77fe1c --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/OrTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\OrBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class OrTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new OrBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new OrBinary($left, $right, 1); + + return [ + [$node, '(1 || 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Binary/SubTest.php b/vendor/twig/twig/tests/Node/Expression/Binary/SubTest.php new file mode 100644 index 0000000000000000000000000000000000000000..04eebe290d601466b1d73cc5de3ab870cbd472ae --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Binary/SubTest.php @@ -0,0 +1,40 @@ +<?php + +namespace Twig\Tests\Node\Expression\Binary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\Binary\SubBinary; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class SubTest extends NodeTestCase +{ + public function testConstructor() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new SubBinary($left, $right, 1); + + $this->assertEquals($left, $node->getNode('left')); + $this->assertEquals($right, $node->getNode('right')); + } + + public function getTests() + { + $left = new ConstantExpression(1, 1); + $right = new ConstantExpression(2, 1); + $node = new SubBinary($left, $right, 1); + + return [ + [$node, '(1 - 2)'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/CallTest.php b/vendor/twig/twig/tests/Node/Expression/CallTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1ffb4c7b6f46e4bf9cf375e2a96a4a5a5830c143 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/CallTest.php @@ -0,0 +1,139 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\CallExpression; + +class CallTest extends \PHPUnit\Framework\TestCase +{ + public function testGetArguments() + { + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'date']); + $this->assertEquals(['U', null], $node->getArguments('date', ['format' => 'U', 'timestamp' => null])); + } + + public function testGetArgumentsWhenPositionalArgumentsAfterNamedArguments() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Positional arguments cannot be used after named arguments for function "date".'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'date']); + $node->getArguments('date', ['timestamp' => 123456, 'Y-m-d']); + } + + public function testGetArgumentsWhenArgumentIsDefinedTwice() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Argument "format" is defined twice for function "date".'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'date']); + $node->getArguments('date', ['Y-m-d', 'format' => 'U']); + } + + public function testGetArgumentsWithWrongNamedArgumentName() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown argument "unknown" for function "date(format, timestamp)".'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'date']); + $node->getArguments('date', ['Y-m-d', 'timestamp' => null, 'unknown' => '']); + } + + public function testGetArgumentsWithWrongNamedArgumentNames() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown arguments "unknown1", "unknown2" for function "date(format, timestamp)".'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'date']); + $node->getArguments('date', ['Y-m-d', 'timestamp' => null, 'unknown1' => '', 'unknown2' => '']); + } + + public function testResolveArgumentsWithMissingValueForOptionalArgument() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Argument "case_sensitivity" could not be assigned for function "substr_compare(main_str, str, offset, length, case_sensitivity)" because it is mapped to an internal PHP function which cannot determine default value for optional argument "length".'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'substr_compare']); + $node->getArguments('substr_compare', ['abcd', 'bc', 'offset' => 1, 'case_sensitivity' => true]); + } + + public function testResolveArgumentsOnlyNecessaryArgumentsForCustomFunction() + { + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'custom_function']); + + $this->assertEquals(['arg1'], $node->getArguments([$this, 'customFunction'], ['arg1' => 'arg1'])); + } + + public function testGetArgumentsForStaticMethod() + { + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'custom_static_function']); + $this->assertEquals(['arg1'], $node->getArguments(__CLASS__.'::customStaticFunction', ['arg1' => 'arg1'])); + } + + public function testResolveArgumentsWithMissingParameterForArbitraryArguments() + { + $this->expectException('\LogicException'); + $this->expectExceptionMessage('The last parameter of "Twig\\Tests\\Node\\Expression\\CallTest::customFunctionWithArbitraryArguments" for function "foo" must be an array with default value, eg. "array $arg = []".'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'foo', 'is_variadic' => true]); + $node->getArguments([$this, 'customFunctionWithArbitraryArguments'], []); + } + + public static function customStaticFunction($arg1, $arg2 = 'default', $arg3 = []) + { + } + + public function customFunction($arg1, $arg2 = 'default', $arg3 = []) + { + } + + public function customFunctionWithArbitraryArguments() + { + } + + public function testResolveArgumentsWithMissingParameterForArbitraryArgumentsOnFunction() + { + $this->expectException('\LogicException'); + $this->expectExceptionMessageRegExp('#^The last parameter of "Twig\\\\Tests\\\\Node\\\\Expression\\\\custom_Twig_Tests_Node_Expression_CallTest_function" for function "foo" must be an array with default value, eg\\. "array \\$arg \\= \\[\\]"\\.$#'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'foo', 'is_variadic' => true]); + $node->getArguments('Twig\Tests\Node\Expression\custom_Twig_Tests_Node_Expression_CallTest_function', []); + } + + public function testResolveArgumentsWithMissingParameterForArbitraryArgumentsOnObject() + { + $this->expectException('\LogicException'); + $this->expectExceptionMessageRegExp('#^The last parameter of "Twig\\\\Tests\\\\Node\\\\Expression\\\\CallableTestClass\\:\\:__invoke" for function "foo" must be an array with default value, eg\\. "array \\$arg \\= \\[\\]"\\.$#'); + + $node = new Node_Expression_Call([], ['type' => 'function', 'name' => 'foo', 'is_variadic' => true]); + $node->getArguments(new CallableTestClass(), []); + } +} + +class Node_Expression_Call extends CallExpression +{ + public function getArguments($callable, $arguments) + { + return parent::getArguments($callable, $arguments); + } +} + +class CallableTestClass +{ + public function __invoke($required) + { + } +} + +function custom_Twig_Tests_Node_Expression_CallTest_function($required) +{ +} diff --git a/vendor/twig/twig/tests/Node/Expression/ConditionalTest.php b/vendor/twig/twig/tests/Node/Expression/ConditionalTest.php new file mode 100644 index 0000000000000000000000000000000000000000..004e9c9513e894d4a730f2ebaa822b47b3a75249 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/ConditionalTest.php @@ -0,0 +1,44 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class ConditionalTest extends NodeTestCase +{ + public function testConstructor() + { + $expr1 = new ConstantExpression(1, 1); + $expr2 = new ConstantExpression(2, 1); + $expr3 = new ConstantExpression(3, 1); + $node = new ConditionalExpression($expr1, $expr2, $expr3, 1); + + $this->assertEquals($expr1, $node->getNode('expr1')); + $this->assertEquals($expr2, $node->getNode('expr2')); + $this->assertEquals($expr3, $node->getNode('expr3')); + } + + public function getTests() + { + $tests = []; + + $expr1 = new ConstantExpression(1, 1); + $expr2 = new ConstantExpression(2, 1); + $expr3 = new ConstantExpression(3, 1); + $node = new ConditionalExpression($expr1, $expr2, $expr3, 1); + $tests[] = [$node, '((1) ? (2) : (3))']; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/ConstantTest.php b/vendor/twig/twig/tests/Node/Expression/ConstantTest.php new file mode 100644 index 0000000000000000000000000000000000000000..920892e942d5f58bcbe7528bee50db5496c9c467 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/ConstantTest.php @@ -0,0 +1,35 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Test\NodeTestCase; + +class ConstantTest extends NodeTestCase +{ + public function testConstructor() + { + $node = new ConstantExpression('foo', 1); + + $this->assertEquals('foo', $node->getAttribute('value')); + } + + public function getTests() + { + $tests = []; + + $node = new ConstantExpression('foo', 1); + $tests[] = [$node, '"foo"']; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/FilterTest.php b/vendor/twig/twig/tests/Node/Expression/FilterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d7e38f3171d2d03047591160d3e767c51edc1906 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/FilterTest.php @@ -0,0 +1,161 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FilterExpression; +use Twig\Node\Node; +use Twig\Test\NodeTestCase; +use Twig\TwigFilter; + +class FilterTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression('foo', 1); + $name = new ConstantExpression('upper', 1); + $args = new Node(); + $node = new FilterExpression($expr, $name, $args, 1); + + $this->assertEquals($expr, $node->getNode('node')); + $this->assertEquals($name, $node->getNode('filter')); + $this->assertEquals($args, $node->getNode('arguments')); + } + + public function getTests() + { + $environment = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $environment->addFilter(new TwigFilter('bar', 'bar', ['needs_environment' => true])); + $environment->addFilter(new TwigFilter('barbar', 'Twig\Tests\Node\Expression\twig_tests_filter_barbar', ['needs_context' => true, 'is_variadic' => true])); + + $tests = []; + + $expr = new ConstantExpression('foo', 1); + $node = $this->createFilter($expr, 'upper'); + $node = $this->createFilter($node, 'number_format', [new ConstantExpression(2, 1), new ConstantExpression('.', 1), new ConstantExpression(',', 1)]); + + if (\function_exists('mb_get_info')) { + $tests[] = [$node, 'twig_number_format_filter($this->env, twig_upper_filter($this->env, "foo"), 2, ".", ",")']; + } else { + $tests[] = [$node, 'twig_number_format_filter($this->env, strtoupper("foo"), 2, ".", ",")']; + } + + // named arguments + $date = new ConstantExpression(0, 1); + $node = $this->createFilter($date, 'date', [ + 'timezone' => new ConstantExpression('America/Chicago', 1), + 'format' => new ConstantExpression('d/m/Y H:i:s P', 1), + ]); + $tests[] = [$node, 'twig_date_format_filter($this->env, 0, "d/m/Y H:i:s P", "America/Chicago")']; + + // skip an optional argument + $date = new ConstantExpression(0, 1); + $node = $this->createFilter($date, 'date', [ + 'timezone' => new ConstantExpression('America/Chicago', 1), + ]); + $tests[] = [$node, 'twig_date_format_filter($this->env, 0, null, "America/Chicago")']; + + // underscores vs camelCase for named arguments + $string = new ConstantExpression('abc', 1); + $node = $this->createFilter($string, 'reverse', [ + 'preserve_keys' => new ConstantExpression(true, 1), + ]); + $tests[] = [$node, 'twig_reverse_filter($this->env, "abc", true)']; + $node = $this->createFilter($string, 'reverse', [ + 'preserveKeys' => new ConstantExpression(true, 1), + ]); + $tests[] = [$node, 'twig_reverse_filter($this->env, "abc", true)']; + + // filter as an anonymous function + if (\PHP_VERSION_ID >= 50300) { + $node = $this->createFilter(new ConstantExpression('foo', 1), 'anonymous'); + $tests[] = [$node, 'call_user_func_array($this->env->getFilter(\'anonymous\')->getCallable(), ["foo"])']; + } + + // needs environment + $node = $this->createFilter($string, 'bar'); + $tests[] = [$node, 'bar($this->env, "abc")', $environment]; + + $node = $this->createFilter($string, 'bar', [new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'bar($this->env, "abc", "bar")', $environment]; + + // arbitrary named arguments + $node = $this->createFilter($string, 'barbar'); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_filter_barbar($context, "abc")', $environment]; + + $node = $this->createFilter($string, 'barbar', ['foo' => new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_filter_barbar($context, "abc", null, null, ["foo" => "bar"])', $environment]; + + $node = $this->createFilter($string, 'barbar', ['arg2' => new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_filter_barbar($context, "abc", null, "bar")', $environment]; + + $node = $this->createFilter($string, 'barbar', [ + new ConstantExpression('1', 1), + new ConstantExpression('2', 1), + new ConstantExpression('3', 1), + 'foo' => new ConstantExpression('bar', 1), + ]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_filter_barbar($context, "abc", "1", "2", [0 => "3", "foo" => "bar"])', $environment]; + + return $tests; + } + + public function testCompileWithWrongNamedArgumentName() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown argument "foobar" for filter "date(format, timezone)" at line 1.'); + + $date = new ConstantExpression(0, 1); + $node = $this->createFilter($date, 'date', [ + 'foobar' => new ConstantExpression('America/Chicago', 1), + ]); + + $compiler = $this->getCompiler(); + $compiler->compile($node); + } + + public function testCompileWithMissingNamedArgument() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Value for argument "from" is required for filter "replace" at line 1.'); + + $value = new ConstantExpression(0, 1); + $node = $this->createFilter($value, 'replace', [ + 'to' => new ConstantExpression('foo', 1), + ]); + + $compiler = $this->getCompiler(); + $compiler->compile($node); + } + + protected function createFilter($node, $name, array $arguments = []) + { + $name = new ConstantExpression($name, 1); + $arguments = new Node($arguments); + + return new FilterExpression($node, $name, $arguments, 1); + } + + protected function getEnvironment() + { + if (\PHP_VERSION_ID >= 50300) { + return include 'PHP53/FilterInclude.php'; + } + + return parent::getEnvironment(); + } +} + +function twig_tests_filter_barbar($context, $string, $arg1 = null, $arg2 = null, array $args = []) +{ +} diff --git a/vendor/twig/twig/tests/Node/Expression/FunctionTest.php b/vendor/twig/twig/tests/Node/Expression/FunctionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..489f17ab41d5d77de305f3026062f45cd871353d --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/FunctionTest.php @@ -0,0 +1,119 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FunctionExpression; +use Twig\Node\Node; +use Twig\Test\NodeTestCase; +use Twig\TwigFunction; + +class FunctionTest extends NodeTestCase +{ + public function testConstructor() + { + $name = 'function'; + $args = new Node(); + $node = new FunctionExpression($name, $args, 1); + + $this->assertEquals($name, $node->getAttribute('name')); + $this->assertEquals($args, $node->getNode('arguments')); + } + + public function getTests() + { + $environment = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $environment->addFunction(new TwigFunction('foo', 'foo', [])); + $environment->addFunction(new TwigFunction('bar', 'bar', ['needs_environment' => true])); + $environment->addFunction(new TwigFunction('foofoo', 'foofoo', ['needs_context' => true])); + $environment->addFunction(new TwigFunction('foobar', 'foobar', ['needs_environment' => true, 'needs_context' => true])); + $environment->addFunction(new TwigFunction('barbar', 'Twig\Tests\Node\Expression\twig_tests_function_barbar', ['is_variadic' => true])); + + $tests = []; + + $node = $this->createFunction('foo'); + $tests[] = [$node, 'foo()', $environment]; + + $node = $this->createFunction('foo', [new ConstantExpression('bar', 1), new ConstantExpression('foobar', 1)]); + $tests[] = [$node, 'foo("bar", "foobar")', $environment]; + + $node = $this->createFunction('bar'); + $tests[] = [$node, 'bar($this->env)', $environment]; + + $node = $this->createFunction('bar', [new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'bar($this->env, "bar")', $environment]; + + $node = $this->createFunction('foofoo'); + $tests[] = [$node, 'foofoo($context)', $environment]; + + $node = $this->createFunction('foofoo', [new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'foofoo($context, "bar")', $environment]; + + $node = $this->createFunction('foobar'); + $tests[] = [$node, 'foobar($this->env, $context)', $environment]; + + $node = $this->createFunction('foobar', [new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'foobar($this->env, $context, "bar")', $environment]; + + // named arguments + $node = $this->createFunction('date', [ + 'timezone' => new ConstantExpression('America/Chicago', 1), + 'date' => new ConstantExpression(0, 1), + ]); + $tests[] = [$node, 'twig_date_converter($this->env, 0, "America/Chicago")']; + + // arbitrary named arguments + $node = $this->createFunction('barbar'); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_function_barbar()', $environment]; + + $node = $this->createFunction('barbar', ['foo' => new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_function_barbar(null, null, ["foo" => "bar"])', $environment]; + + $node = $this->createFunction('barbar', ['arg2' => new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_function_barbar(null, "bar")', $environment]; + + $node = $this->createFunction('barbar', [ + new ConstantExpression('1', 1), + new ConstantExpression('2', 1), + new ConstantExpression('3', 1), + 'foo' => new ConstantExpression('bar', 1), + ]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_function_barbar("1", "2", [0 => "3", "foo" => "bar"])', $environment]; + + // function as an anonymous function + if (\PHP_VERSION_ID >= 50300) { + $node = $this->createFunction('anonymous', [new ConstantExpression('foo', 1)]); + $tests[] = [$node, 'call_user_func_array($this->env->getFunction(\'anonymous\')->getCallable(), ["foo"])']; + } + + return $tests; + } + + protected function createFunction($name, array $arguments = []) + { + return new FunctionExpression($name, new Node($arguments), 1); + } + + protected function getEnvironment() + { + if (\PHP_VERSION_ID >= 50300) { + return include 'PHP53/FunctionInclude.php'; + } + + return parent::getEnvironment(); + } +} + +function twig_tests_function_barbar($arg1 = null, $arg2 = null, array $args = []) +{ +} diff --git a/vendor/twig/twig/tests/Node/Expression/GetAttrTest.php b/vendor/twig/twig/tests/Node/Expression/GetAttrTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5f9a0a79d86f2f2d42d082ec257d4388ba3c6185 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/GetAttrTest.php @@ -0,0 +1,59 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Template; +use Twig\Test\NodeTestCase; + +class GetAttrTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new NameExpression('foo', 1); + $attr = new ConstantExpression('bar', 1); + $args = new ArrayExpression([], 1); + $args->addElement(new NameExpression('foo', 1)); + $args->addElement(new ConstantExpression('bar', 1)); + $node = new GetAttrExpression($expr, $attr, $args, Template::ARRAY_CALL, 1); + + $this->assertEquals($expr, $node->getNode('node')); + $this->assertEquals($attr, $node->getNode('attribute')); + $this->assertEquals($args, $node->getNode('arguments')); + $this->assertEquals(Template::ARRAY_CALL, $node->getAttribute('type')); + } + + public function getTests() + { + $tests = []; + + $expr = new NameExpression('foo', 1); + $attr = new ConstantExpression('bar', 1); + $args = new ArrayExpression([], 1); + $node = new GetAttrExpression($expr, $attr, $args, Template::ANY_CALL, 1); + $tests[] = [$node, sprintf('%s%s, "bar", [])', $this->getAttributeGetter(), $this->getVariableGetter('foo', 1))]; + + $node = new GetAttrExpression($expr, $attr, $args, Template::ARRAY_CALL, 1); + $tests[] = [$node, sprintf('%s%s, "bar", [], "array")', $this->getAttributeGetter(), $this->getVariableGetter('foo', 1))]; + + $args = new ArrayExpression([], 1); + $args->addElement(new NameExpression('foo', 1)); + $args->addElement(new ConstantExpression('bar', 1)); + $node = new GetAttrExpression($expr, $attr, $args, Template::METHOD_CALL, 1); + $tests[] = [$node, sprintf('%s%s, "bar", [0 => %s, 1 => "bar"], "method")', $this->getAttributeGetter(), $this->getVariableGetter('foo', 1), $this->getVariableGetter('foo'))]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/NameTest.php b/vendor/twig/twig/tests/Node/Expression/NameTest.php new file mode 100644 index 0000000000000000000000000000000000000000..738f28ae04941e4173f2b59b1cb8383292196060 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/NameTest.php @@ -0,0 +1,49 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Expression\NameExpression; +use Twig\Test\NodeTestCase; + +class NameTest extends NodeTestCase +{ + public function testConstructor() + { + $node = new NameExpression('foo', 1); + + $this->assertEquals('foo', $node->getAttribute('name')); + } + + public function getTests() + { + $node = new NameExpression('foo', 1); + $context = new NameExpression('_context', 1); + + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['strict_variables' => true]); + $env1 = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['strict_variables' => false]); + + if (\PHP_VERSION_ID >= 70000) { + $output = '($context["foo"] ?? $this->getContext($context, "foo"))'; + } elseif (\PHP_VERSION_ID >= 50400) { + $output = '(isset($context["foo"]) ? $context["foo"] : $this->getContext($context, "foo"))'; + } else { + $output = '$this->getContext($context, "foo")'; + } + + return [ + [$node, "// line 1\n".$output, $env], + [$node, $this->getVariableGetter('foo', 1), $env1], + [$context, "// line 1\n\$context"], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/NullCoalesceTest.php b/vendor/twig/twig/tests/Node/Expression/NullCoalesceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..bbfff5763baa11755a1fb22a0e74b6fa4cf61ab8 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/NullCoalesceTest.php @@ -0,0 +1,38 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\NullCoalesceExpression; +use Twig\Test\NodeTestCase; + +class NullCoalesceTest extends NodeTestCase +{ + public function getTests() + { + $tests = []; + + $left = new NameExpression('foo', 1); + $right = new ConstantExpression(2, 1); + $node = new NullCoalesceExpression($left, $right, 1); + if (\PHP_VERSION_ID >= 70000) { + $tests[] = [$node, "((// line 1\n\$context[\"foo\"]) ?? (2))"]; + } elseif (\PHP_VERSION_ID >= 50400) { + $tests[] = [$node, "(((// line 1\n(isset(\$context[\"foo\"]) || array_key_exists(\"foo\", \$context)) && !(null === (isset(\$context[\"foo\"]) ? \$context[\"foo\"] : null)))) ? ((isset(\$context[\"foo\"]) ? \$context[\"foo\"] : null)) : (2))"]; + } else { + $tests[] = [$node, "(((// line 1\n(isset(\$context[\"foo\"]) || array_key_exists(\"foo\", \$context)) && !(null === \$this->getContext(\$context, \"foo\")))) ? (\$this->getContext(\$context, \"foo\")) : (2))"]; + } + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/PHP53/FilterInclude.php b/vendor/twig/twig/tests/Node/Expression/PHP53/FilterInclude.php new file mode 100644 index 0000000000000000000000000000000000000000..fc8f51776106e39a06f097bf17c10b54b0671ac3 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/PHP53/FilterInclude.php @@ -0,0 +1,8 @@ +<?php + +namespace Twig\Tests\Node\Expression\PHP53; + +$env = new \Twig\Environment(new \Twig\Loader\ArrayLoader([])); +$env->addFilter(new \Twig\TwigFilter('anonymous', function () {})); + +return $env; diff --git a/vendor/twig/twig/tests/Node/Expression/PHP53/FunctionInclude.php b/vendor/twig/twig/tests/Node/Expression/PHP53/FunctionInclude.php new file mode 100644 index 0000000000000000000000000000000000000000..b364001cdeec1f66dc0add427f5f4e214a99b431 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/PHP53/FunctionInclude.php @@ -0,0 +1,8 @@ +<?php + +namespace Twig\Tests\Node\Expression\PHP53; + +$env = new \Twig\Environment(new \Twig\Loader\ArrayLoader([])); +$env->addFunction(new \Twig\TwigFunction('anonymous', function () {})); + +return $env; diff --git a/vendor/twig/twig/tests/Node/Expression/PHP53/TestInclude.php b/vendor/twig/twig/tests/Node/Expression/PHP53/TestInclude.php new file mode 100644 index 0000000000000000000000000000000000000000..b2bf2cede50398e62e346a0772aa0f089cd5037e --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/PHP53/TestInclude.php @@ -0,0 +1,8 @@ +<?php + +namespace Twig\Tests\Node\Expression\PHP53; + +$env = new \Twig\Environment(new \Twig\Loader\ArrayLoader([])); +$env->addTest(new \Twig\TwigTest('anonymous', function () {})); + +return $env; diff --git a/vendor/twig/twig/tests/Node/Expression/ParentTest.php b/vendor/twig/twig/tests/Node/Expression/ParentTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1a67b77fe40bf5bd0d7e7386656e13ffb0ac703d --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/ParentTest.php @@ -0,0 +1,33 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ParentExpression; +use Twig\Test\NodeTestCase; + +class ParentTest extends NodeTestCase +{ + public function testConstructor() + { + $node = new ParentExpression('foo', 1); + + $this->assertEquals('foo', $node->getAttribute('name')); + } + + public function getTests() + { + $tests = []; + $tests[] = [new ParentExpression('foo', 1), '$this->renderParentBlock("foo", $context, $blocks)']; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/TestTest.php b/vendor/twig/twig/tests/Node/Expression/TestTest.php new file mode 100644 index 0000000000000000000000000000000000000000..11e1596ca401d10dbcf6b6145e00d1e045e92569 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/TestTest.php @@ -0,0 +1,92 @@ +<?php + +namespace Twig\Tests\Node\Expression; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\Test\NullTest; +use Twig\Node\Expression\TestExpression; +use Twig\Node\Node; +use Twig\Test\NodeTestCase; +use Twig\TwigTest; + +class TestTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression('foo', 1); + $name = new ConstantExpression('null', 1); + $args = new Node(); + $node = new TestExpression($expr, $name, $args, 1); + + $this->assertEquals($expr, $node->getNode('node')); + $this->assertEquals($args, $node->getNode('arguments')); + $this->assertEquals($name, $node->getAttribute('name')); + } + + public function getTests() + { + $environment = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $environment->addTest(new TwigTest('barbar', 'Twig\Tests\Node\Expression\twig_tests_test_barbar', ['is_variadic' => true, 'need_context' => true])); + + $tests = []; + + $expr = new ConstantExpression('foo', 1); + $node = new NullTest($expr, 'null', new Node([]), 1); + $tests[] = [$node, '(null === "foo")']; + + // test as an anonymous function + if (\PHP_VERSION_ID >= 50300) { + $node = $this->createTest(new ConstantExpression('foo', 1), 'anonymous', [new ConstantExpression('foo', 1)]); + $tests[] = [$node, 'call_user_func_array($this->env->getTest(\'anonymous\')->getCallable(), ["foo", "foo"])']; + } + + // arbitrary named arguments + $string = new ConstantExpression('abc', 1); + $node = $this->createTest($string, 'barbar'); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_test_barbar("abc")', $environment]; + + $node = $this->createTest($string, 'barbar', ['foo' => new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_test_barbar("abc", null, null, ["foo" => "bar"])', $environment]; + + $node = $this->createTest($string, 'barbar', ['arg2' => new ConstantExpression('bar', 1)]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_test_barbar("abc", null, "bar")', $environment]; + + $node = $this->createTest($string, 'barbar', [ + new ConstantExpression('1', 1), + new ConstantExpression('2', 1), + new ConstantExpression('3', 1), + 'foo' => new ConstantExpression('bar', 1), + ]); + $tests[] = [$node, 'Twig\Tests\Node\Expression\twig_tests_test_barbar("abc", "1", "2", [0 => "3", "foo" => "bar"])', $environment]; + + return $tests; + } + + protected function createTest($node, $name, array $arguments = []) + { + return new TestExpression($node, $name, new Node($arguments), 1); + } + + protected function getEnvironment() + { + if (\PHP_VERSION_ID >= 50300) { + return include 'PHP53/TestInclude.php'; + } + + return parent::getEnvironment(); + } +} + +function twig_tests_test_barbar($string, $arg1 = null, $arg2 = null, array $args = []) +{ +} diff --git a/vendor/twig/twig/tests/Node/Expression/Unary/NegTest.php b/vendor/twig/twig/tests/Node/Expression/Unary/NegTest.php new file mode 100644 index 0000000000000000000000000000000000000000..fcbf66ece8fdd7b7fa8554406d6a7ac204cc3ca2 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Unary/NegTest.php @@ -0,0 +1,38 @@ +<?php + +namespace Twig\Tests\Node\Expression\Unary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\Unary\NegUnary; +use Twig\Test\NodeTestCase; + +class NegTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression(1, 1); + $node = new NegUnary($expr, 1); + + $this->assertEquals($expr, $node->getNode('node')); + } + + public function getTests() + { + $node = new ConstantExpression(1, 1); + $node = new NegUnary($node, 1); + + return [ + [$node, '-1'], + [new NegUnary($node, 1), '- -1'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Unary/NotTest.php b/vendor/twig/twig/tests/Node/Expression/Unary/NotTest.php new file mode 100644 index 0000000000000000000000000000000000000000..8197111e17a4d22a6df6045b09e6375d117a3cec --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Unary/NotTest.php @@ -0,0 +1,37 @@ +<?php + +namespace Twig\Tests\Node\Expression\Unary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\Unary\NotUnary; +use Twig\Test\NodeTestCase; + +class NotTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression(1, 1); + $node = new NotUnary($expr, 1); + + $this->assertEquals($expr, $node->getNode('node')); + } + + public function getTests() + { + $node = new ConstantExpression(1, 1); + $node = new NotUnary($node, 1); + + return [ + [$node, '!1'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/Expression/Unary/PosTest.php b/vendor/twig/twig/tests/Node/Expression/Unary/PosTest.php new file mode 100644 index 0000000000000000000000000000000000000000..780e339e0cfdbd043c17ae79ba0fb94661248dd4 --- /dev/null +++ b/vendor/twig/twig/tests/Node/Expression/Unary/PosTest.php @@ -0,0 +1,37 @@ +<?php + +namespace Twig\Tests\Node\Expression\Unary; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\Unary\PosUnary; +use Twig\Test\NodeTestCase; + +class PosTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression(1, 1); + $node = new PosUnary($expr, 1); + + $this->assertEquals($expr, $node->getNode('node')); + } + + public function getTests() + { + $node = new ConstantExpression(1, 1); + $node = new PosUnary($node, 1); + + return [ + [$node, '+1'], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/ForTest.php b/vendor/twig/twig/tests/Node/ForTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d960ed6196bfcd94dde8d2b7597b812b508db3d4 --- /dev/null +++ b/vendor/twig/twig/tests/Node/ForTest.php @@ -0,0 +1,201 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\AssignNameExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\ForNode; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Test\NodeTestCase; + +class ForTest extends NodeTestCase +{ + public function testConstructor() + { + $keyTarget = new AssignNameExpression('key', 1); + $valueTarget = new AssignNameExpression('item', 1); + $seq = new NameExpression('items', 1); + $ifexpr = new ConstantExpression(true, 1); + $body = new Node([new PrintNode(new NameExpression('foo', 1), 1)], [], 1); + $else = null; + $node = new ForNode($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1); + $node->setAttribute('with_loop', false); + + $this->assertEquals($keyTarget, $node->getNode('key_target')); + $this->assertEquals($valueTarget, $node->getNode('value_target')); + $this->assertEquals($seq, $node->getNode('seq')); + $this->assertTrue($node->getAttribute('ifexpr')); + $this->assertInstanceOf('\Twig\Node\IfNode', $node->getNode('body')); + $this->assertEquals($body, $node->getNode('body')->getNode('tests')->getNode(1)->getNode(0)); + $this->assertFalse($node->hasNode('else')); + + $else = new PrintNode(new NameExpression('foo', 1), 1); + $node = new ForNode($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1); + $node->setAttribute('with_loop', false); + $this->assertEquals($else, $node->getNode('else')); + } + + public function getTests() + { + $tests = []; + + $keyTarget = new AssignNameExpression('key', 1); + $valueTarget = new AssignNameExpression('item', 1); + $seq = new NameExpression('items', 1); + $ifexpr = null; + $body = new Node([new PrintNode(new NameExpression('foo', 1), 1)], [], 1); + $else = null; + $node = new ForNode($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1); + $node->setAttribute('with_loop', false); + + $tests[] = [$node, <<<EOF +// line 1 +\$context['_parent'] = \$context; +\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('items')}); +foreach (\$context['_seq'] as \$context["key"] => \$context["item"]) { + echo {$this->getVariableGetter('foo')}; +} +\$_parent = \$context['_parent']; +unset(\$context['_seq'], \$context['_iterated'], \$context['key'], \$context['item'], \$context['_parent'], \$context['loop']); +\$context = array_intersect_key(\$context, \$_parent) + \$_parent; +EOF + ]; + + $keyTarget = new AssignNameExpression('k', 1); + $valueTarget = new AssignNameExpression('v', 1); + $seq = new NameExpression('values', 1); + $ifexpr = null; + $body = new Node([new PrintNode(new NameExpression('foo', 1), 1)], [], 1); + $else = null; + $node = new ForNode($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1); + $node->setAttribute('with_loop', true); + + $tests[] = [$node, <<<EOF +// line 1 +\$context['_parent'] = \$context; +\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('values')}); +\$context['loop'] = [ + 'parent' => \$context['_parent'], + 'index0' => 0, + 'index' => 1, + 'first' => true, +]; +if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof \Countable)) { + \$length = count(\$context['_seq']); + \$context['loop']['revindex0'] = \$length - 1; + \$context['loop']['revindex'] = \$length; + \$context['loop']['length'] = \$length; + \$context['loop']['last'] = 1 === \$length; +} +foreach (\$context['_seq'] as \$context["k"] => \$context["v"]) { + echo {$this->getVariableGetter('foo')}; + ++\$context['loop']['index0']; + ++\$context['loop']['index']; + \$context['loop']['first'] = false; + if (isset(\$context['loop']['length'])) { + --\$context['loop']['revindex0']; + --\$context['loop']['revindex']; + \$context['loop']['last'] = 0 === \$context['loop']['revindex0']; + } +} +\$_parent = \$context['_parent']; +unset(\$context['_seq'], \$context['_iterated'], \$context['k'], \$context['v'], \$context['_parent'], \$context['loop']); +\$context = array_intersect_key(\$context, \$_parent) + \$_parent; +EOF + ]; + + $keyTarget = new AssignNameExpression('k', 1); + $valueTarget = new AssignNameExpression('v', 1); + $seq = new NameExpression('values', 1); + $ifexpr = new ConstantExpression(true, 1); + $body = new Node([new PrintNode(new NameExpression('foo', 1), 1)], [], 1); + $else = null; + $node = new ForNode($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1); + $node->setAttribute('with_loop', true); + + $tests[] = [$node, <<<EOF +// line 1 +\$context['_parent'] = \$context; +\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('values')}); +\$context['loop'] = [ + 'parent' => \$context['_parent'], + 'index0' => 0, + 'index' => 1, + 'first' => true, +]; +foreach (\$context['_seq'] as \$context["k"] => \$context["v"]) { + if (true) { + echo {$this->getVariableGetter('foo')}; + ++\$context['loop']['index0']; + ++\$context['loop']['index']; + \$context['loop']['first'] = false; + } +} +\$_parent = \$context['_parent']; +unset(\$context['_seq'], \$context['_iterated'], \$context['k'], \$context['v'], \$context['_parent'], \$context['loop']); +\$context = array_intersect_key(\$context, \$_parent) + \$_parent; +EOF + ]; + + $keyTarget = new AssignNameExpression('k', 1); + $valueTarget = new AssignNameExpression('v', 1); + $seq = new NameExpression('values', 1); + $ifexpr = null; + $body = new Node([new PrintNode(new NameExpression('foo', 1), 1)], [], 1); + $else = new PrintNode(new NameExpression('foo', 1), 1); + $node = new ForNode($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1); + $node->setAttribute('with_loop', true); + + $tests[] = [$node, <<<EOF +// line 1 +\$context['_parent'] = \$context; +\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('values')}); +\$context['_iterated'] = false; +\$context['loop'] = [ + 'parent' => \$context['_parent'], + 'index0' => 0, + 'index' => 1, + 'first' => true, +]; +if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof \Countable)) { + \$length = count(\$context['_seq']); + \$context['loop']['revindex0'] = \$length - 1; + \$context['loop']['revindex'] = \$length; + \$context['loop']['length'] = \$length; + \$context['loop']['last'] = 1 === \$length; +} +foreach (\$context['_seq'] as \$context["k"] => \$context["v"]) { + echo {$this->getVariableGetter('foo')}; + \$context['_iterated'] = true; + ++\$context['loop']['index0']; + ++\$context['loop']['index']; + \$context['loop']['first'] = false; + if (isset(\$context['loop']['length'])) { + --\$context['loop']['revindex0']; + --\$context['loop']['revindex']; + \$context['loop']['last'] = 0 === \$context['loop']['revindex0']; + } +} +if (!\$context['_iterated']) { + echo {$this->getVariableGetter('foo')}; +} +\$_parent = \$context['_parent']; +unset(\$context['_seq'], \$context['_iterated'], \$context['k'], \$context['v'], \$context['_parent'], \$context['loop']); +\$context = array_intersect_key(\$context, \$_parent) + \$_parent; +EOF + ]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/IfTest.php b/vendor/twig/twig/tests/Node/IfTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d5a6eac8ab499ce67774ee62e786756e193ef5f3 --- /dev/null +++ b/vendor/twig/twig/tests/Node/IfTest.php @@ -0,0 +1,97 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\IfNode; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Test\NodeTestCase; + +class IfTest extends NodeTestCase +{ + public function testConstructor() + { + $t = new Node([ + new ConstantExpression(true, 1), + new PrintNode(new NameExpression('foo', 1), 1), + ], [], 1); + $else = null; + $node = new IfNode($t, $else, 1); + + $this->assertEquals($t, $node->getNode('tests')); + $this->assertFalse($node->hasNode('else')); + + $else = new PrintNode(new NameExpression('bar', 1), 1); + $node = new IfNode($t, $else, 1); + $this->assertEquals($else, $node->getNode('else')); + } + + public function getTests() + { + $tests = []; + + $t = new Node([ + new ConstantExpression(true, 1), + new PrintNode(new NameExpression('foo', 1), 1), + ], [], 1); + $else = null; + $node = new IfNode($t, $else, 1); + + $tests[] = [$node, <<<EOF +// line 1 +if (true) { + echo {$this->getVariableGetter('foo')}; +} +EOF + ]; + + $t = new Node([ + new ConstantExpression(true, 1), + new PrintNode(new NameExpression('foo', 1), 1), + new ConstantExpression(false, 1), + new PrintNode(new NameExpression('bar', 1), 1), + ], [], 1); + $else = null; + $node = new IfNode($t, $else, 1); + + $tests[] = [$node, <<<EOF +// line 1 +if (true) { + echo {$this->getVariableGetter('foo')}; +} elseif (false) { + echo {$this->getVariableGetter('bar')}; +} +EOF + ]; + + $t = new Node([ + new ConstantExpression(true, 1), + new PrintNode(new NameExpression('foo', 1), 1), + ], [], 1); + $else = new PrintNode(new NameExpression('bar', 1), 1); + $node = new IfNode($t, $else, 1); + + $tests[] = [$node, <<<EOF +// line 1 +if (true) { + echo {$this->getVariableGetter('foo')}; +} else { + echo {$this->getVariableGetter('bar')}; +} +EOF + ]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/ImportTest.php b/vendor/twig/twig/tests/Node/ImportTest.php new file mode 100644 index 0000000000000000000000000000000000000000..dbb49ab92ad325968329e91f00f7703fbf4a5e09 --- /dev/null +++ b/vendor/twig/twig/tests/Node/ImportTest.php @@ -0,0 +1,47 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\AssignNameExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\ImportNode; +use Twig\Test\NodeTestCase; + +class ImportTest extends NodeTestCase +{ + public function testConstructor() + { + $macro = new ConstantExpression('foo.twig', 1); + $var = new AssignNameExpression('macro', 1); + $node = new ImportNode($macro, $var, 1); + + $this->assertEquals($macro, $node->getNode('expr')); + $this->assertEquals($var, $node->getNode('var')); + } + + public function getTests() + { + $tests = []; + + $macro = new ConstantExpression('foo.twig', 1); + $var = new AssignNameExpression('macro', 1); + $node = new ImportNode($macro, $var, 1); + + $tests[] = [$node, <<<EOF +// line 1 +\$context["macro"] = \$this->loadTemplate("foo.twig", null, 1)->unwrap(); +EOF + ]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/IncludeTest.php b/vendor/twig/twig/tests/Node/IncludeTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ab1fdf0bfe018fc132448f9f0aa2d9cbf9080bd9 --- /dev/null +++ b/vendor/twig/twig/tests/Node/IncludeTest.php @@ -0,0 +1,95 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\IncludeNode; +use Twig\Test\NodeTestCase; + +class IncludeTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression('foo.twig', 1); + $node = new IncludeNode($expr, null, false, false, 1); + + $this->assertFalse($node->hasNode('variables')); + $this->assertEquals($expr, $node->getNode('expr')); + $this->assertFalse($node->getAttribute('only')); + + $vars = new ArrayExpression([new ConstantExpression('foo', 1), new ConstantExpression(true, 1)], 1); + $node = new IncludeNode($expr, $vars, true, false, 1); + $this->assertEquals($vars, $node->getNode('variables')); + $this->assertTrue($node->getAttribute('only')); + } + + public function getTests() + { + $tests = []; + + $expr = new ConstantExpression('foo.twig', 1); + $node = new IncludeNode($expr, null, false, false, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$this->loadTemplate("foo.twig", null, 1)->display(\$context); +EOF + ]; + + $expr = new ConditionalExpression( + new ConstantExpression(true, 1), + new ConstantExpression('foo', 1), + new ConstantExpression('foo', 1), + 0 + ); + $node = new IncludeNode($expr, null, false, false, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$this->loadTemplate(((true) ? ("foo") : ("foo")), null, 1)->display(\$context); +EOF + ]; + + $expr = new ConstantExpression('foo.twig', 1); + $vars = new ArrayExpression([new ConstantExpression('foo', 1), new ConstantExpression(true, 1)], 1); + $node = new IncludeNode($expr, $vars, false, false, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$this->loadTemplate("foo.twig", null, 1)->display(twig_array_merge(\$context, ["foo" => true])); +EOF + ]; + + $node = new IncludeNode($expr, $vars, true, false, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$this->loadTemplate("foo.twig", null, 1)->display(twig_to_array(["foo" => true])); +EOF + ]; + + $node = new IncludeNode($expr, $vars, true, true, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$__internal_%s = null; +try { + \$__internal_%s = \$this->loadTemplate("foo.twig", null, 1); +} catch (LoaderError \$e) { + // ignore missing template +} +if (\$__internal_%s) { + \$__internal_%s->display(twig_to_array(["foo" => true])); +} +EOF + , null, true]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/MacroTest.php b/vendor/twig/twig/tests/Node/MacroTest.php new file mode 100644 index 0000000000000000000000000000000000000000..82fc9999da24647dd24f4ccd9365be926cecefcb --- /dev/null +++ b/vendor/twig/twig/tests/Node/MacroTest.php @@ -0,0 +1,83 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\MacroNode; +use Twig\Node\Node; +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class MacroTest extends NodeTestCase +{ + public function testConstructor() + { + $body = new TextNode('foo', 1); + $arguments = new Node([new NameExpression('foo', 1)], [], 1); + $node = new MacroNode('foo', $body, $arguments, 1); + + $this->assertEquals($body, $node->getNode('body')); + $this->assertEquals($arguments, $node->getNode('arguments')); + $this->assertEquals('foo', $node->getAttribute('name')); + } + + public function getTests() + { + $body = new TextNode('foo', 1); + $arguments = new Node([ + 'foo' => new ConstantExpression(null, 1), + 'bar' => new ConstantExpression('Foo', 1), + ], [], 1); + $node = new MacroNode('foo', $body, $arguments, 1); + + if (\PHP_VERSION_ID >= 50600) { + $declaration = ', ...$__varargs__'; + $varargs = '$__varargs__'; + } else { + $declaration = ''; + $varargs = 'func_num_args() > 2 ? array_slice(func_get_args(), 2) : []'; + } + + return [ + [$node, <<<EOF +// line 1 +public function getfoo(\$__foo__ = null, \$__bar__ = "Foo"$declaration) +{ + \$context = \$this->env->mergeGlobals([ + "foo" => \$__foo__, + "bar" => \$__bar__, + "varargs" => $varargs, + ]); + + \$blocks = []; + + ob_start(function () { return ''; }); + try { + echo "foo"; + } catch (\Exception \$e) { + ob_end_clean(); + + throw \$e; + } catch (\Throwable \$e) { + ob_end_clean(); + + throw \$e; + } + + return ('' === \$tmp = ob_get_clean()) ? '' : new Markup(\$tmp, \$this->env->getCharset()); +} +EOF + ], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/ModuleTest.php b/vendor/twig/twig/tests/Node/ModuleTest.php new file mode 100644 index 0000000000000000000000000000000000000000..aa000d39b2de7b4d90d83a6c8a27bba16451994e --- /dev/null +++ b/vendor/twig/twig/tests/Node/ModuleTest.php @@ -0,0 +1,270 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Expression\AssignNameExpression; +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\ImportNode; +use Twig\Node\ModuleNode; +use Twig\Node\Node; +use Twig\Node\SetNode; +use Twig\Node\TextNode; +use Twig\Source; +use Twig\Test\NodeTestCase; + +class ModuleTest extends NodeTestCase +{ + public function testConstructor() + { + $body = new TextNode('foo', 1); + $parent = new ConstantExpression('layout.twig', 1); + $blocks = new Node(); + $macros = new Node(); + $traits = new Node(); + $source = new Source('{{ foo }}', 'foo.twig'); + $node = new ModuleNode($body, $parent, $blocks, $macros, $traits, new Node([]), $source); + + $this->assertEquals($body, $node->getNode('body')); + $this->assertEquals($blocks, $node->getNode('blocks')); + $this->assertEquals($macros, $node->getNode('macros')); + $this->assertEquals($parent, $node->getNode('parent')); + $this->assertEquals($source->getName(), $node->getTemplateName()); + } + + public function getTests() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + + $tests = []; + + $body = new TextNode('foo', 1); + $extends = null; + $blocks = new Node(); + $macros = new Node(); + $traits = new Node(); + $source = new Source('{{ foo }}', 'foo.twig'); + + $node = new ModuleNode($body, $extends, $blocks, $macros, $traits, new Node([]), $source); + $tests[] = [$node, <<<EOF +<?php + +use Twig\Environment; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Markup; +use Twig\Sandbox\SecurityError; +use Twig\Sandbox\SecurityNotAllowedTagError; +use Twig\Sandbox\SecurityNotAllowedFilterError; +use Twig\Sandbox\SecurityNotAllowedFunctionError; +use Twig\Source; +use Twig\Template; + +/* foo.twig */ +class __TwigTemplate_%x extends \Twig\Template +{ + public function __construct(Environment \$env) + { + parent::__construct(\$env); + + \$this->parent = false; + + \$this->blocks = [ + ]; + } + + protected function doDisplay(array \$context, array \$blocks = []) + { + // line 1 + echo "foo"; + } + + public function getTemplateName() + { + return "foo.twig"; + } + + public function getDebugInfo() + { + return array ( 30 => 1,); + } + + /** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */ + public function getSource() + { + @trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED); + + return \$this->getSourceContext()->getCode(); + } + + public function getSourceContext() + { + return new Source("", "foo.twig", ""); + } +} +EOF + , $twig, true]; + + $import = new ImportNode(new ConstantExpression('foo.twig', 1), new AssignNameExpression('macro', 1), 2); + + $body = new Node([$import]); + $extends = new ConstantExpression('layout.twig', 1); + + $node = new ModuleNode($body, $extends, $blocks, $macros, $traits, new Node([]), $source); + $tests[] = [$node, <<<EOF +<?php + +use Twig\Environment; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Markup; +use Twig\Sandbox\SecurityError; +use Twig\Sandbox\SecurityNotAllowedTagError; +use Twig\Sandbox\SecurityNotAllowedFilterError; +use Twig\Sandbox\SecurityNotAllowedFunctionError; +use Twig\Source; +use Twig\Template; + +/* foo.twig */ +class __TwigTemplate_%x extends \Twig\Template +{ + public function __construct(Environment \$env) + { + parent::__construct(\$env); + + \$this->blocks = [ + ]; + } + + protected function doGetParent(array \$context) + { + // line 1 + return "layout.twig"; + } + + protected function doDisplay(array \$context, array \$blocks = []) + { + // line 2 + \$context["macro"] = \$this->loadTemplate("foo.twig", "foo.twig", 2)->unwrap(); + // line 1 + \$this->parent = \$this->loadTemplate("layout.twig", "foo.twig", 1); + \$this->parent->display(\$context, array_merge(\$this->blocks, \$blocks)); + } + + public function getTemplateName() + { + return "foo.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 36 => 1, 34 => 2, 28 => 1,); + } + + /** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */ + public function getSource() + { + @trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED); + + return \$this->getSourceContext()->getCode(); + } + + public function getSourceContext() + { + return new Source("", "foo.twig", ""); + } +} +EOF + , $twig, true]; + + $set = new SetNode(false, new Node([new AssignNameExpression('foo', 4)]), new Node([new ConstantExpression('foo', 4)]), 4); + $body = new Node([$set]); + $extends = new ConditionalExpression( + new ConstantExpression(true, 2), + new ConstantExpression('foo', 2), + new ConstantExpression('foo', 2), + 2 + ); + + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['debug' => true]); + $node = new ModuleNode($body, $extends, $blocks, $macros, $traits, new Node([]), $source); + $tests[] = [$node, <<<EOF +<?php + +use Twig\Environment; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Markup; +use Twig\Sandbox\SecurityError; +use Twig\Sandbox\SecurityNotAllowedTagError; +use Twig\Sandbox\SecurityNotAllowedFilterError; +use Twig\Sandbox\SecurityNotAllowedFunctionError; +use Twig\Source; +use Twig\Template; + +/* foo.twig */ +class __TwigTemplate_%x extends \Twig\Template +{ + protected function doGetParent(array \$context) + { + // line 2 + return \$this->loadTemplate(((true) ? ("foo") : ("foo")), "foo.twig", 2); + } + + protected function doDisplay(array \$context, array \$blocks = []) + { + // line 4 + \$context["foo"] = "foo"; + // line 2 + \$this->getParent(\$context)->display(\$context, array_merge(\$this->blocks, \$blocks)); + } + + public function getTemplateName() + { + return "foo.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 28 => 2, 26 => 4, 20 => 2,); + } + + /** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */ + public function getSource() + { + @trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED); + + return \$this->getSourceContext()->getCode(); + } + + public function getSourceContext() + { + return new Source("{{ foo }}", "foo.twig", ""); + } +} +EOF + , $twig, true]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/PrintTest.php b/vendor/twig/twig/tests/Node/PrintTest.php new file mode 100644 index 0000000000000000000000000000000000000000..49f8eb49840262aba3deb971792e01669dd771ad --- /dev/null +++ b/vendor/twig/twig/tests/Node/PrintTest.php @@ -0,0 +1,35 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\PrintNode; +use Twig\Test\NodeTestCase; + +class PrintTest extends NodeTestCase +{ + public function testConstructor() + { + $expr = new ConstantExpression('foo', 1); + $node = new PrintNode($expr, 1); + + $this->assertEquals($expr, $node->getNode('expr')); + } + + public function getTests() + { + $tests = []; + $tests[] = [new PrintNode(new ConstantExpression('foo', 1), 1), "// line 1\necho \"foo\";"]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/SandboxTest.php b/vendor/twig/twig/tests/Node/SandboxTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b81781e8b45c7e03043cbeac66a3670a037cabed --- /dev/null +++ b/vendor/twig/twig/tests/Node/SandboxTest.php @@ -0,0 +1,49 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\SandboxNode; +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class SandboxTest extends NodeTestCase +{ + public function testConstructor() + { + $body = new TextNode('foo', 1); + $node = new SandboxNode($body, 1); + + $this->assertEquals($body, $node->getNode('body')); + } + + public function getTests() + { + $tests = []; + + $body = new TextNode('foo', 1); + $node = new SandboxNode($body, 1); + + $tests[] = [$node, <<<EOF +// line 1 +if (!\$alreadySandboxed = \$this->sandbox->isSandboxed()) { + \$this->sandbox->enableSandbox(); +} +echo "foo"; +if (!\$alreadySandboxed) { + \$this->sandbox->disableSandbox(); +} +EOF + ]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/SetTest.php b/vendor/twig/twig/tests/Node/SetTest.php new file mode 100644 index 0000000000000000000000000000000000000000..370af95f2cdaf204e53ac2ccc2bc19095ea14eea --- /dev/null +++ b/vendor/twig/twig/tests/Node/SetTest.php @@ -0,0 +1,80 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Expression\AssignNameExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Node\SetNode; +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class SetTest extends NodeTestCase +{ + public function testConstructor() + { + $names = new Node([new AssignNameExpression('foo', 1)], [], 1); + $values = new Node([new ConstantExpression('foo', 1)], [], 1); + $node = new SetNode(false, $names, $values, 1); + + $this->assertEquals($names, $node->getNode('names')); + $this->assertEquals($values, $node->getNode('values')); + $this->assertFalse($node->getAttribute('capture')); + } + + public function getTests() + { + $tests = []; + + $names = new Node([new AssignNameExpression('foo', 1)], [], 1); + $values = new Node([new ConstantExpression('foo', 1)], [], 1); + $node = new SetNode(false, $names, $values, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$context["foo"] = "foo"; +EOF + ]; + + $names = new Node([new AssignNameExpression('foo', 1)], [], 1); + $values = new Node([new PrintNode(new ConstantExpression('foo', 1), 1)], [], 1); + $node = new SetNode(true, $names, $values, 1); + $tests[] = [$node, <<<EOF +// line 1 +ob_start(function () { return ''; }); +echo "foo"; +\$context["foo"] = ('' === \$tmp = ob_get_clean()) ? '' : new Markup(\$tmp, \$this->env->getCharset()); +EOF + ]; + + $names = new Node([new AssignNameExpression('foo', 1)], [], 1); + $values = new TextNode('foo', 1); + $node = new SetNode(true, $names, $values, 1); + $tests[] = [$node, <<<EOF +// line 1 +\$context["foo"] = ('' === \$tmp = "foo") ? '' : new Markup(\$tmp, \$this->env->getCharset()); +EOF + ]; + + $names = new Node([new AssignNameExpression('foo', 1), new AssignNameExpression('bar', 1)], [], 1); + $values = new Node([new ConstantExpression('foo', 1), new NameExpression('bar', 1)], [], 1); + $node = new SetNode(false, $names, $values, 1); + $tests[] = [$node, <<<EOF +// line 1 +list(\$context["foo"], \$context["bar"]) = ["foo", {$this->getVariableGetter('bar')}]; +EOF + ]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/Node/SpacelessTest.php b/vendor/twig/twig/tests/Node/SpacelessTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5f3c81442ed29840d82710a8059e6446b5c3eb8a --- /dev/null +++ b/vendor/twig/twig/tests/Node/SpacelessTest.php @@ -0,0 +1,44 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\Node; +use Twig\Node\SpacelessNode; +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class SpacelessTest extends NodeTestCase +{ + public function testConstructor() + { + $body = new Node([new TextNode('<div> <div> foo </div> </div>', 1)]); + $node = new SpacelessNode($body, 1); + + $this->assertEquals($body, $node->getNode('body')); + } + + public function getTests() + { + $body = new Node([new TextNode('<div> <div> foo </div> </div>', 1)]); + $node = new SpacelessNode($body, 1); + + return [ + [$node, <<<EOF +// line 1 +ob_start(function () { return ''; }); +echo "<div> <div> foo </div> </div>"; +echo trim(preg_replace('/>\s+</', '><', ob_get_clean())); +EOF + ], + ]; + } +} diff --git a/vendor/twig/twig/tests/Node/TextTest.php b/vendor/twig/twig/tests/Node/TextTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ace191213d8e0ea8671a5059c9be60b0eff07118 --- /dev/null +++ b/vendor/twig/twig/tests/Node/TextTest.php @@ -0,0 +1,33 @@ +<?php + +namespace Twig\Tests\Node; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Node\TextNode; +use Twig\Test\NodeTestCase; + +class TextTest extends NodeTestCase +{ + public function testConstructor() + { + $node = new TextNode('foo', 1); + + $this->assertEquals('foo', $node->getAttribute('data')); + } + + public function getTests() + { + $tests = []; + $tests[] = [new TextNode('foo', 1), "// line 1\necho \"foo\";"]; + + return $tests; + } +} diff --git a/vendor/twig/twig/tests/NodeTraverserTest.php b/vendor/twig/twig/tests/NodeTraverserTest.php new file mode 100644 index 0000000000000000000000000000000000000000..7136ae7f6cc32e1c8993c17e63f49cfce4ed1f14 --- /dev/null +++ b/vendor/twig/twig/tests/NodeTraverserTest.php @@ -0,0 +1,49 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\Node; +use Twig\NodeTraverser; +use Twig\NodeVisitor\NodeVisitorInterface; + +class NodeTraverserTest extends \PHPUnit\Framework\TestCase +{ + /** + * @group legacy + */ + public function testNodeIsNullWhenTraversing() + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $traverser = new NodeTraverser($env, [new IdentityVisitor()]); + $n = new Node([new Node([]), null, new Node([])]); + $this->assertCount(3, $traverser->traverse($n)); + } +} + +class IdentityVisitor implements NodeVisitorInterface +{ + public function enterNode(\Twig_NodeInterface $node, Environment $env) + { + return $node; + } + + public function leaveNode(\Twig_NodeInterface $node, Environment $env) + { + return $node; + } + + public function getPriority() + { + return 0; + } +} diff --git a/vendor/twig/twig/tests/NodeVisitor/OptimizerTest.php b/vendor/twig/twig/tests/NodeVisitor/OptimizerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..6bcc828264c99c2923c9a8defe09c49516e6230d --- /dev/null +++ b/vendor/twig/twig/tests/NodeVisitor/OptimizerTest.php @@ -0,0 +1,116 @@ +<?php + +namespace Twig\Tests\NodeVisitor; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\ForNode; +use Twig\Source; + +class OptimizerTest extends \PHPUnit\Framework\TestCase +{ + public function testRenderBlockOptimizer() + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + + $stream = $env->parse($env->tokenize(new Source('{{ block("foo") }}', 'index'))); + + $node = $stream->getNode('body')->getNode(0); + + $this->assertInstanceOf('\Twig\Node\Expression\BlockReferenceExpression', $node); + $this->assertTrue($node->getAttribute('output')); + } + + public function testRenderParentBlockOptimizer() + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false, 'autoescape' => false]); + + $stream = $env->parse($env->tokenize(new Source('{% extends "foo" %}{% block content %}{{ parent() }}{% endblock %}', 'index'))); + + $node = $stream->getNode('blocks')->getNode('content')->getNode(0)->getNode('body'); + + $this->assertInstanceOf('\Twig\Node\Expression\ParentExpression', $node); + $this->assertTrue($node->getAttribute('output')); + } + + /** + * @dataProvider getTestsForForOptimizer + */ + public function testForOptimizer($template, $expected) + { + $env = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['cache' => false]); + + $stream = $env->parse($env->tokenize(new Source($template, 'index'))); + + foreach ($expected as $target => $withLoop) { + $this->assertTrue($this->checkForConfiguration($stream, $target, $withLoop), sprintf('variable %s is %soptimized', $target, $withLoop ? 'not ' : '')); + } + } + + public function getTestsForForOptimizer() + { + return [ + ['{% for i in foo %}{% endfor %}', ['i' => false]], + + ['{% for i in foo %}{{ loop.index }}{% endfor %}', ['i' => true]], + + ['{% for i in foo %}{% for j in foo %}{% endfor %}{% endfor %}', ['i' => false, 'j' => false]], + + ['{% for i in foo %}{% include "foo" %}{% endfor %}', ['i' => true]], + + ['{% for i in foo %}{% include "foo" only %}{% endfor %}', ['i' => false]], + + ['{% for i in foo %}{% include "foo" with { "foo": "bar" } only %}{% endfor %}', ['i' => false]], + + ['{% for i in foo %}{% include "foo" with { "foo": loop.index } only %}{% endfor %}', ['i' => true]], + + ['{% for i in foo %}{% for j in foo %}{{ loop.index }}{% endfor %}{% endfor %}', ['i' => false, 'j' => true]], + + ['{% for i in foo %}{% for j in foo %}{{ loop.parent.loop.index }}{% endfor %}{% endfor %}', ['i' => true, 'j' => true]], + + ['{% for i in foo %}{% set l = loop %}{% for j in foo %}{{ l.index }}{% endfor %}{% endfor %}', ['i' => true, 'j' => false]], + + ['{% for i in foo %}{% for j in foo %}{{ foo.parent.loop.index }}{% endfor %}{% endfor %}', ['i' => false, 'j' => false]], + + ['{% for i in foo %}{% for j in foo %}{{ loop["parent"].loop.index }}{% endfor %}{% endfor %}', ['i' => true, 'j' => true]], + + ['{% for i in foo %}{{ include("foo") }}{% endfor %}', ['i' => true]], + + ['{% for i in foo %}{{ include("foo", with_context = false) }}{% endfor %}', ['i' => false]], + + ['{% for i in foo %}{{ include("foo", with_context = true) }}{% endfor %}', ['i' => true]], + + ['{% for i in foo %}{{ include("foo", { "foo": "bar" }, with_context = false) }}{% endfor %}', ['i' => false]], + + ['{% for i in foo %}{{ include("foo", { "foo": loop.index }, with_context = false) }}{% endfor %}', ['i' => true]], + ]; + } + + public function checkForConfiguration(\Twig_NodeInterface $node = null, $target, $withLoop) + { + if (null === $node) { + return; + } + + foreach ($node as $n) { + if ($n instanceof ForNode) { + if ($target === $n->getNode('value_target')->getAttribute('name')) { + return $withLoop == $n->getAttribute('with_loop'); + } + } + + $ret = $this->checkForConfiguration($n, $target, $withLoop); + if (null !== $ret) { + return $ret; + } + } + } +} diff --git a/vendor/twig/twig/tests/ParserTest.php b/vendor/twig/twig/tests/ParserTest.php new file mode 100644 index 0000000000000000000000000000000000000000..917d5deaa7d065f096dbe3c6df2cfd9024bf1a86 --- /dev/null +++ b/vendor/twig/twig/tests/ParserTest.php @@ -0,0 +1,218 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Node\MacroNode; +use Twig\Node\Node; +use Twig\Node\SetNode; +use Twig\Node\TextNode; +use Twig\Parser; +use Twig\Source; +use Twig\Token; +use Twig\TokenParser\AbstractTokenParser; +use Twig\TokenStream; + +class ParserTest extends \PHPUnit\Framework\TestCase +{ + public function testSetMacroThrowsExceptionOnReservedMethods() + { + $this->expectException('\Twig\Error\SyntaxError'); + + $parser = $this->getParser(); + $parser->setMacro('parent', new MacroNode('foo', new Node(), new Node(), 1)); + } + + public function testUnknownTag() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "foo" tag. Did you mean "for" at line 1?'); + + $stream = new TokenStream([ + new Token(Token::BLOCK_START_TYPE, '', 1), + new Token(Token::NAME_TYPE, 'foo', 1), + new Token(Token::BLOCK_END_TYPE, '', 1), + new Token(Token::EOF_TYPE, '', 1), + ]); + $parser = new Parser(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $parser->parse($stream); + } + + public function testUnknownTagWithoutSuggestions() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unknown "foobar" tag at line 1.'); + + $stream = new TokenStream([ + new Token(Token::BLOCK_START_TYPE, '', 1), + new Token(Token::NAME_TYPE, 'foobar', 1), + new Token(Token::BLOCK_END_TYPE, '', 1), + new Token(Token::EOF_TYPE, '', 1), + ]); + $parser = new Parser(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $parser->parse($stream); + } + + /** + * @dataProvider getFilterBodyNodesData + */ + public function testFilterBodyNodes($input, $expected) + { + $parser = $this->getParser(); + + $this->assertEquals($expected, $parser->filterBodyNodes($input)); + } + + public function getFilterBodyNodesData() + { + return [ + [ + new Node([new TextNode(' ', 1)]), + new Node([]), + ], + [ + $input = new Node([new SetNode(false, new Node(), new Node(), 1)]), + $input, + ], + [ + $input = new Node([new SetNode(true, new Node(), new Node([new Node([new TextNode('foo', 1)])]), 1)]), + $input, + ], + ]; + } + + /** + * @dataProvider getFilterBodyNodesDataThrowsException + */ + public function testFilterBodyNodesThrowsException($input) + { + $this->expectException('\Twig\Error\SyntaxError'); + + $parser = $this->getParser(); + + $parser->filterBodyNodes($input); + } + + public function getFilterBodyNodesDataThrowsException() + { + return [ + [new TextNode('foo', 1)], + [new Node([new Node([new TextNode('foo', 1)])])], + ]; + } + + /** + * @dataProvider getFilterBodyNodesWithBOMData + */ + public function testFilterBodyNodesWithBOM($emptyNode) + { + $this->assertNull($this->getParser()->filterBodyNodes(new TextNode(\chr(0xEF).\chr(0xBB).\chr(0xBF).$emptyNode, 1))); + } + + public function getFilterBodyNodesWithBOMData() + { + return [ + [' '], + ["\t"], + ["\n"], + ["\n\t\n "], + ]; + } + + public function testParseIsReentrant() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), [ + 'autoescape' => false, + 'optimizations' => 0, + ]); + $twig->addTokenParser(new TestTokenParser()); + + $parser = new Parser($twig); + + $parser->parse(new TokenStream([ + new Token(Token::BLOCK_START_TYPE, '', 1), + new Token(Token::NAME_TYPE, 'test', 1), + new Token(Token::BLOCK_END_TYPE, '', 1), + new Token(Token::VAR_START_TYPE, '', 1), + new Token(Token::NAME_TYPE, 'foo', 1), + new Token(Token::VAR_END_TYPE, '', 1), + new Token(Token::EOF_TYPE, '', 1), + ])); + + $this->assertNull($parser->getParent()); + } + + public function testGetVarName() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface'), [ + 'autoescape' => false, + 'optimizations' => 0, + ]); + + $twig->parse($twig->tokenize(new Source(<<<EOF +{% from _self import foo %} + +{% macro foo() %} + {{ foo }} +{% endmacro %} +EOF + , 'index'))); + + // The getVarName() must not depend on the template loaders, + // If this test does not throw any exception, that's good. + // see https://github.com/symfony/symfony/issues/4218 + $this->addToAssertionCount(1); + } + + protected function getParser() + { + $parser = new TestParser(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + $parser->setParent(new Node()); + $parser->stream = new TokenStream([]); + + return $parser; + } +} + +class TestParser extends Parser +{ + public $stream; + + public function filterBodyNodes(\Twig_NodeInterface $node) + { + return parent::filterBodyNodes($node); + } +} + +class TestTokenParser extends AbstractTokenParser +{ + public function parse(Token $token) + { + // simulate the parsing of another template right in the middle of the parsing of the current template + $this->parser->parse(new TokenStream([ + new Token(Token::BLOCK_START_TYPE, '', 1), + new Token(Token::NAME_TYPE, 'extends', 1), + new Token(Token::STRING_TYPE, 'base', 1), + new Token(Token::BLOCK_END_TYPE, '', 1), + new Token(Token::EOF_TYPE, '', 1), + ])); + + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new Node([]); + } + + public function getTag() + { + return 'test'; + } +} diff --git a/vendor/twig/twig/tests/Profiler/Dumper/AbstractTest.php b/vendor/twig/twig/tests/Profiler/Dumper/AbstractTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a55bfa0d38b7cffe938210c6c05d423c4588f524 --- /dev/null +++ b/vendor/twig/twig/tests/Profiler/Dumper/AbstractTest.php @@ -0,0 +1,107 @@ +<?php + +namespace Twig\Tests\Profiler\Dumper; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Profiler\Profile; + +abstract class AbstractTest extends \PHPUnit\Framework\TestCase +{ + protected function getProfile() + { + $profile = new Profile('main'); + $subProfiles = [ + $this->getIndexProfile( + [ + $this->getEmbeddedBlockProfile(), + $this->getEmbeddedTemplateProfile( + [ + $this->getIncludedTemplateProfile(), + ] + ), + $this->getMacroProfile(), + $this->getEmbeddedTemplateProfile( + [ + $this->getIncludedTemplateProfile(), + ] + ), + ] + ), + ]; + + $p = new \ReflectionProperty($profile, 'profiles'); + $p->setAccessible(true); + $p->setValue($profile, $subProfiles); + + return $profile; + } + + private function getIndexProfile(array $subProfiles = []) + { + return $this->generateProfile('main', 1, 'template', 'index.twig', $subProfiles); + } + + private function getEmbeddedBlockProfile(array $subProfiles = []) + { + return $this->generateProfile('body', 0.0001, 'block', 'embedded.twig', $subProfiles); + } + + private function getEmbeddedTemplateProfile(array $subProfiles = []) + { + return $this->generateProfile('main', 0.0001, 'template', 'embedded.twig', $subProfiles); + } + + private function getIncludedTemplateProfile(array $subProfiles = []) + { + return $this->generateProfile('main', 0.0001, 'template', 'included.twig', $subProfiles); + } + + private function getMacroProfile(array $subProfiles = []) + { + return $this->generateProfile('foo', 0.0001, 'macro', 'index.twig', $subProfiles); + } + + /** + * @param string $name + * @param float $duration + * @param bool $isTemplate + * @param string $type + * @param string $templateName + * @param array $subProfiles + * + * @return Profile + */ + private function generateProfile($name, $duration, $type, $templateName, array $subProfiles = []) + { + $profile = new Profile($templateName, $type, $name); + + $p = new \ReflectionProperty($profile, 'profiles'); + $p->setAccessible(true); + $p->setValue($profile, $subProfiles); + + $starts = new \ReflectionProperty($profile, 'starts'); + $starts->setAccessible(true); + $starts->setValue($profile, [ + 'wt' => 0, + 'mu' => 0, + 'pmu' => 0, + ]); + $ends = new \ReflectionProperty($profile, 'ends'); + $ends->setAccessible(true); + $ends->setValue($profile, [ + 'wt' => $duration, + 'mu' => 0, + 'pmu' => 0, + ]); + + return $profile; + } +} diff --git a/vendor/twig/twig/tests/Profiler/Dumper/BlackfireTest.php b/vendor/twig/twig/tests/Profiler/Dumper/BlackfireTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b1c2cd7d1f008c3646bd21f4c3e7c123cc69e534 --- /dev/null +++ b/vendor/twig/twig/tests/Profiler/Dumper/BlackfireTest.php @@ -0,0 +1,36 @@ +<?php + +namespace Twig\Tests\Profiler\Dumper; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Profiler\Dumper\BlackfireDumper; + +class BlackfireTest extends AbstractTest +{ + public function testDump() + { + $dumper = new BlackfireDumper(); + + $this->assertStringMatchesFormat(<<<EOF +file-format: BlackfireProbe +cost-dimensions: wt mu pmu +request-start: %d.%d + +main()//1 %d %d %d +main()==>index.twig//1 %d %d %d +index.twig==>embedded.twig::block(body)//1 %d %d 0 +index.twig==>embedded.twig//2 %d %d %d +embedded.twig==>included.twig//2 %d %d %d +index.twig==>index.twig::macro(foo)//1 %d %d %d +EOF + , $dumper->dump($this->getProfile())); + } +} diff --git a/vendor/twig/twig/tests/Profiler/Dumper/HtmlTest.php b/vendor/twig/twig/tests/Profiler/Dumper/HtmlTest.php new file mode 100644 index 0000000000000000000000000000000000000000..20a1ab439c56ebc36c6a7f38abf09fc75e5a61f1 --- /dev/null +++ b/vendor/twig/twig/tests/Profiler/Dumper/HtmlTest.php @@ -0,0 +1,34 @@ +<?php + +namespace Twig\Tests\Profiler\Dumper; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Profiler\Dumper\HtmlDumper; + +class HtmlTest extends AbstractTest +{ + public function testDump() + { + $dumper = new HtmlDumper(); + $this->assertStringMatchesFormat(<<<EOF +<pre>main <span style="color: #d44">%d.%dms/%d%</span> +└ <span style="background-color: #ffd">index.twig</span> <span style="color: #d44">%d.%dms/%d%</span> + └ embedded.twig::block(<span style="background-color: #dfd">body</span>) + └ <span style="background-color: #ffd">embedded.twig</span> + │ └ <span style="background-color: #ffd">included.twig</span> + └ index.twig::macro(<span style="background-color: #ddf">foo</span>) + └ <span style="background-color: #ffd">embedded.twig</span> + └ <span style="background-color: #ffd">included.twig</span> +</pre> +EOF + , $dumper->dump($this->getProfile())); + } +} diff --git a/vendor/twig/twig/tests/Profiler/Dumper/TextTest.php b/vendor/twig/twig/tests/Profiler/Dumper/TextTest.php new file mode 100644 index 0000000000000000000000000000000000000000..8240e356bd26a74224e0cb72bffdb89db28c1b7f --- /dev/null +++ b/vendor/twig/twig/tests/Profiler/Dumper/TextTest.php @@ -0,0 +1,34 @@ +<?php + +namespace Twig\Tests\Profiler\Dumper; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Profiler\Dumper\TextDumper; + +class TextTest extends AbstractTest +{ + public function testDump() + { + $dumper = new TextDumper(); + $this->assertStringMatchesFormat(<<<EOF +main %d.%dms/%d% +└ index.twig %d.%dms/%d% + └ embedded.twig::block(body) + └ embedded.twig + │ └ included.twig + └ index.twig::macro(foo) + └ embedded.twig + └ included.twig + +EOF + , $dumper->dump($this->getProfile())); + } +} diff --git a/vendor/twig/twig/tests/Profiler/ProfileTest.php b/vendor/twig/twig/tests/Profiler/ProfileTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0b7fd272f2a1a4bc57c321e3033830585d18c082 --- /dev/null +++ b/vendor/twig/twig/tests/Profiler/ProfileTest.php @@ -0,0 +1,114 @@ +<?php + +namespace Twig\Tests\Profiler; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Profiler\Profile; + +class ProfileTest extends \PHPUnit\Framework\TestCase +{ + public function testConstructor() + { + $profile = new Profile('template', 'type', 'name'); + + $this->assertEquals('template', $profile->getTemplate()); + $this->assertEquals('type', $profile->getType()); + $this->assertEquals('name', $profile->getName()); + } + + public function testIsRoot() + { + $profile = new Profile('template', Profile::ROOT); + $this->assertTrue($profile->isRoot()); + + $profile = new Profile('template', Profile::TEMPLATE); + $this->assertFalse($profile->isRoot()); + } + + public function testIsTemplate() + { + $profile = new Profile('template', Profile::TEMPLATE); + $this->assertTrue($profile->isTemplate()); + + $profile = new Profile('template', Profile::ROOT); + $this->assertFalse($profile->isTemplate()); + } + + public function testIsBlock() + { + $profile = new Profile('template', Profile::BLOCK); + $this->assertTrue($profile->isBlock()); + + $profile = new Profile('template', Profile::ROOT); + $this->assertFalse($profile->isBlock()); + } + + public function testIsMacro() + { + $profile = new Profile('template', Profile::MACRO); + $this->assertTrue($profile->isMacro()); + + $profile = new Profile('template', Profile::ROOT); + $this->assertFalse($profile->isMacro()); + } + + public function testGetAddProfile() + { + $profile = new Profile(); + $profile->addProfile($a = new Profile()); + $profile->addProfile($b = new Profile()); + + $this->assertSame([$a, $b], $profile->getProfiles()); + $this->assertSame([$a, $b], iterator_to_array($profile)); + } + + public function testGetDuration() + { + $profile = new Profile(); + usleep(1); + $profile->leave(); + + $this->assertTrue($profile->getDuration() > 0, sprintf('Expected duration > 0, got: %f', $profile->getDuration())); + } + + public function testSerialize() + { + $profile = new Profile('template', 'type', 'name'); + $profile1 = new Profile('template1', 'type1', 'name1'); + $profile->addProfile($profile1); + $profile->leave(); + $profile1->leave(); + + $profile2 = unserialize(serialize($profile)); + $profiles = $profile->getProfiles(); + $this->assertCount(1, $profiles); + $profile3 = $profiles[0]; + + $this->assertEquals($profile->getTemplate(), $profile2->getTemplate()); + $this->assertEquals($profile->getType(), $profile2->getType()); + $this->assertEquals($profile->getName(), $profile2->getName()); + $this->assertEquals($profile->getDuration(), $profile2->getDuration()); + + $this->assertEquals($profile1->getTemplate(), $profile3->getTemplate()); + $this->assertEquals($profile1->getType(), $profile3->getType()); + $this->assertEquals($profile1->getName(), $profile3->getName()); + } + + public function testReset() + { + $profile = new Profile(); + usleep(1); + $profile->leave(); + $profile->reset(); + + $this->assertEquals(0, $profile->getDuration()); + } +} diff --git a/vendor/twig/twig/tests/TemplateTest.php b/vendor/twig/twig/tests/TemplateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..41f8d1b043399efe3617d5874964e813463d5d50 --- /dev/null +++ b/vendor/twig/twig/tests/TemplateTest.php @@ -0,0 +1,809 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Error\RuntimeError; +use Twig\Extension\SandboxExtension; +use Twig\Loader\ArrayLoader; +use Twig\Loader\LoaderInterface; +use Twig\Loader\SourceContextLoaderInterface; +use Twig\Node\Expression\GetAttrExpression; +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\Sandbox\SecurityError; +use Twig\Sandbox\SecurityPolicy; +use Twig\Template; + +class TemplateTest extends \PHPUnit\Framework\TestCase +{ + public function testDisplayBlocksAcceptTemplateOnlyAsBlocks() + { + $this->expectException('\LogicException'); + + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $template = new TemplateForTest($twig); + $template->displayBlock('foo', [], ['foo' => [new \stdClass(), 'foo']]); + } + + /** + * @dataProvider getAttributeExceptions + */ + public function testGetAttributeExceptions($template, $message) + { + $templates = ['index' => $template]; + $env = new Environment(new ArrayLoader($templates), ['strict_variables' => true]); + $template = $env->load('index'); + + $context = [ + 'string' => 'foo', + 'null' => null, + 'empty_array' => [], + 'array' => ['foo' => 'foo'], + 'array_access' => new TemplateArrayAccessObject(), + 'magic_exception' => new TemplateMagicPropertyObjectWithException(), + 'object' => new \stdClass(), + ]; + + try { + $template->render($context); + $this->fail('Accessing an invalid attribute should throw an exception.'); + } catch (RuntimeError $e) { + $this->assertSame(sprintf($message, 'index'), $e->getMessage()); + } + } + + public function getAttributeExceptions() + { + return [ + ['{{ string["a"] }}', 'Impossible to access a key ("a") on a string variable ("foo") in "%s" at line 1.'], + ['{{ null["a"] }}', 'Impossible to access a key ("a") on a null variable in "%s" at line 1.'], + ['{{ empty_array["a"] }}', 'Key "a" does not exist as the array is empty in "%s" at line 1.'], + ['{{ array["a"] }}', 'Key "a" for array with keys "foo" does not exist in "%s" at line 1.'], + ['{{ array_access["a"] }}', 'Key "a" in object with ArrayAccess of class "Twig\Tests\TemplateArrayAccessObject" does not exist in "%s" at line 1.'], + ['{{ string.a }}', 'Impossible to access an attribute ("a") on a string variable ("foo") in "%s" at line 1.'], + ['{{ string.a() }}', 'Impossible to invoke a method ("a") on a string variable ("foo") in "%s" at line 1.'], + ['{{ null.a }}', 'Impossible to access an attribute ("a") on a null variable in "%s" at line 1.'], + ['{{ null.a() }}', 'Impossible to invoke a method ("a") on a null variable in "%s" at line 1.'], + ['{{ array.a() }}', 'Impossible to invoke a method ("a") on an array in "%s" at line 1.'], + ['{{ empty_array.a }}', 'Key "a" does not exist as the array is empty in "%s" at line 1.'], + ['{{ array.a }}', 'Key "a" for array with keys "foo" does not exist in "%s" at line 1.'], + ['{{ attribute(array, -10) }}', 'Key "-10" for array with keys "foo" does not exist in "%s" at line 1.'], + ['{{ array_access.a }}', 'Neither the property "a" nor one of the methods "a()", "geta()"/"isa()" or "__call()" exist and have public access in class "Twig\Tests\TemplateArrayAccessObject" in "%s" at line 1.'], + ['{% from _self import foo %}{% macro foo(obj) %}{{ obj.missing_method() }}{% endmacro %}{{ foo(array_access) }}', 'Neither the property "missing_method" nor one of the methods "missing_method()", "getmissing_method()"/"ismissing_method()" or "__call()" exist and have public access in class "Twig\Tests\TemplateArrayAccessObject" in "%s" at line 1.'], + ['{{ magic_exception.test }}', 'An exception has been thrown during the rendering of a template ("Hey! Don\'t try to isset me!") in "%s" at line 1.'], + ['{{ object["a"] }}', 'Impossible to access a key "a" on an object of class "stdClass" that does not implement ArrayAccess interface in "%s" at line 1.'], + ]; + } + + /** + * @dataProvider getGetAttributeWithSandbox + */ + public function testGetAttributeWithSandbox($object, $item, $allowed) + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $policy = new SecurityPolicy([], [], [/*method*/], [/*prop*/], []); + $twig->addExtension(new SandboxExtension($policy, !$allowed)); + $template = new TemplateForTest($twig); + + try { + $template->getAttribute($object, $item, [], 'any'); + + if (!$allowed) { + $this->fail(); + } else { + $this->addToAssertionCount(1); + } + } catch (SecurityError $e) { + if ($allowed) { + $this->fail(); + } else { + $this->addToAssertionCount(1); + } + + $this->assertStringContainsString('is not allowed', $e->getMessage()); + } + } + + public function getGetAttributeWithSandbox() + { + return [ + [new TemplatePropertyObject(), 'defined', false], + [new TemplatePropertyObject(), 'defined', true], + [new TemplateMethodObject(), 'defined', false], + [new TemplateMethodObject(), 'defined', true], + ]; + } + + /** + * @group legacy + */ + public function testGetAttributeWithTemplateAsObject() + { + // to be removed in 2.0 + $twig = new Environment($this->createMock('Twig\Tests\TemplateTestLoaderInterface')); + //$twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface', '\Twig\Loader\SourceContextLoaderInterface')); + + $template = new TemplateForTest($twig, 'index.twig'); + $template1 = new TemplateForTest($twig, 'index1.twig'); + + $this->assertInstanceOf('\Twig\Markup', $template->getAttribute($template1, 'string')); + $this->assertEquals('some_string', $template->getAttribute($template1, 'string')); + + $this->assertInstanceOf('\Twig\Markup', $template->getAttribute($template1, 'true')); + $this->assertEquals('1', $template->getAttribute($template1, 'true')); + + $this->assertInstanceOf('\Twig\Markup', $template->getAttribute($template1, 'zero')); + $this->assertEquals('0', $template->getAttribute($template1, 'zero')); + + $this->assertNotInstanceof('\Twig\Markup', $template->getAttribute($template1, 'empty')); + $this->assertSame('', $template->getAttribute($template1, 'empty')); + + $this->assertFalse($template->getAttribute($template1, 'env', [], Template::ANY_CALL, true)); + $this->assertFalse($template->getAttribute($template1, 'environment', [], Template::ANY_CALL, true)); + $this->assertFalse($template->getAttribute($template1, 'getEnvironment', [], Template::METHOD_CALL, true)); + $this->assertFalse($template->getAttribute($template1, 'displayWithErrorHandling', [], Template::METHOD_CALL, true)); + } + + /** + * @group legacy + * @expectedDeprecation Calling "string" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "string" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "true" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "true" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "zero" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "zero" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "empty" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "empty" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. + * @expectedDeprecation Calling "renderBlock" on template "index.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use block("name") instead). + * @expectedDeprecation Calling "displayBlock" on template "index.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use block("name") instead). + * @expectedDeprecation Calling "hasBlock" on template "index.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use "block("name") is defined" instead). + * @expectedDeprecation Calling "render" on template "index.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use include("index.twig") instead). + * @expectedDeprecation Calling "display" on template "index.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use include("index.twig") instead). + * @expectedDeprecation Calling "renderBlock" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use block("name", template) instead). + * @expectedDeprecation Calling "displayBlock" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use block("name", template) instead). + * @expectedDeprecation Calling "hasBlock" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use "block("name", template) is defined" instead). + * @expectedDeprecation Calling "render" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use include("index1.twig") instead). + * @expectedDeprecation Calling "display" on template "index1.twig" from template "index.twig" is deprecated since version 1.28 and won't be supported anymore in 2.0. Use include("index1.twig") instead). + */ + public function testGetAttributeWithTemplateAsObjectForDeprecations() + { + // to be removed in 2.0 + $twig = new Environment($this->createMock('Twig\Tests\TemplateTestLoaderInterface')); + //$twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface', '\Twig\Loader\SourceContextLoaderInterface')); + + $template = new TemplateForTest($twig, 'index.twig'); + $template1 = new TemplateForTest($twig, 'index1.twig'); + + $this->assertInstanceOf('\Twig\Markup', $template->getAttribute($template1, 'string')); + $this->assertEquals('some_string', $template->getAttribute($template1, 'string')); + + $this->assertInstanceOf('\Twig\Markup', $template->getAttribute($template1, 'true')); + $this->assertEquals('1', $template->getAttribute($template1, 'true')); + + $this->assertInstanceOf('\Twig\Markup', $template->getAttribute($template1, 'zero')); + $this->assertEquals('0', $template->getAttribute($template1, 'zero')); + + $this->assertNotInstanceof('\Twig\Markup', $template->getAttribute($template1, 'empty')); + $this->assertSame('', $template->getAttribute($template1, 'empty')); + + $blocks = ['name' => [$template1, 'block_name']]; + + // trigger some deprecation notice messages to check them with @expectedDeprecation + $template->getAttribute($template, 'renderBlock', ['name', [], $blocks]); + $template->getAttribute($template, 'displayBlock', ['name', [], $blocks]); + $template->getAttribute($template, 'hasBlock', ['name', []]); + $template->getAttribute($template, 'render', [[]]); + $template->getAttribute($template, 'display', [[]]); + + $template->getAttribute($template1, 'renderBlock', ['name', [], $blocks]); + $template->getAttribute($template1, 'displayBlock', ['name', [], $blocks]); + $template->getAttribute($template1, 'hasBlock', ['name', []]); + $template->getAttribute($template1, 'render', [[]]); + $template->getAttribute($template1, 'display', [[]]); + + $this->assertFalse($template->getAttribute($template1, 'env', [], Template::ANY_CALL, true)); + $this->assertFalse($template->getAttribute($template1, 'environment', [], Template::ANY_CALL, true)); + $this->assertFalse($template->getAttribute($template1, 'getEnvironment', [], Template::METHOD_CALL, true)); + $this->assertFalse($template->getAttribute($template1, 'displayWithErrorHandling', [], Template::METHOD_CALL, true)); + } + + /** + * @group legacy + * @expectedDeprecation Silent display of undefined block "unknown" in template "index.twig" is deprecated since version 1.29 and will throw an exception in 2.0. Use the "block('unknown') is defined" expression to test for block existence. + * @expectedDeprecation Silent display of undefined block "unknown" in template "index.twig" is deprecated since version 1.29 and will throw an exception in 2.0. Use the "block('unknown') is defined" expression to test for block existence. + */ + public function testRenderBlockWithUndefinedBlock() + { + $twig = new Environment($this->createMock('Twig\Tests\TemplateTestLoaderInterface')); + + $template = new TemplateForTest($twig, 'index.twig'); + $template->renderBlock('unknown', []); + $template->displayBlock('unknown', []); + } + + public function testGetAttributeOnArrayWithConfusableKey() + { + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + + $array = ['Zero', 'One', -1 => 'MinusOne', '' => 'EmptyString', '1.5' => 'FloatButString', '01' => 'IntegerButStringWithLeadingZeros']; + + $this->assertSame('Zero', $array[false]); + $this->assertSame('One', $array[true]); + $this->assertSame('One', $array[1.5]); + $this->assertSame('One', $array['1']); + $this->assertSame('MinusOne', $array[-1.5]); + $this->assertSame('FloatButString', $array['1.5']); + $this->assertSame('IntegerButStringWithLeadingZeros', $array['01']); + $this->assertSame('EmptyString', $array[null]); + + $this->assertSame('Zero', $template->getAttribute($array, false), 'false is treated as 0 when accessing an array (equals PHP behavior)'); + $this->assertSame('One', $template->getAttribute($array, true), 'true is treated as 1 when accessing an array (equals PHP behavior)'); + $this->assertSame('One', $template->getAttribute($array, 1.5), 'float is casted to int when accessing an array (equals PHP behavior)'); + $this->assertSame('One', $template->getAttribute($array, '1'), '"1" is treated as integer 1 when accessing an array (equals PHP behavior)'); + $this->assertSame('MinusOne', $template->getAttribute($array, -1.5), 'negative float is casted to int when accessing an array (equals PHP behavior)'); + $this->assertSame('FloatButString', $template->getAttribute($array, '1.5'), '"1.5" is treated as-is when accessing an array (equals PHP behavior)'); + $this->assertSame('IntegerButStringWithLeadingZeros', $template->getAttribute($array, '01'), '"01" is treated as-is when accessing an array (equals PHP behavior)'); + $this->assertSame('EmptyString', $template->getAttribute($array, null), 'null is treated as "" when accessing an array (equals PHP behavior)'); + } + + /** + * @dataProvider getGetAttributeTests + */ + public function testGetAttribute($defined, $value, $object, $item, $arguments, $type) + { + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + + $this->assertEquals($value, $template->getAttribute($object, $item, $arguments, $type)); + } + + /** + * @dataProvider getGetAttributeTests + */ + public function testGetAttributeStrict($defined, $value, $object, $item, $arguments, $type, $exceptionMessage = null) + { + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['strict_variables' => true])); + + if ($defined) { + $this->assertEquals($value, $template->getAttribute($object, $item, $arguments, $type)); + } else { + $this->expectException('\Twig\Error\RuntimeError'); + if (null !== $exceptionMessage) { + $this->expectExceptionMessage($exceptionMessage); + } + $this->assertEquals($value, $template->getAttribute($object, $item, $arguments, $type)); + } + } + + /** + * @dataProvider getGetAttributeTests + */ + public function testGetAttributeDefined($defined, $value, $object, $item, $arguments, $type) + { + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + + $this->assertEquals($defined, $template->getAttribute($object, $item, $arguments, $type, true)); + } + + /** + * @dataProvider getGetAttributeTests + */ + public function testGetAttributeDefinedStrict($defined, $value, $object, $item, $arguments, $type) + { + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['strict_variables' => true])); + + $this->assertEquals($defined, $template->getAttribute($object, $item, $arguments, $type, true)); + } + + public function testGetAttributeCallExceptions() + { + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'))); + + $object = new TemplateMagicMethodExceptionObject(); + + $this->assertNull($template->getAttribute($object, 'foo')); + } + + public function getGetAttributeTests() + { + $array = [ + 'defined' => 'defined', + 'zero' => 0, + 'null' => null, + '1' => 1, + 'bar' => true, + 'baz' => 'baz', + '09' => '09', + '+4' => '+4', + ]; + + $objectArray = new TemplateArrayAccessObject(); + $arrayObject = new \ArrayObject($array); + $stdObject = (object) $array; + $magicPropertyObject = new TemplateMagicPropertyObject(); + $propertyObject = new TemplatePropertyObject(); + $propertyObject1 = new TemplatePropertyObjectAndIterator(); + $propertyObject2 = new TemplatePropertyObjectAndArrayAccess(); + $propertyObject3 = new TemplatePropertyObjectDefinedWithUndefinedValue(); + $methodObject = new TemplateMethodObject(); + $magicMethodObject = new TemplateMagicMethodObject(); + + $anyType = Template::ANY_CALL; + $methodType = Template::METHOD_CALL; + $arrayType = Template::ARRAY_CALL; + + $basicTests = [ + // array(defined, value, property to fetch) + [true, 'defined', 'defined'], + [false, null, 'undefined'], + [false, null, 'protected'], + [true, 0, 'zero'], + [true, 1, 1], + [true, 1, 1.0], + [true, null, 'null'], + [true, true, 'bar'], + [true, 'baz', 'baz'], + [true, '09', '09'], + [true, '+4', '+4'], + ]; + $testObjects = [ + // array(object, type of fetch) + [$array, $arrayType], + [$objectArray, $arrayType], + [$arrayObject, $anyType], + [$stdObject, $anyType], + [$magicPropertyObject, $anyType], + [$methodObject, $methodType], + [$methodObject, $anyType], + [$propertyObject, $anyType], + [$propertyObject1, $anyType], + [$propertyObject2, $anyType], + ]; + + $tests = []; + foreach ($testObjects as $testObject) { + foreach ($basicTests as $test) { + // properties cannot be numbers + if (($testObject[0] instanceof \stdClass || $testObject[0] instanceof TemplatePropertyObject) && is_numeric($test[2])) { + continue; + } + + if ('+4' === $test[2] && $methodObject === $testObject[0]) { + continue; + } + + $tests[] = [$test[0], $test[1], $testObject[0], $test[2], [], $testObject[1]]; + } + } + + // additional properties tests + $tests = array_merge($tests, [ + [true, null, $propertyObject3, 'foo', [], $anyType], + ]); + + // additional method tests + $tests = array_merge($tests, [ + [true, 'defined', $methodObject, 'defined', [], $methodType], + [true, 'defined', $methodObject, 'DEFINED', [], $methodType], + [true, 'defined', $methodObject, 'getDefined', [], $methodType], + [true, 'defined', $methodObject, 'GETDEFINED', [], $methodType], + [true, 'static', $methodObject, 'static', [], $methodType], + [true, 'static', $methodObject, 'getStatic', [], $methodType], + + [true, '__call_undefined', $magicMethodObject, 'undefined', [], $methodType], + [true, '__call_UNDEFINED', $magicMethodObject, 'UNDEFINED', [], $methodType], + ]); + + // add the same tests for the any type + foreach ($tests as $test) { + if ($anyType !== $test[5]) { + $test[5] = $anyType; + $tests[] = $test; + } + } + + $methodAndPropObject = new TemplateMethodAndPropObject(); + + // additional method tests + $tests = array_merge($tests, [ + [true, 'a', $methodAndPropObject, 'a', [], $anyType], + [true, 'a', $methodAndPropObject, 'a', [], $methodType], + [false, null, $methodAndPropObject, 'a', [], $arrayType], + + [true, 'b_prop', $methodAndPropObject, 'b', [], $anyType], + [true, 'b', $methodAndPropObject, 'B', [], $anyType], + [true, 'b', $methodAndPropObject, 'b', [], $methodType], + [true, 'b', $methodAndPropObject, 'B', [], $methodType], + [false, null, $methodAndPropObject, 'b', [], $arrayType], + + [false, null, $methodAndPropObject, 'c', [], $anyType], + [false, null, $methodAndPropObject, 'c', [], $methodType], + [false, null, $methodAndPropObject, 'c', [], $arrayType], + ]); + + $arrayAccess = new TemplateArrayAccess(); + $tests = array_merge($tests, [ + [true, ['foo' => 'bar'], $arrayAccess, 'vars', [], $anyType], + ]); + + // tests when input is not an array or object + $tests = array_merge($tests, [ + [false, null, 42, 'a', [], $anyType, 'Impossible to access an attribute ("a") on a integer variable ("42") in "index.twig".'], + [false, null, 'string', 'a', [], $anyType, 'Impossible to access an attribute ("a") on a string variable ("string") in "index.twig".'], + [false, null, [], 'a', [], $anyType, 'Key "a" does not exist as the array is empty in "index.twig".'], + ]); + + return $tests; + } + + public function testGetIsMethods() + { + $this->expectException('\Twig\Error\RuntimeError'); + + $getIsObject = new TemplateGetIsMethods(); + $template = new TemplateForTest(new Environment($this->createMock('\Twig\Loader\LoaderInterface'), ['strict_variables' => true])); + // first time should not create a cache for "get" + $this->assertNull($template->getAttribute($getIsObject, 'get')); + // 0 should be in the method cache now, so this should fail + $this->assertNull($template->getAttribute($getIsObject, 0)); + } +} + +class TemplateForTest extends Template +{ + private $name; + + public function __construct(Environment $env, $name = 'index.twig') + { + parent::__construct($env); + self::$cache = []; + $this->name = $name; + } + + public function getZero() + { + return 0; + } + + public function getEmpty() + { + return ''; + } + + public function getString() + { + return 'some_string'; + } + + public function getTrue() + { + return true; + } + + public function getTemplateName() + { + return $this->name; + } + + public function getDebugInfo() + { + return []; + } + + protected function doGetParent(array $context) + { + return false; + } + + protected function doDisplay(array $context, array $blocks = []) + { + } + + public function getAttribute($object, $item, array $arguments = [], $type = Template::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false) + { + if (\function_exists('twig_template_get_attributes')) { + return twig_template_get_attributes($this, $object, $item, $arguments, $type, $isDefinedTest, $ignoreStrictCheck); + } else { + return parent::getAttribute($object, $item, $arguments, $type, $isDefinedTest, $ignoreStrictCheck); + } + } + + public function block_name($context, array $blocks = []) + { + } +} + +class TemplateArrayAccessObject implements \ArrayAccess +{ + protected $protected = 'protected'; + + public $attributes = [ + 'defined' => 'defined', + 'zero' => 0, + 'null' => null, + '1' => 1, + 'bar' => true, + 'baz' => 'baz', + '09' => '09', + '+4' => '+4', + ]; + + public function offsetExists($name) + { + return \array_key_exists($name, $this->attributes); + } + + public function offsetGet($name) + { + return \array_key_exists($name, $this->attributes) ? $this->attributes[$name] : null; + } + + public function offsetSet($name, $value) + { + } + + public function offsetUnset($name) + { + } +} + +class TemplateMagicPropertyObject +{ + public $defined = 'defined'; + + public $attributes = [ + 'zero' => 0, + 'null' => null, + '1' => 1, + 'bar' => true, + 'baz' => 'baz', + '09' => '09', + '+4' => '+4', + ]; + + protected $protected = 'protected'; + + public function __isset($name) + { + return \array_key_exists($name, $this->attributes); + } + + public function __get($name) + { + return \array_key_exists($name, $this->attributes) ? $this->attributes[$name] : null; + } +} + +class TemplateMagicPropertyObjectWithException +{ + public function __isset($key) + { + throw new \Exception('Hey! Don\'t try to isset me!'); + } +} + +class TemplatePropertyObject +{ + public $defined = 'defined'; + public $zero = 0; + public $null = null; + public $bar = true; + public $baz = 'baz'; + + protected $protected = 'protected'; +} + +class TemplatePropertyObjectAndIterator extends TemplatePropertyObject implements \IteratorAggregate +{ + public function getIterator() + { + return new \ArrayIterator(['foo', 'bar']); + } +} + +class TemplatePropertyObjectAndArrayAccess extends TemplatePropertyObject implements \ArrayAccess +{ + private $data = [ + 'defined' => 'defined', + 'zero' => 0, + 'null' => null, + 'bar' => true, + 'foo' => true, + 'baz' => 'baz', + 'baf' => 'baf', + ]; + + public function offsetExists($offset) + { + return \array_key_exists($offset, $this->data); + } + + public function offsetGet($offset) + { + return $this->offsetExists($offset) ? $this->data[$offset] : 'n/a'; + } + + public function offsetSet($offset, $value) + { + } + + public function offsetUnset($offset) + { + } +} + +class TemplatePropertyObjectDefinedWithUndefinedValue +{ + public $foo; + + public function __construct() + { + $this->foo = @$notExist; + } +} + +class TemplateMethodObject +{ + public function getDefined() + { + return 'defined'; + } + + public function get1() + { + return 1; + } + + public function get09() + { + return '09'; + } + + public function getZero() + { + return 0; + } + + public function getNull() + { + } + + public function isBar() + { + return true; + } + + public function isBaz() + { + return 'should never be returned'; + } + + public function getBaz() + { + return 'baz'; + } + + protected function getProtected() + { + return 'protected'; + } + + public static function getStatic() + { + return 'static'; + } +} + +class TemplateGetIsMethods +{ + public function get() + { + } + + public function is() + { + } +} + +class TemplateMethodAndPropObject +{ + private $a = 'a_prop'; + + public function getA() + { + return 'a'; + } + + public $b = 'b_prop'; + + public function getB() + { + return 'b'; + } + + private $c = 'c_prop'; + + private function getC() + { + return 'c'; + } +} + +class TemplateArrayAccess implements \ArrayAccess +{ + public $vars = [ + 'foo' => 'bar', + ]; + private $children = []; + + public function offsetExists($offset) + { + return \array_key_exists($offset, $this->children); + } + + public function offsetGet($offset) + { + return $this->children[$offset]; + } + + public function offsetSet($offset, $value) + { + $this->children[$offset] = $value; + } + + public function offsetUnset($offset) + { + unset($this->children[$offset]); + } +} + +class TemplateMagicMethodObject +{ + public function __call($method, $arguments) + { + return '__call_'.$method; + } +} + +class TemplateMagicMethodExceptionObject +{ + public function __call($method, $arguments) + { + throw new \BadMethodCallException(sprintf('Unknown method "%s".', $method)); + } +} + +class CExtDisablingNodeVisitor implements NodeVisitorInterface +{ + public function enterNode(\Twig_NodeInterface $node, Environment $env) + { + if ($node instanceof GetAttrExpression) { + $node->setAttribute('disable_c_ext', true); + } + + return $node; + } + + public function leaveNode(\Twig_NodeInterface $node, Environment $env) + { + return $node; + } + + public function getPriority() + { + return 0; + } +} + +// to be removed in 2.0 +interface TemplateTestLoaderInterface extends LoaderInterface, SourceContextLoaderInterface +{ +} diff --git a/vendor/twig/twig/tests/TemplateWrapperTest.php b/vendor/twig/twig/tests/TemplateWrapperTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b4a0958b501c126ee7fe1728bb40c652439a7764 --- /dev/null +++ b/vendor/twig/twig/tests/TemplateWrapperTest.php @@ -0,0 +1,70 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Loader\ArrayLoader; + +class TemplateWrapperTest extends \PHPUnit\Framework\TestCase +{ + public function testHasGetBlocks() + { + $twig = new Environment(new ArrayLoader([ + 'index' => '{% block foo %}{% endblock %}', + 'index_with_use' => '{% use "imported" %}{% block foo %}{% endblock %}', + 'index_with_extends' => '{% extends "extended" %}{% block foo %}{% endblock %}', + 'imported' => '{% block imported %}{% endblock %}', + 'extended' => '{% block extended %}{% endblock %}', + ])); + + $wrapper = $twig->load('index'); + $this->assertTrue($wrapper->hasBlock('foo')); + $this->assertFalse($wrapper->hasBlock('bar')); + $this->assertEquals(['foo'], $wrapper->getBlockNames()); + + $wrapper = $twig->load('index_with_use'); + $this->assertTrue($wrapper->hasBlock('foo')); + $this->assertTrue($wrapper->hasBlock('imported')); + $this->assertEquals(['imported', 'foo'], $wrapper->getBlockNames()); + + $wrapper = $twig->load('index_with_extends'); + $this->assertTrue($wrapper->hasBlock('foo')); + $this->assertTrue($wrapper->hasBlock('extended')); + $this->assertEquals(['foo', 'extended'], $wrapper->getBlockNames()); + } + + public function testRenderBlock() + { + $twig = new Environment(new ArrayLoader([ + 'index' => '{% block foo %}{{ foo }}{{ bar }}{% endblock %}', + ])); + $twig->addGlobal('bar', 'BAR'); + + $wrapper = $twig->load('index'); + $this->assertEquals('FOOBAR', $wrapper->renderBlock('foo', ['foo' => 'FOO'])); + } + + public function testDisplayBlock() + { + $twig = new Environment(new ArrayLoader([ + 'index' => '{% block foo %}{{ foo }}{{ bar }}{% endblock %}', + ])); + $twig->addGlobal('bar', 'BAR'); + + $wrapper = $twig->load('index'); + + ob_start(); + $wrapper->displayBlock('foo', ['foo' => 'FOO']); + + $this->assertEquals('FOOBAR', ob_get_clean()); + } +} diff --git a/vendor/twig/twig/tests/TokenStreamTest.php b/vendor/twig/twig/tests/TokenStreamTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c98e0f0720d256a7465b1b17345344b7bb7bdccf --- /dev/null +++ b/vendor/twig/twig/tests/TokenStreamTest.php @@ -0,0 +1,85 @@ +<?php + +namespace Twig\Tests; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Token; +use Twig\TokenStream; + +class TokenStreamTest extends \PHPUnit\Framework\TestCase +{ + protected static $tokens; + + protected function setUp() + { + self::$tokens = [ + new Token(Token::TEXT_TYPE, 1, 1), + new Token(Token::TEXT_TYPE, 2, 1), + new Token(Token::TEXT_TYPE, 3, 1), + new Token(Token::TEXT_TYPE, 4, 1), + new Token(Token::TEXT_TYPE, 5, 1), + new Token(Token::TEXT_TYPE, 6, 1), + new Token(Token::TEXT_TYPE, 7, 1), + new Token(Token::EOF_TYPE, 0, 1), + ]; + } + + /** + * @group legacy + */ + public function testLegacyConstructorSignature() + { + $stream = new TokenStream([], 'foo', '{{ foo }}'); + $this->assertEquals('foo', $stream->getFilename()); + $this->assertEquals('{{ foo }}', $stream->getSource()); + $this->assertEquals('foo', $stream->getSourceContext()->getName()); + $this->assertEquals('{{ foo }}', $stream->getSourceContext()->getCode()); + } + + public function testNext() + { + $stream = new TokenStream(self::$tokens); + $repr = []; + while (!$stream->isEOF()) { + $token = $stream->next(); + + $repr[] = $token->getValue(); + } + $this->assertEquals('1, 2, 3, 4, 5, 6, 7', implode(', ', $repr), '->next() advances the pointer and returns the current token'); + } + + public function testEndOfTemplateNext() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unexpected end of template'); + + $stream = new TokenStream([ + new Token(Token::BLOCK_START_TYPE, 1, 1), + ]); + while (!$stream->isEOF()) { + $stream->next(); + } + } + + public function testEndOfTemplateLook() + { + $this->expectException('\Twig\Error\SyntaxError'); + $this->expectExceptionMessage('Unexpected end of template'); + + $stream = new TokenStream([ + new Token(Token::BLOCK_START_TYPE, 1, 1), + ]); + while (!$stream->isEOF()) { + $stream->look(); + $stream->next(); + } + } +} diff --git a/vendor/twig/twig/tests/Util/DeprecationCollectorTest.php b/vendor/twig/twig/tests/Util/DeprecationCollectorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e360dbb141a47186d0454109162ae3a19de5aebc --- /dev/null +++ b/vendor/twig/twig/tests/Util/DeprecationCollectorTest.php @@ -0,0 +1,48 @@ +<?php + +namespace Twig\Tests\Util; + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\TwigFunction; +use Twig\Util\DeprecationCollector; + +class DeprecationCollectorTest extends \PHPUnit\Framework\TestCase +{ + /** + * @requires PHP 5.3 + */ + public function testCollect() + { + $twig = new Environment($this->createMock('\Twig\Loader\LoaderInterface')); + $twig->addFunction(new TwigFunction('deprec', [$this, 'deprec'], ['deprecated' => true])); + + $collector = new DeprecationCollector($twig); + $deprecations = $collector->collect(new Twig_Tests_Util_Iterator()); + + $this->assertEquals(['Twig Function "deprec" is deprecated in deprec.twig at line 1.'], $deprecations); + } + + public function deprec() + { + } +} + +class Twig_Tests_Util_Iterator implements \IteratorAggregate +{ + public function getIterator() + { + return new \ArrayIterator([ + 'ok.twig' => '{{ foo }}', + 'deprec.twig' => '{{ deprec("foo") }}', + ]); + } +} diff --git a/vendor/twig/twig/tests/escapingTest.php b/vendor/twig/twig/tests/escapingTest.php new file mode 100644 index 0000000000000000000000000000000000000000..84759ebb48436ce9038cd9691112f4e49d005dd6 --- /dev/null +++ b/vendor/twig/twig/tests/escapingTest.php @@ -0,0 +1,327 @@ +<?php + +namespace Twig\Tests; + +/** + * This class is adapted from code coming from Zend Framework. + * + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (https://www.zend.com) + * @license https://framework.zend.com/license/new-bsd New BSD License + */ +class Twig_Test_EscapingTest extends \PHPUnit\Framework\TestCase +{ + /** + * All character encodings supported by htmlspecialchars(). + */ + protected $htmlSpecialChars = [ + '\'' => ''', + '"' => '"', + '<' => '<', + '>' => '>', + '&' => '&', + ]; + + protected $htmlAttrSpecialChars = [ + '\'' => ''', + /* Characters beyond ASCII value 255 to unicode escape */ + 'Ā' => 'Ā', + '😀' => '😀', + /* Immune chars excluded */ + ',' => ',', + '.' => '.', + '-' => '-', + '_' => '_', + /* Basic alnums excluded */ + 'a' => 'a', + 'A' => 'A', + 'z' => 'z', + 'Z' => 'Z', + '0' => '0', + '9' => '9', + /* Basic control characters and null */ + "\r" => '
', + "\n" => '
', + "\t" => '	', + "\0" => '�', // should use Unicode replacement char + /* Encode chars as named entities where possible */ + '<' => '<', + '>' => '>', + '&' => '&', + '"' => '"', + /* Encode spaces for quoteless attribute protection */ + ' ' => ' ', + ]; + + protected $jsSpecialChars = [ + /* HTML special chars - escape without exception to hex */ + '<' => '\\u003C', + '>' => '\\u003E', + '\'' => '\\u0027', + '"' => '\\u0022', + '&' => '\\u0026', + '/' => '\\/', + /* Characters beyond ASCII value 255 to unicode escape */ + 'Ā' => '\\u0100', + '😀' => '\\uD83D\\uDE00', + /* Immune chars excluded */ + ',' => ',', + '.' => '.', + '_' => '_', + /* Basic alnums excluded */ + 'a' => 'a', + 'A' => 'A', + 'z' => 'z', + 'Z' => 'Z', + '0' => '0', + '9' => '9', + /* Basic control characters and null */ + "\r" => '\r', + "\n" => '\n', + "\x08" => '\b', + "\t" => '\t', + "\x0C" => '\f', + "\0" => '\\u0000', + /* Encode spaces for quoteless attribute protection */ + ' ' => '\\u0020', + ]; + + protected $urlSpecialChars = [ + /* HTML special chars - escape without exception to percent encoding */ + '<' => '%3C', + '>' => '%3E', + '\'' => '%27', + '"' => '%22', + '&' => '%26', + /* Characters beyond ASCII value 255 to hex sequence */ + 'Ā' => '%C4%80', + /* Punctuation and unreserved check */ + ',' => '%2C', + '.' => '.', + '_' => '_', + '-' => '-', + ':' => '%3A', + ';' => '%3B', + '!' => '%21', + /* Basic alnums excluded */ + 'a' => 'a', + 'A' => 'A', + 'z' => 'z', + 'Z' => 'Z', + '0' => '0', + '9' => '9', + /* Basic control characters and null */ + "\r" => '%0D', + "\n" => '%0A', + "\t" => '%09', + "\0" => '%00', + /* PHP quirks from the past */ + ' ' => '%20', + '~' => '~', + '+' => '%2B', + ]; + + protected $cssSpecialChars = [ + /* HTML special chars - escape without exception to hex */ + '<' => '\\3C ', + '>' => '\\3E ', + '\'' => '\\27 ', + '"' => '\\22 ', + '&' => '\\26 ', + /* Characters beyond ASCII value 255 to unicode escape */ + 'Ā' => '\\100 ', + /* Immune chars excluded */ + ',' => '\\2C ', + '.' => '\\2E ', + '_' => '\\5F ', + /* Basic alnums excluded */ + 'a' => 'a', + 'A' => 'A', + 'z' => 'z', + 'Z' => 'Z', + '0' => '0', + '9' => '9', + /* Basic control characters and null */ + "\r" => '\\D ', + "\n" => '\\A ', + "\t" => '\\9 ', + "\0" => '\\0 ', + /* Encode spaces for quoteless attribute protection */ + ' ' => '\\20 ', + ]; + + protected $env; + + protected function setUp() + { + $this->env = new \Twig\Environment($this->createMock('\Twig\Loader\LoaderInterface')); + } + + public function testHtmlEscapingConvertsSpecialChars() + { + foreach ($this->htmlSpecialChars as $key => $value) { + $this->assertEquals($value, twig_escape_filter($this->env, $key, 'html'), 'Failed to escape: '.$key); + } + } + + public function testHtmlAttributeEscapingConvertsSpecialChars() + { + foreach ($this->htmlAttrSpecialChars as $key => $value) { + $this->assertEquals($value, twig_escape_filter($this->env, $key, 'html_attr'), 'Failed to escape: '.$key); + } + } + + public function testJavascriptEscapingConvertsSpecialChars() + { + foreach ($this->jsSpecialChars as $key => $value) { + $this->assertEquals($value, twig_escape_filter($this->env, $key, 'js'), 'Failed to escape: '.$key); + } + } + + public function testJavascriptEscapingReturnsStringIfZeroLength() + { + $this->assertEquals('', twig_escape_filter($this->env, '', 'js')); + } + + public function testJavascriptEscapingReturnsStringIfContainsOnlyDigits() + { + $this->assertEquals('123', twig_escape_filter($this->env, '123', 'js')); + } + + public function testCssEscapingConvertsSpecialChars() + { + foreach ($this->cssSpecialChars as $key => $value) { + $this->assertEquals($value, twig_escape_filter($this->env, $key, 'css'), 'Failed to escape: '.$key); + } + } + + public function testCssEscapingReturnsStringIfZeroLength() + { + $this->assertEquals('', twig_escape_filter($this->env, '', 'css')); + } + + public function testCssEscapingReturnsStringIfContainsOnlyDigits() + { + $this->assertEquals('123', twig_escape_filter($this->env, '123', 'css')); + } + + public function testUrlEscapingConvertsSpecialChars() + { + foreach ($this->urlSpecialChars as $key => $value) { + $this->assertEquals($value, twig_escape_filter($this->env, $key, 'url'), 'Failed to escape: '.$key); + } + } + + /** + * Range tests to confirm escaped range of characters is within OWASP recommendation. + */ + + /** + * Only testing the first few 2 ranges on this prot. function as that's all these + * other range tests require. + */ + public function testUnicodeCodepointConversionToUtf8() + { + $expected = ' ~ޙ'; + $codepoints = [0x20, 0x7e, 0x799]; + $result = ''; + foreach ($codepoints as $value) { + $result .= $this->codepointToUtf8($value); + } + $this->assertEquals($expected, $result); + } + + /** + * Convert a Unicode Codepoint to a literal UTF-8 character. + * + * @param int $codepoint Unicode codepoint in hex notation + * + * @return string UTF-8 literal string + */ + protected function codepointToUtf8($codepoint) + { + if ($codepoint < 0x80) { + return \chr($codepoint); + } + if ($codepoint < 0x800) { + return \chr($codepoint >> 6 & 0x3f | 0xc0) + .\chr($codepoint & 0x3f | 0x80); + } + if ($codepoint < 0x10000) { + return \chr($codepoint >> 12 & 0x0f | 0xe0) + .\chr($codepoint >> 6 & 0x3f | 0x80) + .\chr($codepoint & 0x3f | 0x80); + } + if ($codepoint < 0x110000) { + return \chr($codepoint >> 18 & 0x07 | 0xf0) + .\chr($codepoint >> 12 & 0x3f | 0x80) + .\chr($codepoint >> 6 & 0x3f | 0x80) + .\chr($codepoint & 0x3f | 0x80); + } + throw new \Exception('Codepoint requested outside of Unicode range.'); + } + + public function testJavascriptEscapingEscapesOwaspRecommendedRanges() + { + $immune = [',', '.', '_']; // Exceptions to escaping ranges + for ($chr = 0; $chr < 0xFF; ++$chr) { + if ($chr >= 0x30 && $chr <= 0x39 + || $chr >= 0x41 && $chr <= 0x5A + || $chr >= 0x61 && $chr <= 0x7A) { + $literal = $this->codepointToUtf8($chr); + $this->assertEquals($literal, twig_escape_filter($this->env, $literal, 'js')); + } else { + $literal = $this->codepointToUtf8($chr); + if (\in_array($literal, $immune)) { + $this->assertEquals($literal, twig_escape_filter($this->env, $literal, 'js')); + } else { + $this->assertNotEquals( + $literal, + twig_escape_filter($this->env, $literal, 'js'), + "$literal should be escaped!"); + } + } + } + } + + public function testHtmlAttributeEscapingEscapesOwaspRecommendedRanges() + { + $immune = [',', '.', '-', '_']; // Exceptions to escaping ranges + for ($chr = 0; $chr < 0xFF; ++$chr) { + if ($chr >= 0x30 && $chr <= 0x39 + || $chr >= 0x41 && $chr <= 0x5A + || $chr >= 0x61 && $chr <= 0x7A) { + $literal = $this->codepointToUtf8($chr); + $this->assertEquals($literal, twig_escape_filter($this->env, $literal, 'html_attr')); + } else { + $literal = $this->codepointToUtf8($chr); + if (\in_array($literal, $immune)) { + $this->assertEquals($literal, twig_escape_filter($this->env, $literal, 'html_attr')); + } else { + $this->assertNotEquals( + $literal, + twig_escape_filter($this->env, $literal, 'html_attr'), + "$literal should be escaped!"); + } + } + } + } + + public function testCssEscapingEscapesOwaspRecommendedRanges() + { + // CSS has no exceptions to escaping ranges + for ($chr = 0; $chr < 0xFF; ++$chr) { + if ($chr >= 0x30 && $chr <= 0x39 + || $chr >= 0x41 && $chr <= 0x5A + || $chr >= 0x61 && $chr <= 0x7A) { + $literal = $this->codepointToUtf8($chr); + $this->assertEquals($literal, twig_escape_filter($this->env, $literal, 'css')); + } else { + $literal = $this->codepointToUtf8($chr); + $this->assertNotEquals( + $literal, + twig_escape_filter($this->env, $literal, 'css'), + "$literal should be escaped!"); + } + } + } +} diff --git a/vendor/typo3/phar-stream-wrapper/.appveyor.yml b/vendor/typo3/phar-stream-wrapper/.appveyor.yml new file mode 100644 index 0000000000000000000000000000000000000000..7471e1a03f31fbaa8ec9591c57f9e4ac34adc689 --- /dev/null +++ b/vendor/typo3/phar-stream-wrapper/.appveyor.yml @@ -0,0 +1,53 @@ +build: false +platform: + - x64 +clone_folder: c:\projects\php-project-workspace + +# php_ver_target can be used as regular expression +# e.g. '7\.' will be used as pattern '\|7\.' on value 'php|7.1.2' +environment: + matrix: + - dependencies: current + php_ver_target: 7\. + +cache: + - '%LOCALAPPDATA%\Composer\files -> composer.lock' + # Cache chocolatey packages + - C:\ProgramData\chocolatey\bin -> .appveyor.yml + - C:\ProgramData\chocolatey\lib -> .appveyor.yml + # Cache php install + - c:\tools\php -> .appveyor.yml + +## Set up environment variables +init: + - SET PATH=C:\Program Files\OpenSSL;c:\tools\php;%PATH% + - SET COMPOSER_NO_INTERACTION=1 + - SET PHP=1 # This var is connected to PHP install cache + - SET ANSICON=121x90 (121x90) + +## Install PHP and composer, and run the appropriate composer command +install: + - IF EXIST c:\tools\php (SET PHP=0) # Checks for the PHP install being cached + - ps: appveyor-retry cinst --params '""/InstallDir:C:\tools\php""' --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern "\|$env:php_ver_target" | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','') + - cd c:\tools\php + - IF %PHP%==1 copy php.ini-production php.ini /Y + - IF %PHP%==1 echo date.timezone="UTC" >> php.ini + - IF %PHP%==1 echo extension_dir=ext >> php.ini + - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini + - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini + - IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini + - IF %PHP%==1 echo extension=php_bz2.dll >> php.ini + - IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat + - appveyor-retry appveyor DownloadFile https://getcomposer.org/composer.phar + - cd c:\projects\php-project-workspace +# Remove xdebug dependency as performance testing is not relevant at this point. + - composer remove --dev ext-xdebug + - IF %dependencies%==lowest appveyor-retry composer update --prefer-lowest --no-progress --profile -n + - IF %dependencies%==current appveyor-retry composer install --no-progress --profile + - IF %dependencies%==highest appveyor-retry composer update --no-progress --profile -n + - composer show + +## Run the actual test +test_script: + - cd c:\projects\php-project-workspace + - vendor/bin/phpunit diff --git a/vendor/composer/installers/.gitignore b/vendor/typo3/phar-stream-wrapper/.gitignore similarity index 75% rename from vendor/composer/installers/.gitignore rename to vendor/typo3/phar-stream-wrapper/.gitignore index ff7f293dc8987aeb2c6bb2d9715965442b5496d9..157ff0c59898127374760bc70c525dd0d727d710 100644 --- a/vendor/composer/installers/.gitignore +++ b/vendor/typo3/phar-stream-wrapper/.gitignore @@ -1,3 +1,3 @@ +.idea vendor/ composer.lock -.idea/ diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt index e262d8838baa570ee0828c18f3180348a61372b3..e6a3a747c5c861f503fca4183ec29ba5f1bb54f6 100644 --- a/web/core/MAINTAINERS.txt +++ b/web/core/MAINTAINERS.txt @@ -505,7 +505,6 @@ API-first Initiative - Gabe Sullice 'gabesullice' https://www.drupal.org/u/gabesullice Admin UI & JavaScript Modernisation Initiative -- Angela Byron 'webchick' https://www.drupal.org/u/webchick - Cristina Chumillas 'ckrina' https://www.drupal.org/u/ckrina - Sally Young 'justafish' https://www.drupal.org/u/justafish diff --git a/web/core/assets/vendor/ckeditor/CHANGES.md b/web/core/assets/vendor/ckeditor/CHANGES.md index 63c82556beebec7b7583576c6217ce228291f852..9f5d14d45d0dbbf9679633d26de7497cc383e549 100644 --- a/web/core/assets/vendor/ckeditor/CHANGES.md +++ b/web/core/assets/vendor/ckeditor/CHANGES.md @@ -1,126 +1,192 @@ CKEditor 4 Changelog ==================== +## CKEditor 4.14 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML data processor reported by [Michał Bentkowski](https://twitter.com/securitymb) of Securitum. + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode or (i) copy the specially crafted HTML code, prepared by the attacker and (ii) paste it into CKEditor in WYSIWYG mode. + +* Fixed XSS vulnerability in the WebSpellChecker plugin reported by [Pham Van Khanh](https://twitter.com/rskvp93) from Viettel Cyber Security. + + Issue summary: It was possible to execute XSS using CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, then (iii) switch back to WYSIWYG mode, and (iv) preview CKEditor content outside CKEditor editable area. + +**An upgrade is highly recommended!** + +New features: + +* [#2374](https://github.com/ckeditor/ckeditor4/issues/2374): Added support for pasting rich content from LibreOffice Writer with the [Paste from LibreOffice](https://ckeditor.com/cke4/addon/pastefromlibreoffice) plugin. +* [#2583](https://github.com/ckeditor/ckeditor4/issues/2583): Changed [emoji](https://ckeditor.com/cke4/addon/emoji) suggestion box to show the matched emoji name instead of an ID. +* [#3748](https://github.com/ckeditor/ckeditor4/issues/3748): Improved the [color button](https://ckeditor.com/cke4/addon/colorbutton) state to reflect the selected editor content colors. +* [#3661](https://github.com/ckeditor/ckeditor4/issues/3661): Improved the [Print](https://ckeditor.com/cke4/addon/print) plugin to respect styling rendered by the [Preview](https://ckeditor.com/cke4/addon/preview) plugin. +* [#3547](https://github.com/ckeditor/ckeditor4/issues/3547): Active [dialog](https://ckeditor.com/cke4/addon/dialog) tab now has the `aria-selected="true"` attribute. +* [#3441](https://github.com/ckeditor/ckeditor4/issues/3441): Improved [`widget.getClipboardHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#method-getClipboardHtml) support for dragging and dropping multiple [widgets](https://ckeditor.com/cke4/addon/widget). + +Fixed Issues: + +* [#3587](https://github.com/ckeditor/ckeditor4/issues/3587): [Edge, IE] Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) with form input elements loses focus during typing. +* [#3705](https://github.com/ckeditor/ckeditor4/issues/3705): [Safari] Fixed: Safari incorrectly removes blocks with the [`editor.extractSelectedHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-extractSelectedHtml) method after selecting all content. +* [#1306](https://github.com/ckeditor/ckeditor4/issues/1306): Fixed: The [Font](https://ckeditor.com/cke4/addon/colorbutton) plugin creates nested HTML `<span>` tags when reapplying the same font multiple times. +* [#3498](https://github.com/ckeditor/ckeditor4/issues/3498): Fixed: The editor throws an error during the copy operation when a [widget](https://ckeditor.com/cke4/addon/widget) is partially selected. +* [#2517](https://github.com/ckeditor/ckeditor4/issues/2517): [Chrome, Firefox, Safari] Fixed: Inserting a new image when the selection partially covers an existing [enhanced image](https://ckeditor.com/cke4/addon/image2) widget throws an error. +* [#3007](https://github.com/ckeditor/ckeditor4/issues/3007): [Chrome, Firefox, Safari] Fixed: Cannot modify the editor content once the selection is released over a [widget](https://ckeditor.com/cke4/addon/widget). +* [#3698](https://github.com/ckeditor/ckeditor4/issues/3698): Fixed: Cutting the selected text when a [widget](https://ckeditor.com/cke4/addon/widget) is partially selected merges paragraphs. + +API Changes: + +* [#3387](https://github.com/ckeditor/ckeditor4/issues/3387): Added the [CKEDITOR.ui.richCombo.select()](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_richCombo.html#method-select) method. +* [#3727](https://github.com/ckeditor/ckeditor4/issues/3727): Added new `textColor` and `bgColor` commands that apply the selected color chosen by the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) plugin. +* [#3728](https://github.com/ckeditor/ckeditor4/issues/3728): Added new `font` and `fontSize` commands that apply the selected font style chosen by the [Font](https://ckeditor.com/cke4/addon/colorbutton) plugin. +* [#3842](https://github.com/ckeditor/ckeditor4/issues/3842): Added the [`editor.getSelectedRanges()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getSelectedRanges) alias. +* [#3775](https://github.com/ckeditor/ckeditor4/issues/3775): Widget [mask](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#property-mask) and [parts](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#property-parts) can now be refreshed dynamically via API calls. + +## CKEditor 4.13.1 + +Fixed Issues: + +* [#875](https://github.com/ckeditor/ckeditor4/issues/875): Fixed: Pasting inside the editor that contains a table with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin after selecting all content replaces only the table element instead of the entire content. +* [#3415](https://github.com/ckeditor/ckeditor4/issues/3415): [Firefox] Fixed: Pasting individual list elements fails. Thanks to [Jack Wickham](https://github.com/jackwickham)! +* [#3413](https://github.com/ckeditor/ckeditor4/issues/3413): Fixed: Menu items with labels containing double quotes are rendered incorrectly. +* [#3475](https://github.com/ckeditor/ckeditor4/issues/3475): [Firefox] Fixed: Pasting plain text over existing content fails and throws an error. +* [#2027](https://github.com/ckeditor/ckeditor4/issues/2027): Fixed: Incorrect email display text after reopening the [Link](https://ckeditor.com/cke4/addon/link) dialog for display names starting with `@`. +* [#3544](https://github.com/ckeditor/ckeditor4/issues/3544): Fixed: The [Special Characters](https://ckeditor.com/cke4/addon/specialchar) dialog read incorrectly by screen readers due to empty table cells at the end. +* [#1653](https://github.com/ckeditor/ckeditor4/issues/1653): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) is not repositioned when the editor is scrolled with the [Div Editing Area](https://ckeditor.com/cke4/addon/divarea) feature enabled. +* [#3559](https://github.com/ckeditor/ckeditor4/issues/3559): Fixed: [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) is incorrectly positioned when used with another dialog. +* [#3593](https://github.com/ckeditor/ckeditor4/issues/3593): Fixed: Cannot access a text or comment node when replacing an element node with them via [`CKEDITOR.htmlParser.filter`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_htmlParser_filter.html). +* [#3524](https://github.com/ckeditor/ckeditor4/issues/3524): Fixed: The [Easy Image](https://ckeditor.com/cke4/addon/easyimage) plugin throws an error when any image with an unsupported data type is pasted into the editor. +* [#3552](https://github.com/ckeditor/ckeditor4/issues/3352): Fixed: Incorrect value of [`CKEDITOR.plugins.widget.repository#selected`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_repository.html#property-selected) after selecting the whole editor content. +* [#3586](https://github.com/ckeditor/ckeditor4/issues/3586): Fixed: Content pasted from Microsoft Excel is not correctly recognised by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#3585](https://github.com/ckeditor/ckeditor4/issues/3585): [Firefox] Fixed: Microsoft Excel content is pasted as an image. +* [#3625](https://github.com/ckeditor/ckeditor4/issues/3625): [Firefox] Fixed: Microsoft PowerPoint content is pasted as an image. +* [#3474](https://github.com/ckeditor/ckeditor4/issues/3474): Fixed: Incorrect focus order after any tab in a [dialog](https://ckeditor.com/cke4/addon/dialog) was clicked. +* [#3689](https://github.com/ckeditor/ckeditor4/issues/3689): Fixed: Cannot change [dialog](https://ckeditor.com/cke4/addon/dialog) tabs with keyboard arrow keys after focusing any tab with a mouse click. + +API Changes: + +* [#3634](https://github.com/ckeditor/ckeditor4/issues/3634): Added the [`CKEDITOR.plugins.clipboard.dataTransfer#getTypes()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_clipboard_dataTransfer.html#method-getTypes) method. + ## CKEditor 4.13 New Features: -* [#835](https://github.com/ckeditor/ckeditor-dev/issues/835): Extended support for pasting from external applications: +* [#835](https://github.com/ckeditor/ckeditor4/issues/835): Extended support for pasting from external applications: * Added support for pasting rich content from Google Docs with the [Paste from Google Docs](https://ckeditor.com/cke4/addon/pastefromgdocs) plugin. * Added a new [Paste Tools](https://ckeditor.com/cke4/addon/pastetools) plugin for unified paste handling. -* [#3315](https://github.com/ckeditor/ckeditor-dev/issues/3315): Added support for strikethrough in the [BBCode](https://ckeditor.com/cke4/addon/bbcode) plugin. Thanks to [Alexander Kahl](https://github.com/akahl-owl)! -* [#3175](https://github.com/ckeditor/ckeditor-dev/issues/3175): Introduced selection optimization mechanism for handling incorrect selection behaviors in various browsers: - * [#3256](https://github.com/ckeditor/ckeditor-dev/issues/3256): Triple-clicking in the last table cell and deleting content no longer pulls the content below into the table. - * [#3118](https://github.com/ckeditor/ckeditor-dev/issues/3118): Selecting a paragraph with a triple-click and applying a heading applies the heading only to the selected paragraph. - * [#3161](https://github.com/ckeditor/ckeditor-dev/issues/3161): Double-clicking a `<span>` element containing just one word creates a correct selection including the clicked `<span>` only. -* [#3359](https://github.com/ckeditor/ckeditor-dev/issues/3359): Improved [dialog](https://ckeditor.com/cke4/addon/dialog) positioning and behavior when the dialog is resized or moved, or the browser window is resized. -* [#2227](https://github.com/ckeditor/ckeditor-dev/issues/2227): Added the [`config.linkDefaultProtocol`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-linkDefaultProtocol) configuration option that allows setting the default URL protocol for the [Link](https://ckeditor.com/cke4/addon/link) plugin dialog. -* [#3240](https://github.com/ckeditor/ckeditor-dev/issues/3240): Extended the [`CKEDITOR.plugins.widget#mask`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#property-mask) property to allow masking only the specified part of a [widget](https://ckeditor.com/cke4/addon/widget). -* [#3138](https://github.com/ckeditor/ckeditor-dev/issues/3138): Added the possibility to use the [`widgetDefinition.getClipboardHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#method-getClipboardHtml) method to customize the [widget](https://ckeditor.com/cke4/addon/widget) HTML during copy, cut and drag operations. +* [#3315](https://github.com/ckeditor/ckeditor4/issues/3315): Added support for strikethrough in the [BBCode](https://ckeditor.com/cke4/addon/bbcode) plugin. Thanks to [Alexander Kahl](https://github.com/akahl-owl)! +* [#3175](https://github.com/ckeditor/ckeditor4/issues/3175): Introduced selection optimization mechanism for handling incorrect selection behaviors in various browsers: + * [#3256](https://github.com/ckeditor/ckeditor4/issues/3256): Triple-clicking in the last table cell and deleting content no longer pulls the content below into the table. + * [#3118](https://github.com/ckeditor/ckeditor4/issues/3118): Selecting a paragraph with a triple-click and applying a heading applies the heading only to the selected paragraph. + * [#3161](https://github.com/ckeditor/ckeditor4/issues/3161): Double-clicking a `<span>` element containing just one word creates a correct selection including the clicked `<span>` only. +* [#3359](https://github.com/ckeditor/ckeditor4/issues/3359): Improved [dialog](https://ckeditor.com/cke4/addon/dialog) positioning and behavior when the dialog is resized or moved, or the browser window is resized. +* [#2227](https://github.com/ckeditor/ckeditor4/issues/2227): Added the [`config.linkDefaultProtocol`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-linkDefaultProtocol) configuration option that allows setting the default URL protocol for the [Link](https://ckeditor.com/cke4/addon/link) plugin dialog. +* [#3240](https://github.com/ckeditor/ckeditor4/issues/3240): Extended the [`CKEDITOR.plugins.widget#mask`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#property-mask) property to allow masking only the specified part of a [widget](https://ckeditor.com/cke4/addon/widget). +* [#3138](https://github.com/ckeditor/ckeditor4/issues/3138): Added the possibility to use the [`widgetDefinition.getClipboardHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#method-getClipboardHtml) method to customize the [widget](https://ckeditor.com/cke4/addon/widget) HTML during copy, cut and drag operations. Fixed Issues: -* [#808](https://github.com/ckeditor/ckeditor-dev/issues/808): Fixed: [Widgets](https://ckeditor.com/cke4/addon/widget) and other content disappear on drag and drop in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). -* [#3260](https://github.com/ckeditor/ckeditor-dev/issues/3260): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) drag handler is visible in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). -* [#3261](https://github.com/ckeditor/ckeditor-dev/issues/3261): Fixed: A [widget](https://ckeditor.com/cke4/addon/widget) initialized using the dialog has an incorrect owner document. -* [#3198](https://github.com/ckeditor/ckeditor-dev/issues/3198): Fixed: Blurring and focusing the editor when a [widget](https://ckeditor.com/cke4/addon/widget) is focused creates an additional undo step. -* [#2859](https://github.com/ckeditor/ckeditor-dev/pull/2859): [IE, Edge] Fixed: Various editor UI elements react to right mouse button click: - * [#2845](https://github.com/ckeditor/ckeditor-dev/issues/2845): [Rich Combo](https://ckeditor.com/cke4/addon/richcombo). - * [#2857](https://github.com/ckeditor/ckeditor-dev/issues/2857): [List Block](https://ckeditor.com/cke4/addon/listblock). - * [#2858](https://github.com/ckeditor/ckeditor-dev/issues/2858): [Menu](https://ckeditor.com/cke4/addon/menu). -* [#3158](https://github.com/ckeditor/ckeditor-dev/issues/3158): [Chrome, Safari] Fixed: [Undo](https://ckeditor.com/cke4/addon/undo) plugin breaks with the filling character. -* [#504](https://github.com/ckeditor/ckeditor-dev/issues/504): [Edge] Fixed: The editor's selection is collapsed to the beginning of the content when focusing the editor for the first time. -* [#3101](https://github.com/ckeditor/ckeditor-dev/issues/3101): Fixed: [`CKEDITOR.dom.range#_getTableElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-_getTableElement) returns `null` instead of a table element for edge cases. -* [#3287](https://github.com/ckeditor/ckeditor-dev/issues/3287): Fixed: [`CKEDITOR.tools.promise`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_promise.html) initializes incorrectly if an AMD loader is present. -* [#3379](https://github.com/ckeditor/ckeditor-dev/issues/3379): Fixed: Incorrect [`CKEDITOR.editor#getData()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getData) call when inserting content into the editor. -* [#941](https://github.com/ckeditor/ckeditor-dev/issues/941): Fixed: An error is thrown after styling a table cell text selected using the native selection when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is enabled. -* [#3136](https://github.com/ckeditor/ckeditor-dev/issues/3136): [Firefox] Fixed: Clicking [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) items removes the native table selection. -* [#3381](https://github.com/ckeditor/ckeditor-dev/issues/3381): [IE8] Fixed: The [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method does not accept non-objects. -* [#2395](https://github.com/ckeditor/ckeditor-dev/issues/2395): [Android] Fixed: Focused input in a [dialog](https://ckeditor.com/cke4/addon/dialog) is scrolled out of the viewport when the soft keyboard appears. -* [#453](https://github.com/ckeditor/ckeditor-dev/issues/453): Fixed: [Link](https://ckeditor.com/cke4/addon/link) dialog has an invalid width when the editor is maximized and the browser window is resized. -* [#2138](https://github.com/ckeditor/ckeditor-dev/issues/2138): Fixed: An email address containing a question mark is mishandled by the [Link](https://ckeditor.com/cke4/addon/link) plugin. +* [#808](https://github.com/ckeditor/ckeditor4/issues/808): Fixed: [Widgets](https://ckeditor.com/cke4/addon/widget) and other content disappear on drag and drop in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). +* [#3260](https://github.com/ckeditor/ckeditor4/issues/3260): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) drag handler is visible in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). +* [#3261](https://github.com/ckeditor/ckeditor4/issues/3261): Fixed: A [widget](https://ckeditor.com/cke4/addon/widget) initialized using the dialog has an incorrect owner document. +* [#3198](https://github.com/ckeditor/ckeditor4/issues/3198): Fixed: Blurring and focusing the editor when a [widget](https://ckeditor.com/cke4/addon/widget) is focused creates an additional undo step. +* [#2859](https://github.com/ckeditor/ckeditor4/pull/2859): [IE, Edge] Fixed: Various editor UI elements react to right mouse button click: + * [#2845](https://github.com/ckeditor/ckeditor4/issues/2845): [Rich Combo](https://ckeditor.com/cke4/addon/richcombo). + * [#2857](https://github.com/ckeditor/ckeditor4/issues/2857): [List Block](https://ckeditor.com/cke4/addon/listblock). + * [#2858](https://github.com/ckeditor/ckeditor4/issues/2858): [Menu](https://ckeditor.com/cke4/addon/menu). +* [#3158](https://github.com/ckeditor/ckeditor4/issues/3158): [Chrome, Safari] Fixed: [Undo](https://ckeditor.com/cke4/addon/undo) plugin breaks with the filling character. +* [#504](https://github.com/ckeditor/ckeditor4/issues/504): [Edge] Fixed: The editor's selection is collapsed to the beginning of the content when focusing the editor for the first time. +* [#3101](https://github.com/ckeditor/ckeditor4/issues/3101): Fixed: [`CKEDITOR.dom.range#_getTableElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-_getTableElement) returns `null` instead of a table element for edge cases. +* [#3287](https://github.com/ckeditor/ckeditor4/issues/3287): Fixed: [`CKEDITOR.tools.promise`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_promise.html) initializes incorrectly if an AMD loader is present. +* [#3379](https://github.com/ckeditor/ckeditor4/issues/3379): Fixed: Incorrect [`CKEDITOR.editor#getData()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getData) call when inserting content into the editor. +* [#941](https://github.com/ckeditor/ckeditor4/issues/941): Fixed: An error is thrown after styling a table cell text selected using the native selection when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is enabled. +* [#3136](https://github.com/ckeditor/ckeditor4/issues/3136): [Firefox] Fixed: Clicking [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) items removes the native table selection. +* [#3381](https://github.com/ckeditor/ckeditor4/issues/3381): [IE8] Fixed: The [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method does not accept non-objects. +* [#2395](https://github.com/ckeditor/ckeditor4/issues/2395): [Android] Fixed: Focused input in a [dialog](https://ckeditor.com/cke4/addon/dialog) is scrolled out of the viewport when the soft keyboard appears. +* [#453](https://github.com/ckeditor/ckeditor4/issues/453): Fixed: [Link](https://ckeditor.com/cke4/addon/link) dialog has an invalid width when the editor is maximized and the browser window is resized. +* [#2138](https://github.com/ckeditor/ckeditor4/issues/2138): Fixed: An email address containing a question mark is mishandled by the [Link](https://ckeditor.com/cke4/addon/link) plugin. * [#14613](https://dev.ckeditor.com/ticket/14613): Fixed: Race condition when loading plugins for an already destroyed editor instance throws an error. -* [#2257](https://github.com/ckeditor/ckeditor-dev/issues/2257): Fixed: The editor throws an exception when destroyed shortly after it was created. -* [#3115](https://github.com/ckeditor/ckeditor-dev/issues/3115): Fixed: Destroying the editor during the initialization throws an error. +* [#2257](https://github.com/ckeditor/ckeditor4/issues/2257): Fixed: The editor throws an exception when destroyed shortly after it was created. +* [#3115](https://github.com/ckeditor/ckeditor4/issues/3115): Fixed: Destroying the editor during the initialization throws an error. * [#3354](https://github.com/ckeditor/ckeditor4/issues/3354): [iOS] Fixed: Pasting no longer works on iOS version 13. * [#3423](https://github.com/ckeditor/ckeditor4/issues/3423) Fixed: [Bookmarks](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-createBookmark) can be created inside temporary elements. API Changes: -* [#3154](https://github.com/ckeditor/ckeditor-dev/issues/3154): Added the [`CKEDITOR.tools.array.some()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-some) method. -* [#3245](https://github.com/ckeditor/ckeditor-dev/issues/3245): Added the [`CKEDITOR.plugins.undo.UndoManager.addFilterRule()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_undo_UndoManager.html#method-addFilterRule) method that allows filtering undo snapshot contents. -* [#2845](https://github.com/ckeditor/ckeditor-dev/issues/2845): Added the [`CKEDITOR.tools.normalizeMouseButton()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-normalizeMouseButton) method. -* [#2975](https://github.com/ckeditor/ckeditor-dev/issues/2975): Added the [`CKEDITOR.dom.element#fireEventHandler()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-fireEventHandler) method. -* [#3247](https://github.com/ckeditor/ckeditor-dev/issues/3247): Extended the [`CKEDITOR.tools.bind()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-bind) method to accept arguments for bound functions. -* [#3326](https://github.com/ckeditor/ckeditor-dev/issues/3326): Added the [`CKEDITOR.dom.text#isEmpty()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_text.html#method-isEmpty) method. -* [#2423](https://github.com/ckeditor/ckeditor-dev/issues/2423): Added the [`CKEDITOR.plugins.dialog.getModel()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog.html#method-getModel) and [`CKEDITOR.plugins.dialog.getMode()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog.html#method-getMode) methods with their [`CKEDITOR.plugin.definition`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_definition.html) counterparts, allowing to get the dialog subject of a change. -* [#3124](https://github.com/ckeditor/ckeditor-dev/issues/3124): Added the [`CKEDITOR.dom.element#isDetached()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-isDetached) method. +* [#3154](https://github.com/ckeditor/ckeditor4/issues/3154): Added the [`CKEDITOR.tools.array.some()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-some) method. +* [#3245](https://github.com/ckeditor/ckeditor4/issues/3245): Added the [`CKEDITOR.plugins.undo.UndoManager.addFilterRule()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_undo_UndoManager.html#method-addFilterRule) method that allows filtering undo snapshot contents. +* [#2845](https://github.com/ckeditor/ckeditor4/issues/2845): Added the [`CKEDITOR.tools.normalizeMouseButton()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-normalizeMouseButton) method. +* [#2975](https://github.com/ckeditor/ckeditor4/issues/2975): Added the [`CKEDITOR.dom.element#fireEventHandler()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-fireEventHandler) method. +* [#3247](https://github.com/ckeditor/ckeditor4/issues/3247): Extended the [`CKEDITOR.tools.bind()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-bind) method to accept arguments for bound functions. +* [#3326](https://github.com/ckeditor/ckeditor4/issues/3326): Added the [`CKEDITOR.dom.text#isEmpty()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_text.html#method-isEmpty) method. +* [#2423](https://github.com/ckeditor/ckeditor4/issues/2423): Added the [`CKEDITOR.plugins.dialog.getModel()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog.html#method-getModel) and [`CKEDITOR.plugins.dialog.getMode()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog.html#method-getMode) methods with their [`CKEDITOR.plugin.definition`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_definition.html) counterparts, allowing to get the dialog subject of a change. +* [#3124](https://github.com/ckeditor/ckeditor4/issues/3124): Added the [`CKEDITOR.dom.element#isDetached()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-isDetached) method. ## CKEditor 4.12.1 Fixed Issues: -* [#3220](https://github.com/ckeditor/ckeditor-dev/issues/3220): Fixed: Prevent [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) filter from deleting [Page Break](https://ckeditor.com/cke4/addon/pagebreak) elements on paste. +* [#3220](https://github.com/ckeditor/ckeditor4/issues/3220): Fixed: Prevent [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) filter from deleting [Page Break](https://ckeditor.com/cke4/addon/pagebreak) elements on paste. ## CKEditor 4.12 New Features: -* [#2598](https://github.com/ckeditor/ckeditor-dev/issues/2598): Added the [Page Break](https://ckeditor.com/cke4/addon/pagebreak) feature support for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#1490](https://github.com/ckeditor/ckeditor-dev/issues/1490): Improved the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin to retain table cell borders. -* [#2870](https://github.com/ckeditor/ckeditor-dev/issues/2870): Improved support for preserving the indentation of list items for nested lists pasted with the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#2048](https://github.com/ckeditor/ckeditor-dev/issues/2048): New [`CKEDITOR.config.image2_maxSize`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-image2_maxSize) configuration option for the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin that allows setting a maximum size that an image can be resized to with the resizer. -* [#2639](https://github.com/ckeditor/ckeditor-dev/issues/2639): The [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) plugin now shows the current selection's color when opened. -* [#2084](https://github.com/ckeditor/ckeditor-dev/issues/2084): The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin now allows to change the cell height unit type to either pixels or percent. -* [#3164](https://github.com/ckeditor/ckeditor-dev/issues/3164): The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin now accepts floating point values as the table cell width and height. +* [#2598](https://github.com/ckeditor/ckeditor4/issues/2598): Added the [Page Break](https://ckeditor.com/cke4/addon/pagebreak) feature support for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#1490](https://github.com/ckeditor/ckeditor4/issues/1490): Improved the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin to retain table cell borders. +* [#2870](https://github.com/ckeditor/ckeditor4/issues/2870): Improved support for preserving the indentation of list items for nested lists pasted with the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#2048](https://github.com/ckeditor/ckeditor4/issues/2048): New [`CKEDITOR.config.image2_maxSize`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-image2_maxSize) configuration option for the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin that allows setting a maximum size that an image can be resized to with the resizer. +* [#2639](https://github.com/ckeditor/ckeditor4/issues/2639): The [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) plugin now shows the current selection's color when opened. +* [#2084](https://github.com/ckeditor/ckeditor4/issues/2084): The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin now allows to change the cell height unit type to either pixels or percent. +* [#3164](https://github.com/ckeditor/ckeditor4/issues/3164): The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin now accepts floating point values as the table cell width and height. Fixed Issues: -* [#2672](https://github.com/ckeditor/ckeditor-dev/issues/2672): Fixed: When resizing an [Enhanced Image](https://ckeditor.com/cke4/addon/image2) to a minimum size with the resizer, the image dialog does not show actual values. -* [#1478](https://github.com/ckeditor/ckeditor-dev/issues/1478): Fixed: Custom colors added to [Color Button](https://ckeditor.com/cke4/addon/colorbutton) with the [`config.colorButton_colors`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-colorButton_colors) configuration option in the form of a label or code do not work correctly. -* [#1469](https://github.com/ckeditor/ckeditor-dev/issues/1469): Fixed: Trying to get data from a nested editable inside a freshly pasted widget throws an error. -* [#2235](https://github.com/ckeditor/ckeditor-dev/issues/2235): Fixed: An [Image](https://ckeditor.com/cke4/addon/image) in a table cell has an empty URL field when edited from the context menu opened by right-click when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is in use. -* [#3098](https://github.com/ckeditor/ckeditor-dev/issues/3098): Fixed: Unit pickers for table cell width and height in the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin have a different width. -* [#2923](https://github.com/ckeditor/ckeditor-dev/issues/2923): Fixed: The CSS `windowtext` color is not correctly recognized by the [`CKEDITOR.tools.style.parse`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html) methods. -* [#3120](https://github.com/ckeditor/ckeditor-dev/issues/3120): [IE8] Fixed: The [`CKEDITOR.tools.extend()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tool.html#method-extend) method does not work with the [`DontEnum`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Properties) object property attribute. -* [#2813](https://github.com/ckeditor/ckeditor-dev/issues/2813): Fixed: Editor HTML insertion methods ([`editor.insertHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertHtml), [`editor.insertHtmlIntoRange()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertHtmlIntoRange), [`editor.insertElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertElement) and [`editor.insertElementIntoRange()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertElementIntoRange)) pollute the editable with empty `<span>` elements. -* [#2751](https://github.com/ckeditor/ckeditor-dev/issues/2751): Fixed: An editor with [`config.enterMode`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-enterMode) set to [`ENTER_DIV`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#property-ENTER_DIV) alters pasted content. +* [#2672](https://github.com/ckeditor/ckeditor4/issues/2672): Fixed: When resizing an [Enhanced Image](https://ckeditor.com/cke4/addon/image2) to a minimum size with the resizer, the image dialog does not show actual values. +* [#1478](https://github.com/ckeditor/ckeditor4/issues/1478): Fixed: Custom colors added to [Color Button](https://ckeditor.com/cke4/addon/colorbutton) with the [`config.colorButton_colors`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-colorButton_colors) configuration option in the form of a label or code do not work correctly. +* [#1469](https://github.com/ckeditor/ckeditor4/issues/1469): Fixed: Trying to get data from a nested editable inside a freshly pasted widget throws an error. +* [#2235](https://github.com/ckeditor/ckeditor4/issues/2235): Fixed: An [Image](https://ckeditor.com/cke4/addon/image) in a table cell has an empty URL field when edited from the context menu opened by right-click when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is in use. +* [#3098](https://github.com/ckeditor/ckeditor4/issues/3098): Fixed: Unit pickers for table cell width and height in the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin have a different width. +* [#2923](https://github.com/ckeditor/ckeditor4/issues/2923): Fixed: The CSS `windowtext` color is not correctly recognized by the [`CKEDITOR.tools.style.parse`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html) methods. +* [#3120](https://github.com/ckeditor/ckeditor4/issues/3120): [IE8] Fixed: The [`CKEDITOR.tools.extend()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tool.html#method-extend) method does not work with the [`DontEnum`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Properties) object property attribute. +* [#2813](https://github.com/ckeditor/ckeditor4/issues/2813): Fixed: Editor HTML insertion methods ([`editor.insertHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertHtml), [`editor.insertHtmlIntoRange()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertHtmlIntoRange), [`editor.insertElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertElement) and [`editor.insertElementIntoRange()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertElementIntoRange)) pollute the editable with empty `<span>` elements. +* [#2751](https://github.com/ckeditor/ckeditor4/issues/2751): Fixed: An editor with [`config.enterMode`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-enterMode) set to [`ENTER_DIV`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#property-ENTER_DIV) alters pasted content. API Changes: -* [#1496](https://github.com/ckeditor/ckeditor-dev/issues/1496): The [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin exposes the [`CKEDITOR.ui.balloonToolbar.reposition()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonToolbar.html#reposition) and [`CKEDITOR.ui.balloonToolbarView.reposition()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonToolbarView.html#reposition) methods. -* [#2021](https://github.com/ckeditor/ckeditor-dev/issues/2021): Added new [`CKEDITOR.dom.documentFragment.find()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_documentFragment.html#method-find) and [`CKEDITOR.dom.documentFragment.findOne()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_documentFragment.html#method-findOne) methods. -* [#2700](https://github.com/ckeditor/ckeditor-dev/issues/2700): Added the [`CKEDITOR.tools.array.find()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-find) method. -* [#3123](https://github.com/ckeditor/ckeditor-dev/issues/3123): Added the [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method. -* [#3123](https://github.com/ckeditor/ckeditor-dev/issues/3123): Added the [`CKEDITOR.tools.object.entries()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-entries) method. -* [#3123](https://github.com/ckeditor/ckeditor-dev/issues/3123): Added the [`CKEDITOR.tools.object.values()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-values) method. -* [#2821](https://github.com/ckeditor/ckeditor-dev/issues/2821): The [`CKEDITOR.template#source`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_template.html#property-source) property can now be a function, so it can return the changed template values during the runtime. Thanks to [Jacek Pulit](https://github.com/jacek-pulit)! -* [#2598](https://github.com/ckeditor/ckeditor-dev/issues/2598): Added the [`CKEDITOR.plugins.pagebreak.createElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_pagebreak.html#method-createElement) method allowing to create a [Page Break](https://ckeditor.com/cke4/addon/pagebreak) plugin [`CKEDITOR.dom.element`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html) instance. -* [#2748](https://github.com/ckeditor/ckeditor-dev/issues/2748): Enhanced error messages thrown when creating an editor on a non-existent element or when trying to instantiate the second editor on the same element. Thanks to [Byran Zaugg](https://github.com/blzaugg)! -* [#2698](https://github.com/ckeditor/ckeditor-dev/issues/2698): Added the [`CKEDITOR.htmlParser.element.findOne()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_htmlParser_element.html#method-findOne) method. -* [#2935](https://github.com/ckeditor/ckeditor-dev/issues/2935): Introduced the [`CKEDITOR.config.pasteFromWord_keepZeroMargins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-pasteFromWord_keepZeroMargins) configuration option that allows for keeping any `margin-*: 0` style that would be otherwise removed when pasting content with the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#2962](https://github.com/ckeditor/ckeditor-dev/issues/2962): Added the [`CKEDITOR.tools.promise`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_promise.html) class. -* [#2924](https://github.com/ckeditor/ckeditor-dev/issues/2924): Added the [`CKEDITOR.tools.style.border`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_border.html) object wrapping CSS border style helpers under a single type. -* [#2495](https://github.com/ckeditor/ckeditor-dev/issues/2495): The [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin can now be disabled for the given table with the `data-cke-tableselection-ignored` attribute. -* [#2692](https://github.com/ckeditor/ckeditor-dev/issues/2692): Plugins can now expose information about the supported environment by implementing the [`pluginDefinition.isSupportedEnvironment()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#method-isSupportedEnvironment) method. +* [#1496](https://github.com/ckeditor/ckeditor4/issues/1496): The [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin exposes the [`CKEDITOR.ui.balloonToolbar.reposition()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonToolbar.html#reposition) and [`CKEDITOR.ui.balloonToolbarView.reposition()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonToolbarView.html#reposition) methods. +* [#2021](https://github.com/ckeditor/ckeditor4/issues/2021): Added new [`CKEDITOR.dom.documentFragment.find()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_documentFragment.html#method-find) and [`CKEDITOR.dom.documentFragment.findOne()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_documentFragment.html#method-findOne) methods. +* [#2700](https://github.com/ckeditor/ckeditor4/issues/2700): Added the [`CKEDITOR.tools.array.find()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-find) method. +* [#3123](https://github.com/ckeditor/ckeditor4/issues/3123): Added the [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method. +* [#3123](https://github.com/ckeditor/ckeditor4/issues/3123): Added the [`CKEDITOR.tools.object.entries()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-entries) method. +* [#3123](https://github.com/ckeditor/ckeditor4/issues/3123): Added the [`CKEDITOR.tools.object.values()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-values) method. +* [#2821](https://github.com/ckeditor/ckeditor4/issues/2821): The [`CKEDITOR.template#source`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_template.html#property-source) property can now be a function, so it can return the changed template values during the runtime. Thanks to [Jacek Pulit](https://github.com/jacek-pulit)! +* [#2598](https://github.com/ckeditor/ckeditor4/issues/2598): Added the [`CKEDITOR.plugins.pagebreak.createElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_pagebreak.html#method-createElement) method allowing to create a [Page Break](https://ckeditor.com/cke4/addon/pagebreak) plugin [`CKEDITOR.dom.element`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html) instance. +* [#2748](https://github.com/ckeditor/ckeditor4/issues/2748): Enhanced error messages thrown when creating an editor on a non-existent element or when trying to instantiate the second editor on the same element. Thanks to [Byran Zaugg](https://github.com/blzaugg)! +* [#2698](https://github.com/ckeditor/ckeditor4/issues/2698): Added the [`CKEDITOR.htmlParser.element.findOne()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_htmlParser_element.html#method-findOne) method. +* [#2935](https://github.com/ckeditor/ckeditor4/issues/2935): Introduced the [`CKEDITOR.config.pasteFromWord_keepZeroMargins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-pasteFromWord_keepZeroMargins) configuration option that allows for keeping any `margin-*: 0` style that would be otherwise removed when pasting content with the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#2962](https://github.com/ckeditor/ckeditor4/issues/2962): Added the [`CKEDITOR.tools.promise`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_promise.html) class. +* [#2924](https://github.com/ckeditor/ckeditor4/issues/2924): Added the [`CKEDITOR.tools.style.border`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_border.html) object wrapping CSS border style helpers under a single type. +* [#2495](https://github.com/ckeditor/ckeditor4/issues/2495): The [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin can now be disabled for the given table with the `data-cke-tableselection-ignored` attribute. +* [#2692](https://github.com/ckeditor/ckeditor4/issues/2692): Plugins can now expose information about the supported environment by implementing the [`pluginDefinition.isSupportedEnvironment()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#method-isSupportedEnvironment) method. Other Changes: -* [#2741](https://github.com/ckeditor/ckeditor-dev/issues/2741): Replaced deprecated `arguments.callee` calls with named function expressions to allow the editor to work in strict mode. -* [#2924](https://github.com/ckeditor/ckeditor-dev/issues/2924): Marked [`CKEDITOR.tools.style.parse.border()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html#method-border) as deprecated in favor of the [`CKEDITOR.tools.style.border.fromCssRule()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_border.html#static-method-fromCssRule) method. -* [#3132](https://github.com/ckeditor/ckeditor-dev/issues/2924): Marked [`CKEDITOR.tools.objectKeys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-objectKeys) as deprecated in favor of the [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method. +* [#2741](https://github.com/ckeditor/ckeditor4/issues/2741): Replaced deprecated `arguments.callee` calls with named function expressions to allow the editor to work in strict mode. +* [#2924](https://github.com/ckeditor/ckeditor4/issues/2924): Marked [`CKEDITOR.tools.style.parse.border()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html#method-border) as deprecated in favor of the [`CKEDITOR.tools.style.border.fromCssRule()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_border.html#static-method-fromCssRule) method. +* [#3132](https://github.com/ckeditor/ckeditor4/issues/2924): Marked [`CKEDITOR.tools.objectKeys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-objectKeys) as deprecated in favor of the [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method. ## CKEditor 4.11.4 Fixed Issues: -* [#589](https://github.com/ckeditor/ckeditor-dev/issues/589): Fixed: The editor causes memory leaks in create and destroy cycles. -* [#1397](https://github.com/ckeditor/ckeditor-dev/issues/1397): Fixed: Using the dialog to remove headers from a [table](https://ckeditor.com/cke4/addon/table) with one header row only throws an error. -* [#1479](https://github.com/ckeditor/ckeditor-dev/issues/1479): Fixed: [Justification](https://ckeditor.com/cke4/addon/justify) for styled content in BR mode is disabled. -* [#2816](https://github.com/ckeditor/ckeditor-dev/issues/2816): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) resize handler is visible in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). -* [#2874](https://github.com/ckeditor/ckeditor-dev/issues/2874): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) resize handler is not created when the editor is initialized in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). -* [#2775](https://github.com/ckeditor/ckeditor-dev/issues/2775): Fixed: [Clipboard](https://ckeditor.com/cke4/addon/clipboard) paste buttons have wrong state when [read-only](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html) mode is set by the mouse event listener with the [Div Editing Area](https://ckeditor.com/cke4/addon/divarea) plugin. -* [#1901](https://github.com/ckeditor/ckeditor-dev/issues/1901): Fixed: Cannot open the context menu over a [Widget](https://ckeditor.com/cke4/addon/widget) with the <kbd>Shift</kbd>+<kbd>F10</kbd> keyboard shortcut. +* [#589](https://github.com/ckeditor/ckeditor4/issues/589): Fixed: The editor causes memory leaks in create and destroy cycles. +* [#1397](https://github.com/ckeditor/ckeditor4/issues/1397): Fixed: Using the dialog to remove headers from a [table](https://ckeditor.com/cke4/addon/table) with one header row only throws an error. +* [#1479](https://github.com/ckeditor/ckeditor4/issues/1479): Fixed: [Justification](https://ckeditor.com/cke4/addon/justify) for styled content in BR mode is disabled. +* [#2816](https://github.com/ckeditor/ckeditor4/issues/2816): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) resize handler is visible in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). +* [#2874](https://github.com/ckeditor/ckeditor4/issues/2874): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) resize handler is not created when the editor is initialized in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). +* [#2775](https://github.com/ckeditor/ckeditor4/issues/2775): Fixed: [Clipboard](https://ckeditor.com/cke4/addon/clipboard) paste buttons have wrong state when [read-only](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html) mode is set by the mouse event listener with the [Div Editing Area](https://ckeditor.com/cke4/addon/divarea) plugin. +* [#1901](https://github.com/ckeditor/ckeditor4/issues/1901): Fixed: Cannot open the context menu over a [Widget](https://ckeditor.com/cke4/addon/widget) with the <kbd>Shift</kbd>+<kbd>F10</kbd> keyboard shortcut. Other Changes: @@ -142,45 +208,45 @@ Other Changes: Fixed Issues: -* [#2721](https://github.com/ckeditor/ckeditor-dev/issues/2721), [#487](https://github.com/ckeditor/ckeditor-dev/issues/487): Fixed: The order of sublist items is reversed when a higher level list item is removed. -* [#2527](https://github.com/ckeditor/ckeditor-dev/issues/2527): Fixed: [Emoji](https://ckeditor.com/cke4/addon/emoji) autocomplete order does not prioritize emojis with the name starting from the used string. -* [#2572](https://github.com/ckeditor/ckeditor-dev/issues/2572): Fixed: Icons in the [Emoji](https://ckeditor.com/cke4/addon/emoji) dropdown navigation groups are not centered. -* [#1191](https://github.com/ckeditor/ckeditor-dev/issues/1191): Fixed: Items in the [elements path](https://ckeditor.com/cke4/addon/elementspath) are draggable. -* [#2292](https://github.com/ckeditor/ckeditor-dev/issues/2292): Fixed: Dropping a list with a link on the editor's margin causes a console error and removes the dragged text from editor. -* [#2756](https://github.com/ckeditor/ckeditor-dev/issues/2756): Fixed: The [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin causes an error when typing in the [source editing mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_sourcearea.html). -* [#1986](https://github.com/ckeditor/ckeditor-dev/issues/1986): Fixed: The Cell Properties dialog from the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin shows styles that are not allowed through [`config.allowedContent`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-allowedContent). -* [#2565](https://github.com/ckeditor/ckeditor-dev/issues/2565): [IE, Edge] Fixed: Buttons in the [editor toolbar](https://ckeditor.com/cke4/addon/toolbar) are activated by clicking them with the right mouse button. -* [#2792](https://github.com/ckeditor/ckeditor-dev/pull/2792): Fixed: A bug in the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin that caused the following issues: - * [#2780](https://github.com/ckeditor/ckeditor-dev/issues/2780): Fixed: Undo steps disappear after multiple changes of selection. - * [#2470](https://github.com/ckeditor/ckeditor-dev/issues/2470): [Firefox] Fixed: Widget's nested editable gets blurred upon focus. - * [#2655](https://github.com/ckeditor/ckeditor-dev/issues/2655): [Chrome, Safari] Fixed: Widget's nested editable cannot be focused under certain circumstances. +* [#2721](https://github.com/ckeditor/ckeditor4/issues/2721), [#487](https://github.com/ckeditor/ckeditor4/issues/487): Fixed: The order of sublist items is reversed when a higher level list item is removed. +* [#2527](https://github.com/ckeditor/ckeditor4/issues/2527): Fixed: [Emoji](https://ckeditor.com/cke4/addon/emoji) autocomplete order does not prioritize emojis with the name starting from the used string. +* [#2572](https://github.com/ckeditor/ckeditor4/issues/2572): Fixed: Icons in the [Emoji](https://ckeditor.com/cke4/addon/emoji) dropdown navigation groups are not centered. +* [#1191](https://github.com/ckeditor/ckeditor4/issues/1191): Fixed: Items in the [elements path](https://ckeditor.com/cke4/addon/elementspath) are draggable. +* [#2292](https://github.com/ckeditor/ckeditor4/issues/2292): Fixed: Dropping a list with a link on the editor's margin causes a console error and removes the dragged text from editor. +* [#2756](https://github.com/ckeditor/ckeditor4/issues/2756): Fixed: The [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin causes an error when typing in the [source editing mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_sourcearea.html). +* [#1986](https://github.com/ckeditor/ckeditor4/issues/1986): Fixed: The Cell Properties dialog from the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin shows styles that are not allowed through [`config.allowedContent`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-allowedContent). +* [#2565](https://github.com/ckeditor/ckeditor4/issues/2565): [IE, Edge] Fixed: Buttons in the [editor toolbar](https://ckeditor.com/cke4/addon/toolbar) are activated by clicking them with the right mouse button. +* [#2792](https://github.com/ckeditor/ckeditor4/pull/2792): Fixed: A bug in the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin that caused the following issues: + * [#2780](https://github.com/ckeditor/ckeditor4/issues/2780): Fixed: Undo steps disappear after multiple changes of selection. + * [#2470](https://github.com/ckeditor/ckeditor4/issues/2470): [Firefox] Fixed: Widget's nested editable gets blurred upon focus. + * [#2655](https://github.com/ckeditor/ckeditor4/issues/2655): [Chrome, Safari] Fixed: Widget's nested editable cannot be focused under certain circumstances. ## CKEditor 4.11.2 Fixed Issues: -* [#2403](https://github.com/ckeditor/ckeditor-dev/issues/2403): Fixed: Styling inline editor initialized inside a table with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is causing style leaks. -* [#2514](https://github.com/ckeditor/ckeditor-dev/issues/2403): Fixed: Pasting table data into inline editor initialized inside a table with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin inserts pasted content into the wrapping table. -* [#2451](https://github.com/ckeditor/ckeditor-dev/issues/2451): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin changes selection. -* [#2546](https://github.com/ckeditor/ckeditor-dev/issues/2546): Fixed: The separator in the toolbar moves when buttons are focused. -* [#2506](https://github.com/ckeditor/ckeditor-dev/issues/2506): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) throws a type error when an empty `<figure>` tag with an `image` class is upcasted. -* [#2650](https://github.com/ckeditor/ckeditor-dev/issues/2650): Fixed: [Table](https://ckeditor.com/cke4/addon/table) dialog validator fails when the `getValue()` function is defined in the global scope. -* [#2690](https://github.com/ckeditor/ckeditor-dev/issues/2690): Fixed: Decimal characters are removed from the inside of numbered lists when pasting content using the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#2205](https://github.com/ckeditor/ckeditor-dev/issues/2205): Fixed: It is not possible to add new list items under an item containing a block element. -* [#2411](https://github.com/ckeditor/ckeditor-dev/issues/2411), [#2438](https://github.com/ckeditor/ckeditor-dev/issues/2438) Fixed: Apply numbered list option throws a console error for a specific markup. -* [#2430](https://github.com/ckeditor/ckeditor-dev/issues/2430) Fixed: [Color Button](https://ckeditor.com/cke4/addon/colorbutton) and [List Block](https://ckeditor.com/cke4/addon/listblock) items are draggable. +* [#2403](https://github.com/ckeditor/ckeditor4/issues/2403): Fixed: Styling inline editor initialized inside a table with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is causing style leaks. +* [#2514](https://github.com/ckeditor/ckeditor4/issues/2403): Fixed: Pasting table data into inline editor initialized inside a table with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin inserts pasted content into the wrapping table. +* [#2451](https://github.com/ckeditor/ckeditor4/issues/2451): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin changes selection. +* [#2546](https://github.com/ckeditor/ckeditor4/issues/2546): Fixed: The separator in the toolbar moves when buttons are focused. +* [#2506](https://github.com/ckeditor/ckeditor4/issues/2506): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) throws a type error when an empty `<figure>` tag with an `image` class is upcasted. +* [#2650](https://github.com/ckeditor/ckeditor4/issues/2650): Fixed: [Table](https://ckeditor.com/cke4/addon/table) dialog validator fails when the `getValue()` function is defined in the global scope. +* [#2690](https://github.com/ckeditor/ckeditor4/issues/2690): Fixed: Decimal characters are removed from the inside of numbered lists when pasting content using the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#2205](https://github.com/ckeditor/ckeditor4/issues/2205): Fixed: It is not possible to add new list items under an item containing a block element. +* [#2411](https://github.com/ckeditor/ckeditor4/issues/2411), [#2438](https://github.com/ckeditor/ckeditor4/issues/2438) Fixed: Apply numbered list option throws a console error for a specific markup. +* [#2430](https://github.com/ckeditor/ckeditor4/issues/2430) Fixed: [Color Button](https://ckeditor.com/cke4/addon/colorbutton) and [List Block](https://ckeditor.com/cke4/addon/listblock) items are draggable. Other Changes: * Updated the [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) (WSC) plugin: * [#52](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/52) Fixed: Clicking "Finish Checking" without a prior action would hang the Spell Checking dialog. -* [#2603](https://github.com/ckeditor/ckeditor-dev/issues/2603): Corrected the GPL license entry in the `package.json` file. +* [#2603](https://github.com/ckeditor/ckeditor4/issues/2603): Corrected the GPL license entry in the `package.json` file. ## CKEditor 4.11.1 Fixed Issues: -* [#2571](https://github.com/ckeditor/ckeditor-dev/issues/2571): Fixed: Clicking the categories in the [Emoji](https://ckeditor.com/cke4/addon/emoji) dropdown panel scrolls the entire page. +* [#2571](https://github.com/ckeditor/ckeditor4/issues/2571): Fixed: Clicking the categories in the [Emoji](https://ckeditor.com/cke4/addon/emoji) dropdown panel scrolls the entire page. ## CKEditor 4.11 @@ -194,119 +260,119 @@ Fixed Issues: New Features: -* [#2062](https://github.com/ckeditor/ckeditor-dev/pull/2062): Added the emoji dropdown that allows the user to choose the emoji from the toolbar and search for them using keywords. -* [#2154](https://github.com/ckeditor/ckeditor-dev/issues/2154): The [Link](https://ckeditor.com/cke4/addon/link) plugin now supports phone number links. -* [#1815](https://github.com/ckeditor/ckeditor-dev/issues/1815): The [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin supports typing link completion. -* [#2478](https://github.com/ckeditor/ckeditor-dev/issues/2478): [Link](https://ckeditor.com/cke4/addon/link) can be inserted using the <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>K</kbd> keystroke. -* [#651](https://github.com/ckeditor/ckeditor-dev/issues/651): Text pasted using the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin preserves indentation in paragraphs. -* [#2248](https://github.com/ckeditor/ckeditor-dev/issues/2248): Added support for justification in the [BBCode](https://ckeditor.com/cke4/addon/bbcode) plugin. Thanks to [Matěj Kmínek](https://github.com/KminekMatej)! -* [#706](https://github.com/ckeditor/ckeditor-dev/issues/706): Added a different cursor style when selecting cells for the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. -* [#2072](https://github.com/ckeditor/ckeditor-dev/issues/2072): The [UI Button](https://ckeditor.com/cke4/addon/button) plugin supports custom `aria-haspopup` property values. The [Menu Button](https://ckeditor.com/cke4/addon/menubutton) `aria-haspopup` value is now `menu`, the [Panel Button](https://ckeditor.com/cke4/addon/panelbutton) and [Rich Combo](https://ckeditor.com/cke4/addon/richcombo) `aria-haspopup` value is now `listbox`. -* [#1176](https://github.com/ckeditor/ckeditor-dev/pull/1176): The [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) can now be attached to a selection instead of an element. -* [#2202](https://github.com/ckeditor/ckeditor-dev/issues/2202): Added the `contextmenu_contentsCss` configuration option to allow adding custom CSS to the [Context Menu](https://ckeditor.com/cke4/addon/contextmenu). +* [#2062](https://github.com/ckeditor/ckeditor4/pull/2062): Added the emoji dropdown that allows the user to choose the emoji from the toolbar and search for them using keywords. +* [#2154](https://github.com/ckeditor/ckeditor4/issues/2154): The [Link](https://ckeditor.com/cke4/addon/link) plugin now supports phone number links. +* [#1815](https://github.com/ckeditor/ckeditor4/issues/1815): The [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin supports typing link completion. +* [#2478](https://github.com/ckeditor/ckeditor4/issues/2478): [Link](https://ckeditor.com/cke4/addon/link) can be inserted using the <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>K</kbd> keystroke. +* [#651](https://github.com/ckeditor/ckeditor4/issues/651): Text pasted using the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin preserves indentation in paragraphs. +* [#2248](https://github.com/ckeditor/ckeditor4/issues/2248): Added support for justification in the [BBCode](https://ckeditor.com/cke4/addon/bbcode) plugin. Thanks to [Matěj Kmínek](https://github.com/KminekMatej)! +* [#706](https://github.com/ckeditor/ckeditor4/issues/706): Added a different cursor style when selecting cells for the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. +* [#2072](https://github.com/ckeditor/ckeditor4/issues/2072): The [UI Button](https://ckeditor.com/cke4/addon/button) plugin supports custom `aria-haspopup` property values. The [Menu Button](https://ckeditor.com/cke4/addon/menubutton) `aria-haspopup` value is now `menu`, the [Panel Button](https://ckeditor.com/cke4/addon/panelbutton) and [Rich Combo](https://ckeditor.com/cke4/addon/richcombo) `aria-haspopup` value is now `listbox`. +* [#1176](https://github.com/ckeditor/ckeditor4/pull/1176): The [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) can now be attached to a selection instead of an element. +* [#2202](https://github.com/ckeditor/ckeditor4/issues/2202): Added the `contextmenu_contentsCss` configuration option to allow adding custom CSS to the [Context Menu](https://ckeditor.com/cke4/addon/contextmenu). Fixed Issues: -* [#1477](https://github.com/ckeditor/ckeditor-dev/issues/1477): Fixed: On destroy, [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) does not destroy its content. -* [#2394](https://github.com/ckeditor/ckeditor-dev/issues/2394): Fixed: [Emoji](https://ckeditor.com/cke4/addon/emoji) dropdown does not show up with repeated symbols in a single line. -* [#1181](https://github.com/ckeditor/ckeditor-dev/issues/1181): [Chrome] Fixed: Opening the context menu in a read-only editor results in an error. -* [#2276](https://github.com/ckeditor/ckeditor-dev/issues/2276): [iOS] Fixed: [Button](https://ckeditor.com/cke4/addon/button) state does not refresh properly. -* [#1489](https://github.com/ckeditor/ckeditor-dev/issues/1489): Fixed: Table contents can be removed in read-only mode when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is used. -* [#1264](https://github.com/ckeditor/ckeditor-dev/issues/1264) Fixed: Right-click does not clear the selection created with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. -* [#586](https://github.com/ckeditor/ckeditor-dev/issues/586) Fixed: The `required` attribute is not correctly recognized by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin dialog. Thanks to [Roli Züger](https://github.com/rzueger)! -* [#2380](https://github.com/ckeditor/ckeditor-dev/issues/2380) Fixed: Styling HTML comments in a top-level element results in extra paragraphs. -* [#2294](https://github.com/ckeditor/ckeditor-dev/issues/2294) Fixed: Pasting content from Microsoft Outlook and then bolding it results in an error. -* [#2035](https://github.com/ckeditor/ckeditor-dev/issues/2035) [Edge] Fixed: `Permission denied` is thrown when opening a [Panel](https://ckeditor.com/cke4/addon/panel) instance. -* [#965](https://github.com/ckeditor/ckeditor-dev/issues/965) Fixed: The [`config.forceSimpleAmpersand`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-forceSimpleAmpersand) option does not work. Thanks to [Alex Maris](https://github.com/alexmaris)! -* [#2448](https://github.com/ckeditor/ckeditor-dev/issues/2448): Fixed: The [`Escape HTML Entities`] plugin with custom [additional entities](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-entities_additional) configuration breaks HTML escaping. -* [#898](https://github.com/ckeditor/ckeditor-dev/issues/898): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) long alternative text protrudes into the editor when the image is selected. -* [#1113](https://github.com/ckeditor/ckeditor-dev/issues/1113): [Firefox] Fixed: Nested contenteditable elements path is not updated on focus with the [Div Editing Area](https://ckeditor.com/cke4/addon/divarea) plugin. -* [#1682](https://github.com/ckeditor/ckeditor-dev/issues/1682) Fixed: Hovering the [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) panel changes its size, causing flickering. -* [#421](https://github.com/ckeditor/ckeditor-dev/issues/421) Fixed: Expandable [Button](https://ckeditor.com/cke4/addon/button) puts the `(Selected)` text at the end of the label when clicked. -* [#1454](https://github.com/ckeditor/ckeditor-dev/issues/1454): Fixed: The [`onAbort`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-onAbort) method of the [Upload Widget](https://ckeditor.com/cke4/addon/uploadwidget) is not called when the loader is aborted. -* [#1451](https://github.com/ckeditor/ckeditor-dev/issues/1451): Fixed: The context menu is incorrectly positioned when opened with <kbd>Shift</kbd>+<kbd>F10</kbd>. -* [#1722](https://github.com/ckeditor/ckeditor-dev/issues/1722): [`CKEDITOR.filter.instances`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_filter.html#static-property-instances) is causing memory leaks. -* [#2491](https://github.com/ckeditor/ckeditor-dev/issues/2491): Fixed: The [Mentions](https://ckeditor.com/cke4/addon/mentions) plugin is not matching diacritic characters. -* [#2519](https://github.com/ckeditor/ckeditor-dev/issues/2519): Fixed: The [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) dialog should display all available keystrokes for a single command. +* [#1477](https://github.com/ckeditor/ckeditor4/issues/1477): Fixed: On destroy, [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) does not destroy its content. +* [#2394](https://github.com/ckeditor/ckeditor4/issues/2394): Fixed: [Emoji](https://ckeditor.com/cke4/addon/emoji) dropdown does not show up with repeated symbols in a single line. +* [#1181](https://github.com/ckeditor/ckeditor4/issues/1181): [Chrome] Fixed: Opening the context menu in a read-only editor results in an error. +* [#2276](https://github.com/ckeditor/ckeditor4/issues/2276): [iOS] Fixed: [Button](https://ckeditor.com/cke4/addon/button) state does not refresh properly. +* [#1489](https://github.com/ckeditor/ckeditor4/issues/1489): Fixed: Table contents can be removed in read-only mode when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is used. +* [#1264](https://github.com/ckeditor/ckeditor4/issues/1264) Fixed: Right-click does not clear the selection created with the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. +* [#586](https://github.com/ckeditor/ckeditor4/issues/586) Fixed: The `required` attribute is not correctly recognized by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin dialog. Thanks to [Roli Züger](https://github.com/rzueger)! +* [#2380](https://github.com/ckeditor/ckeditor4/issues/2380) Fixed: Styling HTML comments in a top-level element results in extra paragraphs. +* [#2294](https://github.com/ckeditor/ckeditor4/issues/2294) Fixed: Pasting content from Microsoft Outlook and then bolding it results in an error. +* [#2035](https://github.com/ckeditor/ckeditor4/issues/2035) [Edge] Fixed: `Permission denied` is thrown when opening a [Panel](https://ckeditor.com/cke4/addon/panel) instance. +* [#965](https://github.com/ckeditor/ckeditor4/issues/965) Fixed: The [`config.forceSimpleAmpersand`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-forceSimpleAmpersand) option does not work. Thanks to [Alex Maris](https://github.com/alexmaris)! +* [#2448](https://github.com/ckeditor/ckeditor4/issues/2448): Fixed: The [`Escape HTML Entities`] plugin with custom [additional entities](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-entities_additional) configuration breaks HTML escaping. +* [#898](https://github.com/ckeditor/ckeditor4/issues/898): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) long alternative text protrudes into the editor when the image is selected. +* [#1113](https://github.com/ckeditor/ckeditor4/issues/1113): [Firefox] Fixed: Nested contenteditable elements path is not updated on focus with the [Div Editing Area](https://ckeditor.com/cke4/addon/divarea) plugin. +* [#1682](https://github.com/ckeditor/ckeditor4/issues/1682) Fixed: Hovering the [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) panel changes its size, causing flickering. +* [#421](https://github.com/ckeditor/ckeditor4/issues/421) Fixed: Expandable [Button](https://ckeditor.com/cke4/addon/button) puts the `(Selected)` text at the end of the label when clicked. +* [#1454](https://github.com/ckeditor/ckeditor4/issues/1454): Fixed: The [`onAbort`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-onAbort) method of the [Upload Widget](https://ckeditor.com/cke4/addon/uploadwidget) is not called when the loader is aborted. +* [#1451](https://github.com/ckeditor/ckeditor4/issues/1451): Fixed: The context menu is incorrectly positioned when opened with <kbd>Shift</kbd>+<kbd>F10</kbd>. +* [#1722](https://github.com/ckeditor/ckeditor4/issues/1722): [`CKEDITOR.filter.instances`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_filter.html#static-property-instances) is causing memory leaks. +* [#2491](https://github.com/ckeditor/ckeditor4/issues/2491): Fixed: The [Mentions](https://ckeditor.com/cke4/addon/mentions) plugin is not matching diacritic characters. +* [#2519](https://github.com/ckeditor/ckeditor4/issues/2519): Fixed: The [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) dialog should display all available keystrokes for a single command. API Changes: -* [#2453](https://github.com/ckeditor/ckeditor-dev/issues/2453): The [`CKEDITOR.ui.panel.block.getItems`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_panel_block.html#method-getItems) method now also returns `input` elements in addition to links. -* [#2224](https://github.com/ckeditor/ckeditor-dev/issues/2224): The [`CKEDITOR.tools.convertToPx`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-convertToPx) function now converts negative values. -* [#2253](https://github.com/ckeditor/ckeditor-dev/issues/2253): The widget definition [`insert`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-insert) method now passes `editor` and `commandData`. Thanks to [marcparmet](https://github.com/marcparmet)! -* [#2045](https://github.com/ckeditor/ckeditor-dev/issues/2045): Extracted [`tools.eventsBuffer`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-eventsBuffer) and [`tools.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) functions logic into a separate namespace. +* [#2453](https://github.com/ckeditor/ckeditor4/issues/2453): The [`CKEDITOR.ui.panel.block.getItems`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_panel_block.html#method-getItems) method now also returns `input` elements in addition to links. +* [#2224](https://github.com/ckeditor/ckeditor4/issues/2224): The [`CKEDITOR.tools.convertToPx`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-convertToPx) function now converts negative values. +* [#2253](https://github.com/ckeditor/ckeditor4/issues/2253): The widget definition [`insert`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-insert) method now passes `editor` and `commandData`. Thanks to [marcparmet](https://github.com/marcparmet)! +* [#2045](https://github.com/ckeditor/ckeditor4/issues/2045): Extracted [`tools.eventsBuffer`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-eventsBuffer) and [`tools.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) functions logic into a separate namespace. * [`tools.eventsBuffer`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-eventsBuffer) was extracted into [`tools.buffers.event`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_buffers_event.html), * [`tools.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) was extracted into [`tools.buffers.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_buffers_throttle.html). -* [#2466](https://github.com/ckeditor/ckeditor-dev/issues/2466): The [`CKEDITOR.filter`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-constructor) constructor accepts an additional `rules` parameter allowing to bind the editor and filter together. -* [#2493](https://github.com/ckeditor/ckeditor-dev/issues/2493): The [`editor.getCommandKeystroke`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getCommandKeystroke) method accepts an additional `all` parameter allowing to retrieve an array of all command keystrokes. -* [#2483](https://github.com/ckeditor/ckeditor-dev/issues/2483): Button's DOM element created with the [`hasArrow`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui.html#method-addButton) definition option can by identified by the `.cke_button_expandable` CSS class. +* [#2466](https://github.com/ckeditor/ckeditor4/issues/2466): The [`CKEDITOR.filter`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-constructor) constructor accepts an additional `rules` parameter allowing to bind the editor and filter together. +* [#2493](https://github.com/ckeditor/ckeditor4/issues/2493): The [`editor.getCommandKeystroke`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getCommandKeystroke) method accepts an additional `all` parameter allowing to retrieve an array of all command keystrokes. +* [#2483](https://github.com/ckeditor/ckeditor4/issues/2483): Button's DOM element created with the [`hasArrow`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui.html#method-addButton) definition option can by identified by the `.cke_button_expandable` CSS class. Other Changes: -* [#1713](https://github.com/ckeditor/ckeditor-dev/issues/1713): Removed the redundant `lang.title` entry from the [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin. +* [#1713](https://github.com/ckeditor/ckeditor4/issues/1713): Removed the redundant `lang.title` entry from the [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin. ## CKEditor 4.10.1 Fixed Issues: -* [#2114](https://github.com/ckeditor/ckeditor-dev/issues/2114): Fixed: [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) cannot be initialized before [`instanceReady`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-instanceReady). -* [#2107](https://github.com/ckeditor/ckeditor-dev/issues/2107): Fixed: Holding and releasing the mouse button is not inserting an [autocomplete](https://ckeditor.com/cke4/addon/autocomplete) suggestion. -* [#2167](https://github.com/ckeditor/ckeditor-dev/issues/2167): Fixed: Matching in [Emoji](https://ckeditor.com/cke4/addon/emoji) plugin is not case insensitive. -* [#2195](https://github.com/ckeditor/ckeditor-dev/issues/2195): Fixed: [Emoji](https://ckeditor.com/cke4/addon/emoji) shows the suggestion box when the colon is preceded with other characters than white space. -* [#2169](https://github.com/ckeditor/ckeditor-dev/issues/2169): [Edge] Fixed: Error thrown when pasting into the editor. -* [#1084](https://github.com/ckeditor/ckeditor-dev/issues/1084) Fixed: Using the "Automatic" option with [Color Button](https://ckeditor.com/cke4/addon/colorbutton) on a text with the color already defined sets an invalid color value. -* [#2271](https://github.com/ckeditor/ckeditor-dev/issues/2271): Fixed: Custom color name not used as a label in the [Color Button](https://ckeditor.com/cke4/addon/image2) plugin. Thanks to [Eric Geloen](https://github.com/egeloen)! -* [#2296](https://github.com/ckeditor/ckeditor-dev/issues/2296): Fixed: The [Color Button](https://ckeditor.com/cke4/addon/colorbutton) plugin throws an error when activated on content containing HTML comments. -* [#966](https://github.com/ckeditor/ckeditor-dev/issues/966): Fixed: Executing [`editor.destroy()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-destroy) during the [file upload](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-onUploading) throws an error. Thanks to [Maksim Makarevich](https://github.com/MaksimMakarevich)! -* [#1719](https://github.com/ckeditor/ckeditor-dev/issues/1719): Fixed: <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>A</kbd> inadvertently focuses inline editor if it is starting and ending with a list. Thanks to [theNailz](https://github.com/theNailz)! -* [#1046](https://github.com/ckeditor/ckeditor-dev/issues/1046): Fixed: Subsequent new links do not include the `id` attribute. Thanks to [Nathan Samson](https://github.com/nathansamson)! -* [#1348](https://github.com/ckeditor/ckeditor-dev/issues/1348): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin aspect ratio locking uses an old width and height on image URL change. -* [#1791](https://github.com/ckeditor/ckeditor-dev/issues/1791): Fixed: [Image](https://ckeditor.com/cke4/addon/image) and [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugins can be enabled when [Easy Image](https://ckeditor.com/cke4/addon/easyimage) is present. -* [#2254](https://github.com/ckeditor/ckeditor-dev/issues/2254): Fixed: [Image](https://ckeditor.com/cke4/addon/image) ratio locking is too precise for resized images. Thanks to [Jonathan Gilbert](https://github.com/logiclrd)! -* [#1184](https://github.com/ckeditor/ckeditor-dev/issues/1184): [IE8-11] Fixed: Copying and pasting data in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly) throws an error. -* [#1916](https://github.com/ckeditor/ckeditor-dev/issues/1916): [IE9-11] Fixed: Pressing the <kbd>Delete</kbd> key in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly) throws an error. -* [#2003](https://github.com/ckeditor/ckeditor-dev/issues/2003): [Firefox] Fixed: Right-clicking multiple selected table cells containing empty paragraphs removes the selection. -* [#1816](https://github.com/ckeditor/ckeditor-dev/issues/1816): Fixed: Table breaks when <kbd>Enter</kbd> is pressed over the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. -* [#1115](https://github.com/ckeditor/ckeditor-dev/issues/1115): Fixed: The `<font>` tag is not preserved when proper configuration is provided and a style is applied by the [Font](https://ckeditor.com/cke4/addon/font) plugin. -* [#727](https://github.com/ckeditor/ckeditor-dev/issues/727): Fixed: Custom styles may be invisible in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin. -* [#988](https://github.com/ckeditor/ckeditor-dev/issues/988): Fixed: ACF-enabled custom elements prefixed with `object`, `embed`, `param` are removed from the editor content. +* [#2114](https://github.com/ckeditor/ckeditor4/issues/2114): Fixed: [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) cannot be initialized before [`instanceReady`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-instanceReady). +* [#2107](https://github.com/ckeditor/ckeditor4/issues/2107): Fixed: Holding and releasing the mouse button is not inserting an [autocomplete](https://ckeditor.com/cke4/addon/autocomplete) suggestion. +* [#2167](https://github.com/ckeditor/ckeditor4/issues/2167): Fixed: Matching in [Emoji](https://ckeditor.com/cke4/addon/emoji) plugin is not case insensitive. +* [#2195](https://github.com/ckeditor/ckeditor4/issues/2195): Fixed: [Emoji](https://ckeditor.com/cke4/addon/emoji) shows the suggestion box when the colon is preceded with other characters than white space. +* [#2169](https://github.com/ckeditor/ckeditor4/issues/2169): [Edge] Fixed: Error thrown when pasting into the editor. +* [#1084](https://github.com/ckeditor/ckeditor4/issues/1084) Fixed: Using the "Automatic" option with [Color Button](https://ckeditor.com/cke4/addon/colorbutton) on a text with the color already defined sets an invalid color value. +* [#2271](https://github.com/ckeditor/ckeditor4/issues/2271): Fixed: Custom color name not used as a label in the [Color Button](https://ckeditor.com/cke4/addon/image2) plugin. Thanks to [Eric Geloen](https://github.com/egeloen)! +* [#2296](https://github.com/ckeditor/ckeditor4/issues/2296): Fixed: The [Color Button](https://ckeditor.com/cke4/addon/colorbutton) plugin throws an error when activated on content containing HTML comments. +* [#966](https://github.com/ckeditor/ckeditor4/issues/966): Fixed: Executing [`editor.destroy()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-destroy) during the [file upload](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-onUploading) throws an error. Thanks to [Maksim Makarevich](https://github.com/MaksimMakarevich)! +* [#1719](https://github.com/ckeditor/ckeditor4/issues/1719): Fixed: <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>A</kbd> inadvertently focuses inline editor if it is starting and ending with a list. Thanks to [theNailz](https://github.com/theNailz)! +* [#1046](https://github.com/ckeditor/ckeditor4/issues/1046): Fixed: Subsequent new links do not include the `id` attribute. Thanks to [Nathan Samson](https://github.com/nathansamson)! +* [#1348](https://github.com/ckeditor/ckeditor4/issues/1348): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin aspect ratio locking uses an old width and height on image URL change. +* [#1791](https://github.com/ckeditor/ckeditor4/issues/1791): Fixed: [Image](https://ckeditor.com/cke4/addon/image) and [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugins can be enabled when [Easy Image](https://ckeditor.com/cke4/addon/easyimage) is present. +* [#2254](https://github.com/ckeditor/ckeditor4/issues/2254): Fixed: [Image](https://ckeditor.com/cke4/addon/image) ratio locking is too precise for resized images. Thanks to [Jonathan Gilbert](https://github.com/logiclrd)! +* [#1184](https://github.com/ckeditor/ckeditor4/issues/1184): [IE8-11] Fixed: Copying and pasting data in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly) throws an error. +* [#1916](https://github.com/ckeditor/ckeditor4/issues/1916): [IE9-11] Fixed: Pressing the <kbd>Delete</kbd> key in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly) throws an error. +* [#2003](https://github.com/ckeditor/ckeditor4/issues/2003): [Firefox] Fixed: Right-clicking multiple selected table cells containing empty paragraphs removes the selection. +* [#1816](https://github.com/ckeditor/ckeditor4/issues/1816): Fixed: Table breaks when <kbd>Enter</kbd> is pressed over the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. +* [#1115](https://github.com/ckeditor/ckeditor4/issues/1115): Fixed: The `<font>` tag is not preserved when proper configuration is provided and a style is applied by the [Font](https://ckeditor.com/cke4/addon/font) plugin. +* [#727](https://github.com/ckeditor/ckeditor4/issues/727): Fixed: Custom styles may be invisible in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin. +* [#988](https://github.com/ckeditor/ckeditor4/issues/988): Fixed: ACF-enabled custom elements prefixed with `object`, `embed`, `param` are removed from the editor content. API Changes: -* [#2249](https://github.com/ckeditor/ckeditor-dev/issues/1791): Added the [`editor.plugins.detectConflict()`](https://ckeditor.com/docs/ckeditor4/latest/CKEDITOR_editor_plugins.html#method-detectConflict) method finding conflicts between provided plugins. +* [#2249](https://github.com/ckeditor/ckeditor4/issues/1791): Added the [`editor.plugins.detectConflict()`](https://ckeditor.com/docs/ckeditor4/latest/CKEDITOR_editor_plugins.html#method-detectConflict) method finding conflicts between provided plugins. ## CKEditor 4.10 New Features: -* [#1751](https://github.com/ckeditor/ckeditor-dev/issues/1751): Introduced the **Autocomplete** feature that consists of the following plugins: +* [#1751](https://github.com/ckeditor/ckeditor4/issues/1751): Introduced the **Autocomplete** feature that consists of the following plugins: * [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) – Provides contextual completion feature for custom text matches based on user input. * [Text Watcher](https://ckeditor.com/cke4/addon/textWatcher) – Checks whether an editor's text change matches the chosen criteria. * [Text Match](https://ckeditor.com/cke4/addon/textMatch) – Allows to search [`CKEDITOR.dom.range`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html) for matching text. -* [#1703](https://github.com/ckeditor/ckeditor-dev/issues/1703): Introduced the [Mentions](https://ckeditor.com/cke4/addon/mentions) plugin providing smart completion feature for custom text matches based on user input starting with a chosen marker character. -* [#1746](https://github.com/ckeditor/ckeditor-dev/issues/1703): Introduced the [Emoji](https://ckeditor.com/cke4/addon/emoji) plugin providing completion feature for emoji ideograms. -* [#1761](https://github.com/ckeditor/ckeditor-dev/issues/1761): The [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin now supports email links. +* [#1703](https://github.com/ckeditor/ckeditor4/issues/1703): Introduced the [Mentions](https://ckeditor.com/cke4/addon/mentions) plugin providing smart completion feature for custom text matches based on user input starting with a chosen marker character. +* [#1746](https://github.com/ckeditor/ckeditor4/issues/1703): Introduced the [Emoji](https://ckeditor.com/cke4/addon/emoji) plugin providing completion feature for emoji ideograms. +* [#1761](https://github.com/ckeditor/ckeditor4/issues/1761): The [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin now supports email links. Fixed Issues: -* [#1458](https://github.com/ckeditor/ckeditor-dev/issues/1458): [Edge] Fixed: After blurring the editor it takes 2 clicks to focus a widget. -* [#1034](https://github.com/ckeditor/ckeditor-dev/issues/1034): Fixed: JAWS leaves forms mode after pressing the <kbd>Enter</kbd> key in an inline editor instance. -* [#1748](https://github.com/ckeditor/ckeditor-dev/pull/1748): Fixed: Missing [`CKEDITOR.dialog.definition.onHide`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_definition.html#property-onHide) API documentation. Thanks to [sunnyone](https://github.com/sunnyone)! -* [#1321](https://github.com/ckeditor/ckeditor-dev/issues/1321): Fixed: Ideographic space character (`\u3000`) is lost when pasting text. -* [#1776](https://github.com/ckeditor/ckeditor-dev/issues/1776): Fixed: Empty caption placeholder of the [Image Base](https://ckeditor.com/cke4/addon/imagebase) plugin is not hidden when blurred. -* [#1592](https://github.com/ckeditor/ckeditor-dev/issues/1592): Fixed: The [Image Base](https://ckeditor.com/cke4/addon/imagebase) plugin caption is not visible after paste. -* [#620](https://github.com/ckeditor/ckeditor-dev/issues/620): Fixed: The [`config.forcePasteAsPlainText`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-forcePasteAsPlainText) option is not respected in internal and cross-editor pasting. -* [#1467](https://github.com/ckeditor/ckeditor-dev/issues/1467): Fixed: The resizing cursor of the [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin appearing in the middle of a merged cell. +* [#1458](https://github.com/ckeditor/ckeditor4/issues/1458): [Edge] Fixed: After blurring the editor it takes 2 clicks to focus a widget. +* [#1034](https://github.com/ckeditor/ckeditor4/issues/1034): Fixed: JAWS leaves forms mode after pressing the <kbd>Enter</kbd> key in an inline editor instance. +* [#1748](https://github.com/ckeditor/ckeditor4/pull/1748): Fixed: Missing [`CKEDITOR.dialog.definition.onHide`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_definition.html#property-onHide) API documentation. Thanks to [sunnyone](https://github.com/sunnyone)! +* [#1321](https://github.com/ckeditor/ckeditor4/issues/1321): Fixed: Ideographic space character (`\u3000`) is lost when pasting text. +* [#1776](https://github.com/ckeditor/ckeditor4/issues/1776): Fixed: Empty caption placeholder of the [Image Base](https://ckeditor.com/cke4/addon/imagebase) plugin is not hidden when blurred. +* [#1592](https://github.com/ckeditor/ckeditor4/issues/1592): Fixed: The [Image Base](https://ckeditor.com/cke4/addon/imagebase) plugin caption is not visible after paste. +* [#620](https://github.com/ckeditor/ckeditor4/issues/620): Fixed: The [`config.forcePasteAsPlainText`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-forcePasteAsPlainText) option is not respected in internal and cross-editor pasting. +* [#1467](https://github.com/ckeditor/ckeditor4/issues/1467): Fixed: The resizing cursor of the [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin appearing in the middle of a merged cell. API Changes: -* [#850](https://github.com/ckeditor/ckeditor-dev/issues/850): Backward incompatibility: Replaced the `replace` dialog from the [Find / Replace](https://ckeditor.com/cke4/addon/find) plugin with a `tabId` option in the `find` command. -* [#1582](https://github.com/ckeditor/ckeditor-dev/issues/1582): The [`CKEDITOR.editor.addCommand()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-addCommand) method can now accept a [`CKEDITOR.command`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_command.html) instance as a parameter. -* [#1712](https://github.com/ckeditor/ckeditor-dev/issues/1712): The [`extraPlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-extraPlugins), [`removePlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-removePlugins) and [`plugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-plugins) configuration options allow whitespace. -* [#1802](https://github.com/ckeditor/ckeditor-dev/issues/1802): The [`extraPlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-extraPlugins), [`removePlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-removePlugins) and [`plugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-plugins) configuration options allow passing plugin names as an array. -* [#1724](https://github.com/ckeditor/ckeditor-dev/issues/1724): Added an option to the [`getClientRect()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-getClientRect) function allowing to retrieve an absolute bounding rectangle of the element, i.e. a position relative to the upper-left corner of the topmost viewport. -* [#1498](https://github.com/ckeditor/ckeditor-dev/issues/1498) : Added a new [`getClientRects()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-getClientRects) method to `CKEDITOR.dom.range`. It returns a list of rectangles for each selected element. -* [#1993](https://github.com/ckeditor/ckeditor-dev/issues/1993): Added the [`CKEDITOR.tools.throttle()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) function. +* [#850](https://github.com/ckeditor/ckeditor4/issues/850): Backward incompatibility: Replaced the `replace` dialog from the [Find / Replace](https://ckeditor.com/cke4/addon/find) plugin with a `tabId` option in the `find` command. +* [#1582](https://github.com/ckeditor/ckeditor4/issues/1582): The [`CKEDITOR.editor.addCommand()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-addCommand) method can now accept a [`CKEDITOR.command`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_command.html) instance as a parameter. +* [#1712](https://github.com/ckeditor/ckeditor4/issues/1712): The [`extraPlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-extraPlugins), [`removePlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-removePlugins) and [`plugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-plugins) configuration options allow whitespace. +* [#1802](https://github.com/ckeditor/ckeditor4/issues/1802): The [`extraPlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-extraPlugins), [`removePlugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-removePlugins) and [`plugins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-plugins) configuration options allow passing plugin names as an array. +* [#1724](https://github.com/ckeditor/ckeditor4/issues/1724): Added an option to the [`getClientRect()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-getClientRect) function allowing to retrieve an absolute bounding rectangle of the element, i.e. a position relative to the upper-left corner of the topmost viewport. +* [#1498](https://github.com/ckeditor/ckeditor4/issues/1498) : Added a new [`getClientRects()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-getClientRects) method to `CKEDITOR.dom.range`. It returns a list of rectangles for each selected element. +* [#1993](https://github.com/ckeditor/ckeditor4/issues/1993): Added the [`CKEDITOR.tools.throttle()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) function. Other Changes: @@ -342,48 +408,48 @@ We would like to thank the [Drupal security team](https://www.drupal.org/drupal- Fixed Issues: -* [#1835](https://github.com/ckeditor/ckeditor-dev/issues/1835): Fixed: Integration between [CKFinder](https://ckeditor.com/ckeditor-4/ckfinder/) and the [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin does not work. +* [#1835](https://github.com/ckeditor/ckeditor4/issues/1835): Fixed: Integration between [CKFinder](https://ckeditor.com/ckeditor-4/ckfinder/) and the [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin does not work. ## CKEditor 4.9 New Features: -* [#932](https://github.com/ckeditor/ckeditor-dev/issues/932): Introduced Easy Image feature for inserting images that are automatically rescaled, optimized, responsive and delivered through a blazing-fast CDN. Three new plugins were added to support it: +* [#932](https://github.com/ckeditor/ckeditor4/issues/932): Introduced Easy Image feature for inserting images that are automatically rescaled, optimized, responsive and delivered through a blazing-fast CDN. Three new plugins were added to support it: * [Easy Image](https://ckeditor.com/cke4/addon/easyimage), * [Cloud Services](https://ckeditor.com/cke4/addon/cloudservices) * [Image Base](https://ckeditor.com/cke4/addon/imagebase) -* [#1338](https://github.com/ckeditor/ckeditor-dev/issues/1338): Keystroke labels are displayed for function keys (like F7, F8). -* [#643](https://github.com/ckeditor/ckeditor-dev/issues/643): The [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin can now upload files using XHR requests. This allows for setting custom HTTP headers using the [`config.fileTools_requestHeaders`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-fileTools_requestHeaders) configuration option. -* [#1365](https://github.com/ckeditor/ckeditor-dev/issues/1365): The [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin uses XHR requests by default. -* [#1399](https://github.com/ckeditor/ckeditor-dev/issues/1399): Added the possibility to set [`CKEDITOR.config.startupFocus`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-startupFocus) as `start` or `end` to specify where the editor focus should be after the initialization. -* [#1441](https://github.com/ckeditor/ckeditor-dev/issues/1441): The [Magic Line](https://ckeditor.com/cke4/addon/magicline) plugin line element can now be identified by the `data-cke-magic-line="1"` attribute. +* [#1338](https://github.com/ckeditor/ckeditor4/issues/1338): Keystroke labels are displayed for function keys (like F7, F8). +* [#643](https://github.com/ckeditor/ckeditor4/issues/643): The [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin can now upload files using XHR requests. This allows for setting custom HTTP headers using the [`config.fileTools_requestHeaders`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-fileTools_requestHeaders) configuration option. +* [#1365](https://github.com/ckeditor/ckeditor4/issues/1365): The [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin uses XHR requests by default. +* [#1399](https://github.com/ckeditor/ckeditor4/issues/1399): Added the possibility to set [`CKEDITOR.config.startupFocus`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-startupFocus) as `start` or `end` to specify where the editor focus should be after the initialization. +* [#1441](https://github.com/ckeditor/ckeditor4/issues/1441): The [Magic Line](https://ckeditor.com/cke4/addon/magicline) plugin line element can now be identified by the `data-cke-magic-line="1"` attribute. Fixed Issues: -* [#595](https://github.com/ckeditor/ckeditor-dev/issues/595): Fixed: Pasting does not work on mobile devices. -* [#869](https://github.com/ckeditor/ckeditor-dev/issues/869): Fixed: Empty selection clears cached clipboard data in the editor. -* [#1419](https://github.com/ckeditor/ckeditor-dev/issues/1419): Fixed: The [Widget Selection](https://ckeditor.com/cke4/addon/widgetselection) plugin selects the editor content with the <kbd>Alt+A</kbd> key combination on Windows. -* [#1274](https://github.com/ckeditor/ckeditor-dev/issues/1274): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) does not match a single selected image using the [`contextDefinition.cssSelector`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_balloontoolbar_contextDefinition.html#property-cssSelector) matcher. -* [#1232](https://github.com/ckeditor/ckeditor-dev/issues/1232): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) buttons should be registered as focusable elements. -* [#1342](https://github.com/ckeditor/ckeditor-dev/issues/1342): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) should be re-positioned after the [`change`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change) event. -* [#1426](https://github.com/ckeditor/ckeditor-dev/issues/1426): [IE8-9] Fixed: Missing [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) background in the [Kama](https://ckeditor.com/cke4/addon/kama) skin. Thanks to [Christian Elmer](https://github.com/keinkurt)! -* [#1470](https://github.com/ckeditor/ckeditor-dev/issues/1470): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) is not visible after drag and drop of a widget it is attached to. -* [#1048](https://github.com/ckeditor/ckeditor-dev/issues/1048): Fixed: [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) is not positioned properly when a margin is added to its non-static parent. -* [#889](https://github.com/ckeditor/ckeditor-dev/issues/889): Fixed: Unclear error message for width and height fields in the [Image](https://ckeditor.com/cke4/addon/image) and [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugins. -* [#859](https://github.com/ckeditor/ckeditor-dev/issues/859): Fixed: Cannot edit a link after a double-click on the text in the link. -* [#1013](https://github.com/ckeditor/ckeditor-dev/issues/1013): Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work correctly with the [`config.forcePasteAsPlainText`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-forcePasteAsPlainText) option. -* [#1356](https://github.com/ckeditor/ckeditor-dev/issues/1356): Fixed: [Border parse function](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html#method-border) does not allow spaces in the color value. -* [#1010](https://github.com/ckeditor/ckeditor-dev/issues/1010): Fixed: The CSS `border` shorthand property was incorrectly expanded ignoring the `border-color` style. -* [#1535](https://github.com/ckeditor/ckeditor-dev/issues/1535): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) mouseover border contrast is insufficient. -* [#1516](https://github.com/ckeditor/ckeditor-dev/issues/1516): Fixed: Fake selection allows removing content in read-only mode using the <kbd>Backspace</kbd> and <kbd>Delete</kbd> keys. -* [#1570](https://github.com/ckeditor/ckeditor-dev/issues/1570): Fixed: Fake selection allows cutting content in read-only mode using the <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>X</kbd> keys. -* [#1363](https://github.com/ckeditor/ckeditor-dev/issues/1363): Fixed: Paste notification is unclear and it might confuse users. +* [#595](https://github.com/ckeditor/ckeditor4/issues/595): Fixed: Pasting does not work on mobile devices. +* [#869](https://github.com/ckeditor/ckeditor4/issues/869): Fixed: Empty selection clears cached clipboard data in the editor. +* [#1419](https://github.com/ckeditor/ckeditor4/issues/1419): Fixed: The [Widget Selection](https://ckeditor.com/cke4/addon/widgetselection) plugin selects the editor content with the <kbd>Alt+A</kbd> key combination on Windows. +* [#1274](https://github.com/ckeditor/ckeditor4/issues/1274): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) does not match a single selected image using the [`contextDefinition.cssSelector`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_balloontoolbar_contextDefinition.html#property-cssSelector) matcher. +* [#1232](https://github.com/ckeditor/ckeditor4/issues/1232): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) buttons should be registered as focusable elements. +* [#1342](https://github.com/ckeditor/ckeditor4/issues/1342): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) should be re-positioned after the [`change`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change) event. +* [#1426](https://github.com/ckeditor/ckeditor4/issues/1426): [IE8-9] Fixed: Missing [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) background in the [Kama](https://ckeditor.com/cke4/addon/kama) skin. Thanks to [Christian Elmer](https://github.com/keinkurt)! +* [#1470](https://github.com/ckeditor/ckeditor4/issues/1470): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) is not visible after drag and drop of a widget it is attached to. +* [#1048](https://github.com/ckeditor/ckeditor4/issues/1048): Fixed: [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) is not positioned properly when a margin is added to its non-static parent. +* [#889](https://github.com/ckeditor/ckeditor4/issues/889): Fixed: Unclear error message for width and height fields in the [Image](https://ckeditor.com/cke4/addon/image) and [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugins. +* [#859](https://github.com/ckeditor/ckeditor4/issues/859): Fixed: Cannot edit a link after a double-click on the text in the link. +* [#1013](https://github.com/ckeditor/ckeditor4/issues/1013): Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work correctly with the [`config.forcePasteAsPlainText`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-forcePasteAsPlainText) option. +* [#1356](https://github.com/ckeditor/ckeditor4/issues/1356): Fixed: [Border parse function](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html#method-border) does not allow spaces in the color value. +* [#1010](https://github.com/ckeditor/ckeditor4/issues/1010): Fixed: The CSS `border` shorthand property was incorrectly expanded ignoring the `border-color` style. +* [#1535](https://github.com/ckeditor/ckeditor4/issues/1535): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) mouseover border contrast is insufficient. +* [#1516](https://github.com/ckeditor/ckeditor4/issues/1516): Fixed: Fake selection allows removing content in read-only mode using the <kbd>Backspace</kbd> and <kbd>Delete</kbd> keys. +* [#1570](https://github.com/ckeditor/ckeditor4/issues/1570): Fixed: Fake selection allows cutting content in read-only mode using the <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>X</kbd> keys. +* [#1363](https://github.com/ckeditor/ckeditor4/issues/1363): Fixed: Paste notification is unclear and it might confuse users. API Changes: -* [#1346](https://github.com/ckeditor/ckeditor-dev/issues/1346): [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) [context manager API](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.plugins.balloontoolbar.contextManager.html) is now available in the [`pluginDefinition.init()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#method-init) method of the [requiring](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#property-requires) plugin. -* [#1530](https://github.com/ckeditor/ckeditor-dev/issues/1530): Added the possibility to use custom icons for [buttons](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_button.html.html). +* [#1346](https://github.com/ckeditor/ckeditor4/issues/1346): [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) [context manager API](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.plugins.balloontoolbar.contextManager.html) is now available in the [`pluginDefinition.init()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#method-init) method of the [requiring](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#property-requires) plugin. +* [#1530](https://github.com/ckeditor/ckeditor4/issues/1530): Added the possibility to use custom icons for [buttons](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_button.html.html). Other Changes: @@ -397,139 +463,139 @@ Other Changes: * Fixed: User Dictionary cannot be created in WSC due to `You already have the dictionary` error. * Fixed: Words with apostrophe `'` on the replacement make the WSC dialog inaccessible. * Fixed: SCAYT/WSC causes the `Uncaught TypeError` error in the browser console. -* [#1337](https://github.com/ckeditor/ckeditor-dev/issues/1337): Updated the samples layout with the new CKEditor 4 logo and color scheme. -* [#1591](https://github.com/ckeditor/ckeditor-dev/issues/1591): CKBuilder and language tools are now downloaded over HTTPS. Thanks to [August Detlefsen](https://github.com/augustd)! +* [#1337](https://github.com/ckeditor/ckeditor4/issues/1337): Updated the samples layout with the new CKEditor 4 logo and color scheme. +* [#1591](https://github.com/ckeditor/ckeditor4/issues/1591): CKBuilder and language tools are now downloaded over HTTPS. Thanks to [August Detlefsen](https://github.com/augustd)! ## CKEditor 4.8 **Important Notes:** -* [#1249](https://github.com/ckeditor/ckeditor-dev/issues/1249): Enabled the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin by default in standard and full presets. Also, it will no longer log an error in case of missing [`config.imageUploadUrl`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-imageUploadUrl) property. +* [#1249](https://github.com/ckeditor/ckeditor4/issues/1249): Enabled the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin by default in standard and full presets. Also, it will no longer log an error in case of missing [`config.imageUploadUrl`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-imageUploadUrl) property. New Features: -* [#933](https://github.com/ckeditor/ckeditor-dev/issues/933): Introduced [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin. -* [#662](https://github.com/ckeditor/ckeditor-dev/issues/662): Introduced image inlining for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#468](https://github.com/ckeditor/ckeditor-dev/issues/468): [Edge] Introduced support for the Clipboard API. -* [#607](https://github.com/ckeditor/ckeditor-dev/issues/607): Manually inserted Hex color is prefixed with a hash character (`#`) if needed. It ensures a valid Hex color value is used when setting the table cell border or background color with the [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) window. -* [#584](https://github.com/ckeditor/ckeditor-dev/issues/584): [Font size and Family](https://ckeditor.com/cke4/addon/font) and [Format](https://ckeditor.com/cke4/addon/format) drop-downs are not toggleable anymore. Default option to reset styles added. -* [#856](https://github.com/ckeditor/ckeditor-dev/issues/856): Introduced the [`CKEDITOR.tools.keystrokeToArray()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-keystrokeToArray) method. It converts a keystroke into its string representation, returning every key name as a separate array element. -* [#1053](https://github.com/ckeditor/ckeditor-dev/issues/1053): Introduced the [`CKEDITOR.tools.object.merge()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-merge) method. It allows to merge two objects, returning the new object with all properties from both objects deeply cloned. -* [#1073](https://github.com/ckeditor/ckeditor-dev/issues/1073): Introduced the [`CKEDITOR.tools.array.every()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-every) method. It invokes a given test function on every array element and returns `true` if all elements pass the test. +* [#933](https://github.com/ckeditor/ckeditor4/issues/933): Introduced [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin. +* [#662](https://github.com/ckeditor/ckeditor4/issues/662): Introduced image inlining for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#468](https://github.com/ckeditor/ckeditor4/issues/468): [Edge] Introduced support for the Clipboard API. +* [#607](https://github.com/ckeditor/ckeditor4/issues/607): Manually inserted Hex color is prefixed with a hash character (`#`) if needed. It ensures a valid Hex color value is used when setting the table cell border or background color with the [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) window. +* [#584](https://github.com/ckeditor/ckeditor4/issues/584): [Font size and Family](https://ckeditor.com/cke4/addon/font) and [Format](https://ckeditor.com/cke4/addon/format) drop-downs are not toggleable anymore. Default option to reset styles added. +* [#856](https://github.com/ckeditor/ckeditor4/issues/856): Introduced the [`CKEDITOR.tools.keystrokeToArray()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-keystrokeToArray) method. It converts a keystroke into its string representation, returning every key name as a separate array element. +* [#1053](https://github.com/ckeditor/ckeditor4/issues/1053): Introduced the [`CKEDITOR.tools.object.merge()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-merge) method. It allows to merge two objects, returning the new object with all properties from both objects deeply cloned. +* [#1073](https://github.com/ckeditor/ckeditor4/issues/1073): Introduced the [`CKEDITOR.tools.array.every()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-every) method. It invokes a given test function on every array element and returns `true` if all elements pass the test. Fixed Issues: -* [#796](https://github.com/ckeditor/ckeditor-dev/issues/796): Fixed: A list is pasted from OneNote in the reversed order. -* [#834](https://github.com/ckeditor/ckeditor-dev/issues/834): [IE9-11] Fixed: The editor does not save the selected state of radio buttons inserted by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin. -* [#704](https://github.com/ckeditor/ckeditor-dev/issues/704): [Edge] Fixed: Using <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>Z</kbd> breaks widget structure. -* [#591](https://github.com/ckeditor/ckeditor-dev/issues/591): Fixed: A column is inserted in a wrong order inside the table if any cell has a vertical split. -* [#787](https://github.com/ckeditor/ckeditor-dev/issues/787): Fixed: Using Cut inside a nested table does not cut the selected content. -* [#842](https://github.com/ckeditor/ckeditor-dev/issues/842): Fixed: List style not restored when toggling list indent level in the [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugin. -* [#711](https://github.com/ckeditor/ckeditor-dev/issues/711): Fixed: Dragging widgets should only work with the left mouse button. -* [#862](https://github.com/ckeditor/ckeditor-dev/issues/862): Fixed: The "Object Styles" group in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin is visible only if the whole element is selected. -* [#994](https://github.com/ckeditor/ckeditor-dev/pull/994): Fixed: Typo in the [`CKEDITOR.focusManager.focus()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_focusManager.html#method-focus) API documentation. Thanks to [benjy](https://github.com/benjy)! -* [#1014](https://github.com/ckeditor/ckeditor-dev/issues/1014): Fixed: The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) Cell Properties dialog is now [Advanced Content Filter](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_acf.html) aware — it is not possible to change the cell width or height if corresponding styles are disabled. -* [#877](https://github.com/ckeditor/ckeditor-dev/issues/877): Fixed: A list with custom bullets with exotic characters crashes the editor when [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). -* [#605](https://github.com/ckeditor/ckeditor-dev/issues/605): Fixed: Inline widgets do not preserve trailing spaces. -* [#1008](https://github.com/ckeditor/ckeditor-dev/issues/1008): Fixed: Shorthand Hex colors from the [`config.colorButton_colors`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-colorButton_colors) option are not correctly highlighted in the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) Text Color or Background Color panel. -* [#1094](https://github.com/ckeditor/ckeditor-dev/issues/1094): Fixed: Widget definition [`upcast`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-upcasts) methods are called for every element. -* [#1057](https://github.com/ckeditor/ckeditor-dev/issues/1057): Fixed: The [Notification](https://ckeditor.com/addon/notification) plugin overwrites Web Notifications API due to leakage to the global scope. -* [#1068](https://github.com/ckeditor/ckeditor-dev/issues/1068): Fixed: Upload widget paste listener ignores changes to the [`uploadWidgetDefinition`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.fileTools.uploadWidgetDefinition.html). -* [#921](https://github.com/ckeditor/ckeditor-dev/issues/921): Fixed: [Edge] CKEditor erroneously perceives internal copy and paste as type "external". -* [#1213](https://github.com/ckeditor/ckeditor-dev/issues/1213): Fixed: Multiple images uploaded using [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin are randomly duplicated or mangled. -* [#532](https://github.com/ckeditor/ckeditor-dev/issues/532): Fixed: Removed an outdated user guide link from the [About](https://ckeditor.com/cke4/addon/about) dialog. -* [#1221](https://github.com/ckeditor/ckeditor-dev/issues/1221): Fixed: Invalid CSS loaded by [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) plugin when [`config.skin`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-skin) is loaded using a custom path. -* [#522](https://github.com/ckeditor/ckeditor-dev/issues/522): Fixed: Widget selection is not removed when widget is inside table cell with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin enabled. -* [#1027](https://github.com/ckeditor/ckeditor-dev/issues/1027): Fixed: Cannot add multiple images to the table with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin in certain situations. -* [#1069](https://github.com/ckeditor/ckeditor-dev/issues/1069): Fixed: Wrong shape processing by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#995](https://github.com/ckeditor/ckeditor-dev/issues/995): Fixed: Hyperlinked image gets inserted twice by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. -* [#1287](https://github.com/ckeditor/ckeditor-dev/issues/1287): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) plugin throws exception if included in editor build but not loaded into editor's instance. +* [#796](https://github.com/ckeditor/ckeditor4/issues/796): Fixed: A list is pasted from OneNote in the reversed order. +* [#834](https://github.com/ckeditor/ckeditor4/issues/834): [IE9-11] Fixed: The editor does not save the selected state of radio buttons inserted by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin. +* [#704](https://github.com/ckeditor/ckeditor4/issues/704): [Edge] Fixed: Using <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>Z</kbd> breaks widget structure. +* [#591](https://github.com/ckeditor/ckeditor4/issues/591): Fixed: A column is inserted in a wrong order inside the table if any cell has a vertical split. +* [#787](https://github.com/ckeditor/ckeditor4/issues/787): Fixed: Using Cut inside a nested table does not cut the selected content. +* [#842](https://github.com/ckeditor/ckeditor4/issues/842): Fixed: List style not restored when toggling list indent level in the [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugin. +* [#711](https://github.com/ckeditor/ckeditor4/issues/711): Fixed: Dragging widgets should only work with the left mouse button. +* [#862](https://github.com/ckeditor/ckeditor4/issues/862): Fixed: The "Object Styles" group in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin is visible only if the whole element is selected. +* [#994](https://github.com/ckeditor/ckeditor4/pull/994): Fixed: Typo in the [`CKEDITOR.focusManager.focus()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_focusManager.html#method-focus) API documentation. Thanks to [benjy](https://github.com/benjy)! +* [#1014](https://github.com/ckeditor/ckeditor4/issues/1014): Fixed: The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) Cell Properties dialog is now [Advanced Content Filter](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_acf.html) aware — it is not possible to change the cell width or height if corresponding styles are disabled. +* [#877](https://github.com/ckeditor/ckeditor4/issues/877): Fixed: A list with custom bullets with exotic characters crashes the editor when [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#605](https://github.com/ckeditor/ckeditor4/issues/605): Fixed: Inline widgets do not preserve trailing spaces. +* [#1008](https://github.com/ckeditor/ckeditor4/issues/1008): Fixed: Shorthand Hex colors from the [`config.colorButton_colors`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-colorButton_colors) option are not correctly highlighted in the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) Text Color or Background Color panel. +* [#1094](https://github.com/ckeditor/ckeditor4/issues/1094): Fixed: Widget definition [`upcast`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-upcasts) methods are called for every element. +* [#1057](https://github.com/ckeditor/ckeditor4/issues/1057): Fixed: The [Notification](https://ckeditor.com/addon/notification) plugin overwrites Web Notifications API due to leakage to the global scope. +* [#1068](https://github.com/ckeditor/ckeditor4/issues/1068): Fixed: Upload widget paste listener ignores changes to the [`uploadWidgetDefinition`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.fileTools.uploadWidgetDefinition.html). +* [#921](https://github.com/ckeditor/ckeditor4/issues/921): Fixed: [Edge] CKEditor erroneously perceives internal copy and paste as type "external". +* [#1213](https://github.com/ckeditor/ckeditor4/issues/1213): Fixed: Multiple images uploaded using [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin are randomly duplicated or mangled. +* [#532](https://github.com/ckeditor/ckeditor4/issues/532): Fixed: Removed an outdated user guide link from the [About](https://ckeditor.com/cke4/addon/about) dialog. +* [#1221](https://github.com/ckeditor/ckeditor4/issues/1221): Fixed: Invalid CSS loaded by [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) plugin when [`config.skin`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-skin) is loaded using a custom path. +* [#522](https://github.com/ckeditor/ckeditor4/issues/522): Fixed: Widget selection is not removed when widget is inside table cell with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin enabled. +* [#1027](https://github.com/ckeditor/ckeditor4/issues/1027): Fixed: Cannot add multiple images to the table with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin in certain situations. +* [#1069](https://github.com/ckeditor/ckeditor4/issues/1069): Fixed: Wrong shape processing by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#995](https://github.com/ckeditor/ckeditor4/issues/995): Fixed: Hyperlinked image gets inserted twice by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#1287](https://github.com/ckeditor/ckeditor4/issues/1287): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) plugin throws exception if included in editor build but not loaded into editor's instance. API Changes: -* [#1097](https://github.com/ckeditor/ckeditor-dev/issues/1097): Widget [`upcast`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-upcast) methods are now called in the [widget definition's](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#property-definition) context. -* [#1118](https://github.com/ckeditor/ckeditor-dev/issues/1118): Added the `show` option in the [`balloonPanel.attach()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonPanel.html#method-attach) method, allowing to attach a hidden [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) instance. -* [#1145](https://github.com/ckeditor/ckeditor-dev/issues/1145): Added the [`skipNotifications`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-skipNotifications) option to the [`CKEDITOR.fileTools.uploadWidgetDefinition`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.fileTools.uploadWidgetDefinition.html), allowing to switch off default notifications displayed by upload widgets. +* [#1097](https://github.com/ckeditor/ckeditor4/issues/1097): Widget [`upcast`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-upcast) methods are now called in the [widget definition's](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html#property-definition) context. +* [#1118](https://github.com/ckeditor/ckeditor4/issues/1118): Added the `show` option in the [`balloonPanel.attach()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonPanel.html#method-attach) method, allowing to attach a hidden [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) instance. +* [#1145](https://github.com/ckeditor/ckeditor4/issues/1145): Added the [`skipNotifications`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-skipNotifications) option to the [`CKEDITOR.fileTools.uploadWidgetDefinition`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.fileTools.uploadWidgetDefinition.html), allowing to switch off default notifications displayed by upload widgets. Other Changes: -* [#815](https://github.com/ckeditor/ckeditor-dev/issues/815): Removed Node.js dependency from the CKEditor build script. -* [#1041](https://github.com/ckeditor/ckeditor-dev/pull/1041), [#1131](https://github.com/ckeditor/ckeditor-dev/issues/1131): Updated URLs pointing to [CKSource](https://cksource.com/) and [CKEditor](https://ckeditor.com/) resources after the launch of new websites. +* [#815](https://github.com/ckeditor/ckeditor4/issues/815): Removed Node.js dependency from the CKEditor build script. +* [#1041](https://github.com/ckeditor/ckeditor4/pull/1041), [#1131](https://github.com/ckeditor/ckeditor4/issues/1131): Updated URLs pointing to [CKSource](https://cksource.com/) and [CKEditor](https://ckeditor.com/) resources after the launch of new websites. ## CKEditor 4.7.3 New Features: -* [#568](https://github.com/ckeditor/ckeditor-dev/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_filter.html#property-disallowedContent) property. +* [#568](https://github.com/ckeditor/ckeditor4/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_filter.html#property-disallowedContent) property. Fixed Issues: -* [#554](https://github.com/ckeditor/ckeditor-dev/issues/554): Fixed: [`change`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! -* [#566](https://github.com/ckeditor/ckeditor-dev/issues/566): Fixed: The CSS `border` shorthand property with zero width (`border: 0px solid #000;`) causes the table to have the border attribute set to 1. -* [#779](https://github.com/ckeditor/ckeditor-dev/issues/779): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/cke4/addon/language) plugin. -* [#423](https://github.com/ckeditor/ckeditor-dev/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. -* [#719](https://github.com/ckeditor/ckeditor-dev/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin can be resized when the editor is in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). -* [#577](https://github.com/ckeditor/ckeditor-dev/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin throws an error when trying to delete columns. -* [#867](https://github.com/ckeditor/ckeditor-dev/issues/867): Fixed: Typing into a selected table throws an error. -* [#817](https://github.com/ckeditor/ckeditor-dev/issues/817): Fixed: The [Save](https://ckeditor.com/cke4/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). +* [#554](https://github.com/ckeditor/ckeditor4/issues/554): Fixed: [`change`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! +* [#566](https://github.com/ckeditor/ckeditor4/issues/566): Fixed: The CSS `border` shorthand property with zero width (`border: 0px solid #000;`) causes the table to have the border attribute set to 1. +* [#779](https://github.com/ckeditor/ckeditor4/issues/779): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/cke4/addon/language) plugin. +* [#423](https://github.com/ckeditor/ckeditor4/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. +* [#719](https://github.com/ckeditor/ckeditor4/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin can be resized when the editor is in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html). +* [#577](https://github.com/ckeditor/ckeditor4/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin throws an error when trying to delete columns. +* [#867](https://github.com/ckeditor/ckeditor4/issues/867): Fixed: Typing into a selected table throws an error. +* [#817](https://github.com/ckeditor/ckeditor4/issues/817): Fixed: The [Save](https://ckeditor.com/cke4/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). Other Changes: * Updated the [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) plugin: * [#40](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/40): Fixed: IE10 throws an error when spell checking is started. -* [#800](https://github.com/ckeditor/ckeditor-dev/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_selection.html#method-isCollapsed) method which is a simpler way to check if the selection is collapsed. -* [#830](https://github.com/ckeditor/ckeditor-dev/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.dialogCommand.html). +* [#800](https://github.com/ckeditor/ckeditor4/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_selection.html#method-isCollapsed) method which is a simpler way to check if the selection is collapsed. +* [#830](https://github.com/ckeditor/ckeditor4/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.dialogCommand.html). ## CKEditor 4.7.2 New Features: -* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_acf.html) integration with the [Justify](https://ckeditor.com/cke4/addon/justify) plugin. +* [#455](https://github.com/ckeditor/ckeditor4/issues/455): Added [Advanced Content Filter](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_acf.html) integration with the [Justify](https://ckeditor.com/cke4/addon/justify) plugin. Fixed Issues: -* [#663](https://github.com/ckeditor/ckeditor-dev/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error. -* [#694](https://github.com/ckeditor/ckeditor-dev/pull/694): Refactoring in the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin: - * [#520](https://github.com/ckeditor/ckeditor-dev/issues/520): Fixed: Widgets cannot be properly pasted into a table cell. - * [#460](https://github.com/ckeditor/ckeditor-dev/issues/460): Fixed: Editor gone after pasting into an editor within a table. -* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](https://ckeditor.com/cke4/addon/table) dialog. -* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/cke4/addon/selectall) button in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). -* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! -* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](https://ckeditor.com/cke4/addon/toolbar) plugin inside the [Notification](https://ckeditor.com/cke4/addon/notification) plugin. -* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin menu in the editor without any selection. -* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](https://ckeditor.com/cke4/addon/link) plugin. +* [#663](https://github.com/ckeditor/ckeditor4/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error. +* [#694](https://github.com/ckeditor/ckeditor4/pull/694): Refactoring in the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin: + * [#520](https://github.com/ckeditor/ckeditor4/issues/520): Fixed: Widgets cannot be properly pasted into a table cell. + * [#460](https://github.com/ckeditor/ckeditor4/issues/460): Fixed: Editor gone after pasting into an editor within a table. +* [#579](https://github.com/ckeditor/ckeditor4/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](https://ckeditor.com/cke4/addon/table) dialog. +* [#545](https://github.com/ckeditor/ckeditor4/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/cke4/addon/selectall) button in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). +* [#582](https://github.com/ckeditor/ckeditor4/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! +* [#491](https://github.com/ckeditor/ckeditor4/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](https://ckeditor.com/cke4/addon/toolbar) plugin inside the [Notification](https://ckeditor.com/cke4/addon/notification) plugin. +* [#646](https://github.com/ckeditor/ckeditor4/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin menu in the editor without any selection. +* [#501](https://github.com/ckeditor/ckeditor4/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](https://ckeditor.com/cke4/addon/link) plugin. * [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly) editor throws an error. * [#16820](https://dev.ckeditor.com/ticket/16820): [IE10] Fixed: Clicking below a single horizontal rule throws an error. -* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. -* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-extractContents) method returns an incorrect result when multiple nodes are selected. -* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_elementPath.html#method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. +* [#426](https://github.com/ckeditor/ckeditor4/issues/426): Fixed: The [`range.cloneContents()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. +* [#644](https://github.com/ckeditor/ckeditor4/issues/644): Fixed: The [`range.extractContents()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_range.html#method-extractContents) method returns an incorrect result when multiple nodes are selected. +* [#684](https://github.com/ckeditor/ckeditor4/issues/684): Fixed: The [`elementPath.contains()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_elementPath.html#method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. Other Changes: * Updated the [SCAYT](https://ckeditor.com/cke4/addon/scayt) (Spell Check As You Type) plugin: * [#148](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/148): Fixed: SCAYT leaves underlined word after the CKEditor Replace dialog corrects it. -* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_nodeList.html#method-toArray) method which returns an array representation of a [node list](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.dom.nodeList.html). +* [#751](https://github.com/ckeditor/ckeditor4/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_nodeList.html#method-toArray) method which returns an array representation of a [node list](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.dom.nodeList.html). ## CKEditor 4.7.1 New Features: * Added a new Mexican Spanish localization. Thanks to [David Alexandro Rodriguez](https://www.transifex.com/user/profile/darsco16/)! -* [#413](https://github.com/ckeditor/ckeditor-dev/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) instructions. +* [#413](https://github.com/ckeditor/ckeditor4/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) instructions. Fixed Issues: -* [#515](https://github.com/ckeditor/ckeditor-dev/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is loaded. -* [#493](https://github.com/ckeditor/ckeditor-dev/issues/493): Fixed: Selection started from a nested table causes an error in the browser while scrolling down. -* [#415](https://github.com/ckeditor/ckeditor-dev/issues/415): [Firefox] Fixed: <kbd>Enter</kbd> key breaks the table structure when pressed in a table selection. -* [#457](https://github.com/ckeditor/ckeditor-dev/issues/457): Fixed: Error thrown when deleting content from the editor with no selection. -* [#478](https://github.com/ckeditor/ckeditor-dev/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](https://ckeditor.com/cke4/addon/enterkey) plugin when pressing <kbd>Enter</kbd> with no selection. -* [#424](https://github.com/ckeditor/ckeditor-dev/issues/424): Fixed: Error thrown by [Tab Key Handling](https://ckeditor.com/cke4/addon/tab) and [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugins when pressing <kbd>Tab</kbd> with no selection in inline editor. -* [#476](https://github.com/ckeditor/ckeditor-dev/issues/476): Fixed: Anchors inserted with the [Link](https://ckeditor.com/cke4/addon/link) plugin on collapsed selection cannot be edited. -* [#417](https://github.com/ckeditor/ckeditor-dev/issues/417): Fixed: The [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. -* [#523](https://github.com/ckeditor/ckeditor-dev/issues/523): Fixed: The [`editor.getCommandKeystroke()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getCommandKeystroke) method does not obtain the correct keystroke. -* [#534](https://github.com/ckeditor/ckeditor-dev/issues/534): [IE] Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work in Quirks Mode. -* [#450](https://github.com/ckeditor/ckeditor-dev/issues/450): Fixed: [`CKEDITOR.filter`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.filter.html) incorrectly transforms the `margin` CSS property. +* [#515](https://github.com/ckeditor/ckeditor4/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is loaded. +* [#493](https://github.com/ckeditor/ckeditor4/issues/493): Fixed: Selection started from a nested table causes an error in the browser while scrolling down. +* [#415](https://github.com/ckeditor/ckeditor4/issues/415): [Firefox] Fixed: <kbd>Enter</kbd> key breaks the table structure when pressed in a table selection. +* [#457](https://github.com/ckeditor/ckeditor4/issues/457): Fixed: Error thrown when deleting content from the editor with no selection. +* [#478](https://github.com/ckeditor/ckeditor4/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](https://ckeditor.com/cke4/addon/enterkey) plugin when pressing <kbd>Enter</kbd> with no selection. +* [#424](https://github.com/ckeditor/ckeditor4/issues/424): Fixed: Error thrown by [Tab Key Handling](https://ckeditor.com/cke4/addon/tab) and [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugins when pressing <kbd>Tab</kbd> with no selection in inline editor. +* [#476](https://github.com/ckeditor/ckeditor4/issues/476): Fixed: Anchors inserted with the [Link](https://ckeditor.com/cke4/addon/link) plugin on collapsed selection cannot be edited. +* [#417](https://github.com/ckeditor/ckeditor4/issues/417): Fixed: The [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. +* [#523](https://github.com/ckeditor/ckeditor4/issues/523): Fixed: The [`editor.getCommandKeystroke()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getCommandKeystroke) method does not obtain the correct keystroke. +* [#534](https://github.com/ckeditor/ckeditor4/issues/534): [IE] Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work in Quirks Mode. +* [#450](https://github.com/ckeditor/ckeditor4/issues/450): Fixed: [`CKEDITOR.filter`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.filter.html) incorrectly transforms the `margin` CSS property. ## CKEditor 4.7 @@ -582,7 +648,7 @@ Fixed Issues: * [#14407](https://dev.ckeditor.com/ticket/14407): [IE] Fixed: Non-editable widgets can be edited. * [#16927](https://dev.ckeditor.com/ticket/16927): Fixed: An error thrown if a bundle containing the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) plugin is run in ES5 strict mode. Thanks to [Igor Rubinovich](https://github.com/IgorRubinovich)! * [#16920](https://dev.ckeditor.com/ticket/16920): Fixed: Several plugins not using the [Dialog](https://ckeditor.com/cke4/addon/dialog) plugin as a direct dependency. -* [PR#336](https://github.com/ckeditor/ckeditor-dev/pull/336): Fixed: Typo in [`CKEDITOR.getCss()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-getCss) API documentation. Thanks to [knusperpixel](https://github.com/knusperpixel)! +* [PR#336](https://github.com/ckeditor/ckeditor4/pull/336): Fixed: Typo in [`CKEDITOR.getCss()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-getCss) API documentation. Thanks to [knusperpixel](https://github.com/knusperpixel)! * [#17027](https://dev.ckeditor.com/ticket/17027): Fixed: Command event data should be initialized as an empty object. * Fixed the behavior of HTML parser when parsing `src`/`srcdoc` attributes of the `<iframe>` element in a CKEditor setup with ACF turned off and without the [Iframe Dialog](https://ckeditor.com/cke4/addon/iframe) plugin. The issue was originally reported as a security issue by [Sriramk21](https://twitter.com/sriramk21) from Pegasystems and was later downgraded by the security team into a normal issue due to the requirement of having ACF turned off. Disabling [Advanced Content Filter](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_advanced_content_filter.html) is against [security best practices](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_best_practices.html#security), so the problem described above has not been considered a security issue as such. @@ -739,7 +805,7 @@ Fixed Issues: Fixed Issues: -* [#10685](https://dev.ckeditor.com/ticket/10685): Fixed: Unreadable toolbar icons after updating to the new editor version. Fixed with [6876179](https://github.com/ckeditor/ckeditor-dev/commit/6876179db4ee97e786b07b8fd72e6b4120732185) in [ckeditor-dev](https://github.com/ckeditor/ckeditor-dev) and [6c9189f4](https://github.com/ckeditor/ckeditor-presets/commit/6c9189f46392d2c126854fe8889b820b8c76d291) in [ckeditor-presets](https://github.com/ckeditor/ckeditor-presets). +* [#10685](https://dev.ckeditor.com/ticket/10685): Fixed: Unreadable toolbar icons after updating to the new editor version. Fixed with [6876179](https://github.com/ckeditor/ckeditor4/commit/6876179db4ee97e786b07b8fd72e6b4120732185) in [ckeditor4](https://github.com/ckeditor/ckeditor4) and [6c9189f4](https://github.com/ckeditor/ckeditor4-presets/commit/6c9189f46392d2c126854fe8889b820b8c76d291) in [ckeditor4-presets](https://github.com/ckeditor/ckeditor4-presets). * [#14573](https://dev.ckeditor.com/ticket/14573): Fixed: Missing [Widget](https://ckeditor.com/cke4/addon/widget) drag handler CSS when there are multiple editor instances. * [#14620](https://dev.ckeditor.com/ticket/14620): Fixed: Setting both the `min-height` style for the `<body>` element and the `height` style for the `<html>` element breaks the [Auto Grow](https://ckeditor.com/cke4/addon/autogrow) plugin. * [#14538](https://dev.ckeditor.com/ticket/14538): Fixed: Keyboard focus goes into an embedded `<iframe>` element. @@ -885,7 +951,7 @@ Other Changes: Fixed Issues: * [#13609](https://dev.ckeditor.com/ticket/13609): [Edge] Fixed: The browser crashes when switching to the source mode. Thanks to [Andrew Williams and Mark Smeed](http://webxsolution.com/)! -* [PR#201](https://github.com/ckeditor/ckeditor-dev/pull/201): Fixed: Buttons in the toolbar configurator cause form submission. Thanks to [colemanw](https://github.com/colemanw)! +* [PR#201](https://github.com/ckeditor/ckeditor4/pull/201): Fixed: Buttons in the toolbar configurator cause form submission. Thanks to [colemanw](https://github.com/colemanw)! * [#13422](https://dev.ckeditor.com/ticket/13422): Fixed: A monospaced font should be used in the `<textarea>` element storing editor configuration in the toolbar configurator. * [#13494](https://dev.ckeditor.com/ticket/13494): Fixed: Error thrown in the toolbar configurator if plugin requirements are not met. * [#13409](https://dev.ckeditor.com/ticket/13409): Fixed: List elements incorrectly merged when pressing *Backspace* or *Delete*. @@ -1070,7 +1136,7 @@ Fixed Issues: * [#13268](https://dev.ckeditor.com/ticket/13268): Fixed: Documentation for [`CKEDITOR.dom.text`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.dom.text.html) is incorrect. Thanks to [Ben Kiefer](https://github.com/benkiefer)! * [#12739](https://dev.ckeditor.com/ticket/12739): Fixed: Link loses inline styles when edited without the [Advanced Tab for Dialogs](https://ckeditor.com/cke4/addon/dialogadvtab) plugin. Thanks to [Віталій Крутько](https://github.com/asmforce)! * [#13292](https://dev.ckeditor.com/ticket/13292): Fixed: Protection pattern does not work in attribute in self-closing elements with no space before `/>`. Thanks to [Віталій Крутько](https://github.com/asmforce)! -* [PR#192](https://github.com/ckeditor/ckeditor-dev/pull/192): Fixed: Variable name typo in the [Dialog User Interface](https://ckeditor.com/cke4/addon/dialogui) plugin which caused [`CKEDITOR.ui.dialog.radio`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.ui.dialog.radio.html) validation to not work. Thanks to [Florian Ludwig](https://github.com/FlorianLudwig)! +* [PR#192](https://github.com/ckeditor/ckeditor4/pull/192): Fixed: Variable name typo in the [Dialog User Interface](https://ckeditor.com/cke4/addon/dialogui) plugin which caused [`CKEDITOR.ui.dialog.radio`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.ui.dialog.radio.html) validation to not work. Thanks to [Florian Ludwig](https://github.com/FlorianLudwig)! * [#13232](https://dev.ckeditor.com/ticket/13232): [Safari] Fixed: The [`element.appendText()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html#method-appendText) method does not work properly for empty elements. * [#13233](https://dev.ckeditor.com/ticket/13233): Fixed: [HTMLDataProcessor](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.htmlDataProcessor.html) can process `foo:href` attributes. * [#12796](https://dev.ckeditor.com/ticket/12796): Fixed: The [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugin unwraps parent `<li>` elements. Thanks to [Andrew Stucki](https://github.com/andrewstucki)! @@ -1230,7 +1296,7 @@ Fixed Issues: Important Notes: * The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_tests.html) guide. - Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). + Please note that the [`tests/`](https://github.com/ckeditor/ckeditor4/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor4/). New Features: diff --git a/web/core/assets/vendor/ckeditor/build-config.js b/web/core/assets/vendor/ckeditor/build-config.js index 120b95f1a50c0ae609eabf9297da563a340b7ba4..25a4a4bd6f518f0086f6f8555d3fd75450cbc9e7 100644 --- a/web/core/assets/vendor/ckeditor/build-config.js +++ b/web/core/assets/vendor/ckeditor/build-config.js @@ -80,6 +80,7 @@ var CKBUILDER_CONFIG = { magicline: 1, maximize: 1, pastefromgdocs: 1, + pastefromlibreoffice: 1, pastefromword: 1, pastetext: 1, removeformat: 1, diff --git a/web/core/assets/vendor/ckeditor/ckeditor.js b/web/core/assets/vendor/ckeditor/ckeditor.js index 40f3aa413c7f0ac22e1fdfa2bdaa344c658b2fee..01979e95e8aa5c761b0b67cc7f06fb89dba1464e 100644 --- a/web/core/assets/vendor/ckeditor/ckeditor.js +++ b/web/core/assets/vendor/ckeditor/ckeditor.js @@ -1,1190 +1,1192 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -(function(){if(!window.CKEDITOR||!window.CKEDITOR.dom){window.CKEDITOR||(window.CKEDITOR=function(){var b=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,h={timestamp:"JA5A",version:"4.13.0",revision:"af6f51523",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:b},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var f=document.getElementsByTagName("script"),g=0;g<f.length;g++){var l=f[g].src.match(b);if(l){a=l[1];break}}-1==a.indexOf(":/")&&"//"!=a.slice(0, +(function(){if(!window.CKEDITOR||!window.CKEDITOR.dom){window.CKEDITOR||(window.CKEDITOR=function(){var b=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,h={timestamp:"K2GA",version:"4.14.0",revision:"8a12b0417",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:b},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var e=document.getElementsByTagName("script"),g=0;g<e.length;g++){var k=e[g].src.match(b);if(k){a=k[1];break}}-1==a.indexOf(":/")&&"//"!=a.slice(0, 2)&&(a=0===a.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+a:location.href.match(/^[^\?]*\/(?:)/)[0]+a);if(!a)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return a}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&"/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a)&&(a+=(0<=a.indexOf("?")?"\x26":"?")+"t\x3d"+this.timestamp);return a}, -domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),f()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),f())}catch(b){}}function f(){for(var a;a=b.shift();)a()}var b=[];return function(f){function d(){try{document.documentElement.doScroll("left")}catch(c){setTimeout(d,1);return}a()}b.push(f);"complete"===document.readyState&&setTimeout(a,1);if(1==b.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded", -a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);f=!1;try{f=!window.frameElement}catch(e){}document.documentElement.doScroll&&f&&d()}}}()},g=window.CKEDITOR_GETURL;if(g){var f=h.getUrl;h.getUrl=function(a){return g.call(h,a)||f.call(h,a)}}return h}());CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(b){var h=CKEDITOR.event.prototype,g;for(g in h)null==b[g]&&(b[g]=h[g])}, -CKEDITOR.event.prototype=function(){function b(f){var a=h(this);return a[f]||(a[f]=new g(f))}var h=function(f){f=f.getPrivate&&f.getPrivate()||f._||(f._={});return f.events||(f.events={})},g=function(f){this.name=f;this.listeners=[]};g.prototype={getListenerIndex:function(f){for(var a=0,b=this.listeners;a<b.length;a++)if(b[a].fn==f)return a;return-1}};return{define:function(f,a){var g=b.call(this,f);CKEDITOR.tools.extend(g,a,!0)},on:function(f,a,g,h,l){function d(n,c,d,w){n={name:f,sender:this,editor:n, -data:c,listenerData:h,stop:d,cancel:w,removeListener:e};return!1===a.call(g,n)?!1:n.data}function e(){n.removeListener(f,a)}var c=b.call(this,f);if(0>c.getListenerIndex(a)){c=c.listeners;g||(g=this);isNaN(l)&&(l=10);var n=this;d.fn=a;d.priority=l;for(var w=c.length-1;0<=w;w--)if(c[w].priority<=l)return c.splice(w+1,0,d),{removeListener:e};c.unshift(d)}return{removeListener:e}},once:function(){var f=Array.prototype.slice.call(arguments),a=f[1];f[1]=function(f){f.removeListener();return a.apply(this, -arguments)};return this.on.apply(this,f)},capture:function(){CKEDITOR.event.useCapture=1;var f=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return f},fire:function(){var f=0,a=function(){f=1},b=0,g=function(){b=1};return function(l,d,e){var c=h(this)[l];l=f;var n=b;f=b=0;if(c){var w=c.listeners;if(w.length)for(var w=w.slice(0),z,r=0;r<w.length;r++){if(c.errorProof)try{z=w[r].call(this,e,d,a,g)}catch(p){}else z=w[r].call(this,e,d,a,g);!1===z?b=1:"undefined"!=typeof z&&(d=z);if(f||b)break}}d= -b?!1:"undefined"==typeof d?!0:d;f=l;b=n;return d}}(),fireOnce:function(f,a,b){a=this.fire(f,a,b);delete h(this)[f];return a},removeListener:function(f,a){var b=h(this)[f];if(b){var g=b.getListenerIndex(a);0<=g&&b.listeners.splice(g,1)}},removeAllListeners:function(){var f=h(this),a;for(a in f)delete f[a]},hasListeners:function(f){return(f=h(this)[f])&&0<f.listeners.length}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire= +domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),e()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),e())}catch(b){}}function e(){for(var a;a=b.shift();)a()}var b=[];return function(e){function c(){try{document.documentElement.doScroll("left")}catch(d){setTimeout(c,1);return}a()}b.push(e);"complete"===document.readyState&&setTimeout(a,1);if(1==b.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded", +a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);e=!1;try{e=!window.frameElement}catch(f){}document.documentElement.doScroll&&e&&c()}}}()},g=window.CKEDITOR_GETURL;if(g){var e=h.getUrl;h.getUrl=function(a){return g.call(h,a)||e.call(h,a)}}return h}());CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(b){var h=CKEDITOR.event.prototype,g;for(g in h)null==b[g]&&(b[g]=h[g])}, +CKEDITOR.event.prototype=function(){function b(e){var a=h(this);return a[e]||(a[e]=new g(e))}var h=function(e){e=e.getPrivate&&e.getPrivate()||e._||(e._={});return e.events||(e.events={})},g=function(e){this.name=e;this.listeners=[]};g.prototype={getListenerIndex:function(e){for(var a=0,b=this.listeners;a<b.length;a++)if(b[a].fn==e)return a;return-1}};return{define:function(e,a){var g=b.call(this,e);CKEDITOR.tools.extend(g,a,!0)},on:function(e,a,g,h,k){function c(n,d,c,w){n={name:e,sender:this,editor:n, +data:d,listenerData:h,stop:c,cancel:w,removeListener:f};return!1===a.call(g,n)?!1:n.data}function f(){n.removeListener(e,a)}var d=b.call(this,e);if(0>d.getListenerIndex(a)){d=d.listeners;g||(g=this);isNaN(k)&&(k=10);var n=this;c.fn=a;c.priority=k;for(var w=d.length-1;0<=w;w--)if(d[w].priority<=k)return d.splice(w+1,0,c),{removeListener:f};d.unshift(c)}return{removeListener:f}},once:function(){var e=Array.prototype.slice.call(arguments),a=e[1];e[1]=function(e){e.removeListener();return a.apply(this, +arguments)};return this.on.apply(this,e)},capture:function(){CKEDITOR.event.useCapture=1;var e=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return e},fire:function(){var e=0,a=function(){e=1},b=0,g=function(){b=1};return function(k,c,f){var d=h(this)[k];k=e;var n=b;e=b=0;if(d){var w=d.listeners;if(w.length)for(var w=w.slice(0),v,p=0;p<w.length;p++){if(d.errorProof)try{v=w[p].call(this,f,c,a,g)}catch(r){}else v=w[p].call(this,f,c,a,g);!1===v?b=1:"undefined"!=typeof v&&(c=v);if(e||b)break}}c= +b?!1:"undefined"==typeof c?!0:c;e=k;b=n;return c}}(),fireOnce:function(e,a,b){a=this.fire(e,a,b);delete h(this)[e];return a},removeListener:function(e,a){var b=h(this)[e];if(b){var g=b.getListenerIndex(a);0<=g&&b.listeners.splice(g,1)}},removeAllListeners:function(){var e=h(this),a;for(a in e)delete e[a]},hasListeners:function(e){return(e=h(this)[e])&&0<e.listeners.length}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire= function(b,h){b in{instanceReady:1,loaded:1}&&(this[b]=!0);return CKEDITOR.event.prototype.fire.call(this,b,h,this)},CKEDITOR.editor.prototype.fireOnce=function(b,h){b in{instanceReady:1,loaded:1}&&(this[b]=!0);return CKEDITOR.event.prototype.fireOnce.call(this,b,h,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));CKEDITOR.env||(CKEDITOR.env=function(){var b=navigator.userAgent.toLowerCase(),h=b.match(/edge[ \/](\d+.?\d*)/),g=-1<b.indexOf("trident/"),g=!(!h&&!g),g={ie:g,edge:!!h,webkit:!g&& --1<b.indexOf(" applewebkit/"),air:-1<b.indexOf(" adobeair/"),mac:-1<b.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<b.indexOf("mobile"),iOS:/(ipad|iphone|ipod)/.test(b),isCustomDomain:function(){if(!this.ie)return!1;var a=document.domain,f=window.location.hostname;return a!=f&&a!="["+f+"]"},secure:"https:"==location.protocol};g.gecko="Gecko"==navigator.product&&!g.webkit&&!g.ie;g.webkit&&(-1<b.indexOf("chrome")?g.chrome= -!0:g.safari=!0);var f=0;g.ie&&(f=h?parseFloat(h[1]):g.quirks||!document.documentMode?parseFloat(b.match(/msie (\d+)/)[1]):document.documentMode,g.ie9Compat=9==f,g.ie8Compat=8==f,g.ie7Compat=7==f,g.ie6Compat=7>f||g.quirks);g.gecko&&(h=b.match(/rv:([\d\.]+)/))&&(h=h[1].split("."),f=1E4*h[0]+100*(h[1]||0)+1*(h[2]||0));g.air&&(f=parseFloat(b.match(/ adobeair\/(\d+)/)[1]));g.webkit&&(f=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]));g.version=f;g.isCompatible=!(g.ie&&7>f)&&!(g.gecko&&4E4>f)&&!(g.webkit&& -534>f);g.hidpi=2<=window.devicePixelRatio;g.needsBrFiller=g.gecko||g.webkit||g.ie&&10<f;g.needsNbspFiller=g.ie&&11>f;g.cssClass="cke_browser_"+(g.ie?"ie":g.gecko?"gecko":g.webkit?"webkit":"unknown");g.quirks&&(g.cssClass+=" cke_browser_quirks");g.ie&&(g.cssClass+=" cke_browser_ie"+(g.quirks?"6 cke_browser_iequirks":g.version));g.air&&(g.cssClass+=" cke_browser_air");g.iOS&&(g.cssClass+=" cke_browser_ios");g.hidpi&&(g.cssClass+=" cke_hidpi");return g}());"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR); +-1<b.indexOf(" applewebkit/"),air:-1<b.indexOf(" adobeair/"),mac:-1<b.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<b.indexOf("mobile"),iOS:/(ipad|iphone|ipod)/.test(b),isCustomDomain:function(){if(!this.ie)return!1;var a=document.domain,e=window.location.hostname;return a!=e&&a!="["+e+"]"},secure:"https:"==location.protocol};g.gecko="Gecko"==navigator.product&&!g.webkit&&!g.ie;g.webkit&&(-1<b.indexOf("chrome")?g.chrome= +!0:g.safari=!0);var e=0;g.ie&&(e=h?parseFloat(h[1]):g.quirks||!document.documentMode?parseFloat(b.match(/msie (\d+)/)[1]):document.documentMode,g.ie9Compat=9==e,g.ie8Compat=8==e,g.ie7Compat=7==e,g.ie6Compat=7>e||g.quirks);g.gecko&&(h=b.match(/rv:([\d\.]+)/))&&(h=h[1].split("."),e=1E4*h[0]+100*(h[1]||0)+1*(h[2]||0));g.air&&(e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]));g.webkit&&(e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]));g.version=e;g.isCompatible=!(g.ie&&7>e)&&!(g.gecko&&4E4>e)&&!(g.webkit&& +534>e);g.hidpi=2<=window.devicePixelRatio;g.needsBrFiller=g.gecko||g.webkit||g.ie&&10<e;g.needsNbspFiller=g.ie&&11>e;g.cssClass="cke_browser_"+(g.ie?"ie":g.gecko?"gecko":g.webkit?"webkit":"unknown");g.quirks&&(g.cssClass+=" cke_browser_quirks");g.ie&&(g.cssClass+=" cke_browser_ie"+(g.quirks?"6 cke_browser_iequirks":g.version));g.air&&(g.cssClass+=" cke_browser_air");g.iOS&&(g.cssClass+=" cke_browser_ios");g.hidpi&&(g.cssClass+=" cke_hidpi");return g}());"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR); CKEDITOR.loadFullCore=function(){if("basic_ready"!=CKEDITOR.status)CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var b=document.createElement("script");b.type="text/javascript";b.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(b)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(b){(this._.pending||(this._.pending=[])).push(b)};(function(){CKEDITOR.domReady(function(){var b=CKEDITOR.loadFullCore,h=CKEDITOR.loadFullCoreTimeout;b&&(CKEDITOR.status= "basic_ready",b&&b._load?b():h&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*h))})})();CKEDITOR.status="basic_loaded"}();"use strict";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(b,h){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:b,additionalData:h})};CKEDITOR.error=function(b,h){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log", -{type:"error",errorCode:b,additionalData:h})};CKEDITOR.on("log",function(b){if(window.console&&window.console.log){var h=console[b.data.type]?b.data.type:"log",g=b.data.errorCode;if(b=b.data.additionalData)console[h]("[CKEDITOR] Error code: "+g+".",b);else console[h]("[CKEDITOR] Error code: "+g+".");console[h]("[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#"+g)}},null,null,999);CKEDITOR.dom={};(function(){function b(n,c,d){this._minInterval= -n;this._context=d;this._lastOutput=this._scheduledTimer=0;this._output=CKEDITOR.tools.bind(c,d||{});var a=this;this.input=function(){function n(){a._lastOutput=(new Date).getTime();a._scheduledTimer=0;a._call()}if(!a._scheduledTimer||!1!==a._reschedule()){var c=(new Date).getTime()-a._lastOutput;c<a._minInterval?a._scheduledTimer=setTimeout(n,a._minInterval-c):n()}}}function h(n,c,d){b.call(this,n,c,d);this._args=[];var a=this;this.input=CKEDITOR.tools.override(this.input,function(n){return function(){a._args= -Array.prototype.slice.call(arguments);n.call(this)}})}var g=[],f=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",a=/&/g,m=/>/g,k=/</g,l=/"/g,d=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,e={lt:"\x3c",gt:"\x3e",amp:"\x26",quot:'"',nbsp:" ",shy:""},c=function(n,c){return"#"==c[0]?String.fromCharCode(parseInt(c.slice(1),10)):e[c]};CKEDITOR.on("reset",function(){g=[]});CKEDITOR.tools={arrayCompare:function(n,c){if(!n&&!c)return!0;if(!n||!c||n.length!=c.length)return!1; -for(var d=0;d<n.length;d++)if(n[d]!=c[d])return!1;return!0},getIndex:function(n,c){for(var d=0;d<n.length;++d)if(c(n[d]))return d;return-1},clone:function(c){var d;if(c&&c instanceof Array){d=[];for(var a=0;a<c.length;a++)d[a]=CKEDITOR.tools.clone(c[a]);return d}if(null===c||"object"!=typeof c||c instanceof String||c instanceof Number||c instanceof Boolean||c instanceof Date||c instanceof RegExp||c.nodeType||c.window===c)return c;d=new c.constructor;for(a in c)d[a]=CKEDITOR.tools.clone(c[a]);return d}, -capitalize:function(c,d){return c.charAt(0).toUpperCase()+(d?c.slice(1):c.slice(1).toLowerCase())},extend:function(c){var d=arguments.length,a,e;"boolean"==typeof(a=arguments[d-1])?d--:"boolean"==typeof(a=arguments[d-2])&&(e=arguments[d-1],d-=2);for(var f=1;f<d;f++){var b=arguments[f]||{};CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(b),function(d){if(!0===a||null==c[d])if(!e||d in e)c[d]=b[d]})}return c},prototypedCopy:function(c){var d=function(){};d.prototype=c;return new d},copy:function(c){var d= -{},a;for(a in c)d[a]=c[a];return d},isArray:function(c){return"[object Array]"==Object.prototype.toString.call(c)},isEmpty:function(c){for(var d in c)if(c.hasOwnProperty(d))return!1;return!0},cssVendorPrefix:function(c,d,a){if(a)return f+c+":"+d+";"+c+":"+d;a={};a[c]=d;a[f+c]=d;return a},cssStyleToDomStyle:function(){var c=document.createElement("div").style,d="undefined"!=typeof c.cssFloat?"cssFloat":"undefined"!=typeof c.styleFloat?"styleFloat":"float";return function(c){return"float"==c?d:c.replace(/-./g, -function(c){return c.substr(1).toUpperCase()})}}(),buildStyleHtml:function(c){c=[].concat(c);for(var d,a=[],e=0;e<c.length;e++)if(d=c[e])/@import|[{}]/.test(d)?a.push("\x3cstyle\x3e"+d+"\x3c/style\x3e"):a.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+d+'"\x3e');return a.join("")},htmlEncode:function(c){return void 0===c||null===c?"":String(c).replace(a,"\x26amp;").replace(m,"\x26gt;").replace(k,"\x26lt;")},htmlDecode:function(n){return n.replace(d,c)},htmlEncodeAttr:function(c){return CKEDITOR.tools.htmlEncode(c).replace(l, -"\x26quot;")},htmlDecodeAttr:function(c){return CKEDITOR.tools.htmlDecode(c)},transformPlainTextToHtml:function(c,d){var a=d==CKEDITOR.ENTER_BR,e=this.htmlEncode(c.replace(/\r\n/g,"\n")),e=e.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),f=d==CKEDITOR.ENTER_P?"p":"div";if(!a){var b=/\n{2}/g;if(b.test(e))var l="\x3c"+f+"\x3e",g="\x3c/"+f+"\x3e",e=l+e.replace(b,function(){return g+l})+g}e=e.replace(/\n/g,"\x3cbr\x3e");a||(e=e.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+f+"\x3e)"),function(c){return CKEDITOR.tools.repeat(c, -2)}));e=e.replace(/^ | $/g,"\x26nbsp;");return e=e.replace(/(>|\s) /g,function(c,n){return n+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var c=0;return function(){return++c}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var c="e",d=0;8>d;d++)c+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return c},override:function(c,d){var a=d(c);a.prototype=c.prototype;return a},setTimeout:function(c,d,a,e,f){f||(f=window);a||(a= -f);return f.setTimeout(function(){e?c.apply(a,[].concat(e)):c.apply(a)},d||0)},throttle:function(c,d,a){return new this.buffers.throttle(c,d,a)},trim:function(){var c=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(d){return d.replace(c,"")}}(),ltrim:function(){var c=/^[ \t\n\r]+/g;return function(d){return d.replace(c,"")}}(),rtrim:function(){var c=/[ \t\n\r]+$/g;return function(d){return d.replace(c,"")}}(),indexOf:function(c,d){if("function"==typeof d)for(var a=0,e=c.length;a<e;a++){if(d(c[a]))return a}else{if(c.indexOf)return c.indexOf(d); -a=0;for(e=c.length;a<e;a++)if(c[a]===d)return a}return-1},search:function(c,d){var a=CKEDITOR.tools.indexOf(c,d);return 0<=a?c[a]:null},bind:function(c,d){var a=Array.prototype.slice.call(arguments,2);return function(){return c.apply(d,a.concat(Array.prototype.slice.call(arguments)))}},createClass:function(c){var d=c.$,a=c.base,e=c.privates||c._,f=c.proto;c=c.statics;!d&&(d=function(){a&&this.base.apply(this,arguments)});if(e)var b=d,d=function(){var c=this._||(this._={}),d;for(d in e){var n=e[d]; -c[d]="function"==typeof n?CKEDITOR.tools.bind(n,this):n}b.apply(this,arguments)};a&&(d.prototype=this.prototypedCopy(a.prototype),d.prototype.constructor=d,d.base=a,d.baseProto=a.prototype,d.prototype.base=function t(){this.base=a.prototype.base;a.apply(this,arguments);this.base=t});f&&this.extend(d.prototype,f,!0);c&&this.extend(d,c,!0);return d},addFunction:function(c,d){return g.push(function(){return c.apply(d||this,arguments)})-1},removeFunction:function(c){g[c]=null},callFunction:function(c){var d= -g[c];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var c=/^-?\d+\.?\d*px$/,d;return function(a){d=CKEDITOR.tools.trim(a+"")+"px";return c.test(d)?d:a||""}}(),convertToPx:function(){var c;return function(d){c||(c=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e',CKEDITOR.document),CKEDITOR.document.getBody().append(c));if(!/%$/.test(d)){var a=0>parseFloat(d); -a&&(d=d.replace("-",""));c.setStyle("width",d);d=c.$.clientWidth;return a?-d:d}return d}}(),repeat:function(c,d){return Array(d+1).join(c)},tryThese:function(){for(var c,d=0,a=arguments.length;d<a;d++){var e=arguments[d];try{c=e();break}catch(f){}}return c},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(c){return function(){var d=arguments,a=this;window.setTimeout(function(){c.apply(a,d)},0)}},normalizeCssText:function(c,d){var a=[],e,f=CKEDITOR.tools.parseCssText(c, -!0,d);for(e in f)a.push(e+":"+f[e]);a.sort();return a.length?a.join(";")+";":""},convertRgbToHex:function(c){return c.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(c,d,n,a){c=[d,n,a];for(d=0;3>d;d++)c[d]=("0"+parseInt(c[d],10).toString(16)).slice(-2);return"#"+c.join("")})},normalizeHex:function(c){return c.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(c,d,n,a){c=d.toLowerCase();3==c.length&&(c=c.split(""),c=[c[0],c[0],c[1],c[1],c[2],c[2]].join(""));return"#"+c+a})},parseCssText:function(c, -d,a){var e={};a&&(c=(new CKEDITOR.dom.element("span")).setAttribute("style",c).getAttribute("style")||"");c&&(c=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(c)));if(!c||";"==c)return e;c.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(c,n,a){d&&(n=n.toLowerCase(),"font-family"==n&&(a=a.replace(/\s*,\s*/g,",")),a=CKEDITOR.tools.trim(a));e[n]=a});return e},writeCssText:function(c,d){var a,e=[];for(a in c)e.push(a+":"+c[a]);d&&e.sort();return e.join("; ")}, -objectCompare:function(c,d,a){var e;if(!c&&!d)return!0;if(!c||!d)return!1;for(e in c)if(c[e]!=d[e])return!1;if(!a)for(e in d)if(c[e]!=d[e])return!1;return!0},objectKeys:function(c){return CKEDITOR.tools.object.keys(c)},convertArrayToObject:function(c,d){var a={};1==arguments.length&&(d=!0);for(var e=0,f=c.length;e<f;++e)a[c[e]]=d;return a},fixDomain:function(){for(var c;;)try{c=window.parent.document.domain;break}catch(d){c=c?c.replace(/.+?(?:\.|$)/,""):document.domain;if(!c)break;document.domain= -c}return!!c},eventsBuffer:function(c,d,a){return new this.buffers.event(c,d,a)},enableHtml5Elements:function(c,d){for(var a="abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video".split(" "),e=a.length,f;e--;)f=c.createElement(a[e]),d&&c.appendChild(f)},checkIfAnyArrayItemMatches:function(c,d){for(var a=0,e=c.length;a<e;++a)if(c[a].match(d))return!0;return!1},checkIfAnyObjectPropertyMatches:function(c, -d){for(var a in c)if(a.match(d))return!0;return!1},keystrokeToString:function(c,d){var a=this.keystrokeToArray(c,d);a.display=a.display.join("+");a.aria=a.aria.join("+");return a},keystrokeToArray:function(c,d){var a=d&16711680,e=d&65535,f=CKEDITOR.env.mac,b=[],l=[];a&CKEDITOR.CTRL&&(b.push(f?"⌘":c[17]),l.push(f?c[224]:c[17]));a&CKEDITOR.ALT&&(b.push(f?"⌥":c[18]),l.push(c[18]));a&CKEDITOR.SHIFT&&(b.push(f?"⇧":c[16]),l.push(c[16]));e&&(c[e]?(b.push(c[e]),l.push(c[e])):(b.push(String.fromCharCode(e)), -l.push(String.fromCharCode(e))));return{display:b,aria:l}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",getCookie:function(c){c=c.toLowerCase();for(var d=document.cookie.split(";"),a,e,f=0;f<d.length;f++)if(a=d[f].split("\x3d"),e=decodeURIComponent(CKEDITOR.tools.trim(a[0]).toLowerCase()),e===c)return decodeURIComponent(1<a.length?a[1]:"");return null},setCookie:function(c,d){document.cookie=encodeURIComponent(c)+"\x3d"+encodeURIComponent(d)+ -";path\x3d/"},getCsrfToken:function(){var c=CKEDITOR.tools.getCookie("ckCsrfToken");if(!c||40!=c.length){var c=[],d="";if(window.crypto&&window.crypto.getRandomValues)c=new Uint8Array(40),window.crypto.getRandomValues(c);else for(var a=0;40>a;a++)c.push(Math.floor(256*Math.random()));for(a=0;a<c.length;a++)var e="abcdefghijklmnopqrstuvwxyz0123456789".charAt(c[a]%36),d=d+(.5<Math.random()?e.toUpperCase():e);c=d;CKEDITOR.tools.setCookie("ckCsrfToken",c)}return c},escapeCss:function(c){return c?window.CSS&& -CSS.escape?CSS.escape(c):isNaN(parseInt(c.charAt(0),10))?c:"\\3"+c.charAt(0)+" "+c.substring(1,c.length):""},getMouseButton:function(c){return(c=c&&c.data?c.data.$:c)?CKEDITOR.tools.normalizeMouseButton(c.button):!1},normalizeMouseButton:function(c,d){if(!CKEDITOR.env.ie||9<=CKEDITOR.env.version&&!CKEDITOR.env.ie6Compat)return c;for(var a=[[CKEDITOR.MOUSE_BUTTON_LEFT,1],[CKEDITOR.MOUSE_BUTTON_MIDDLE,4],[CKEDITOR.MOUSE_BUTTON_RIGHT,2]],e=0;e<a.length;e++){var f=a[e];if(f[0]===c&&d)return f[1];if(!d&& -f[1]===c)return f[0]}},convertHexStringToBytes:function(c){var d=[],a=c.length/2,e;for(e=0;e<a;e++)d.push(parseInt(c.substr(2*e,2),16));return d},convertBytesToBase64:function(c){var d="",a=c.length,e;for(e=0;e<a;e+=3){var f=c.slice(e,e+3),b=f.length,l=[],g;if(3>b)for(g=b;3>g;g++)f[g]=0;l[0]=(f[0]&252)>>2;l[1]=(f[0]&3)<<4|f[1]>>4;l[2]=(f[1]&15)<<2|(f[2]&192)>>6;l[3]=f[2]&63;for(g=0;4>g;g++)d=g<=b?d+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(l[g]):d+"\x3d"}return d}, +{type:"error",errorCode:b,additionalData:h})};CKEDITOR.on("log",function(b){if(window.console&&window.console.log){var h=console[b.data.type]?b.data.type:"log",g=b.data.errorCode;if(b=b.data.additionalData)console[h]("[CKEDITOR] Error code: "+g+".",b);else console[h]("[CKEDITOR] Error code: "+g+".");console[h]("[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#"+g)}},null,null,999);CKEDITOR.dom={};(function(){function b(n,d,c){this._minInterval= +n;this._context=c;this._lastOutput=this._scheduledTimer=0;this._output=CKEDITOR.tools.bind(d,c||{});var a=this;this.input=function(){function n(){a._lastOutput=(new Date).getTime();a._scheduledTimer=0;a._call()}if(!a._scheduledTimer||!1!==a._reschedule()){var d=(new Date).getTime()-a._lastOutput;d<a._minInterval?a._scheduledTimer=setTimeout(n,a._minInterval-d):n()}}}function h(n,d,c){b.call(this,n,d,c);this._args=[];var a=this;this.input=CKEDITOR.tools.override(this.input,function(n){return function(){a._args= +Array.prototype.slice.call(arguments);n.call(this)}})}var g=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",a=/&/g,m=/>/g,l=/</g,k=/"/g,c=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,f={lt:"\x3c",gt:"\x3e",amp:"\x26",quot:'"',nbsp:" ",shy:""},d=function(n,d){return"#"==d[0]?String.fromCharCode(parseInt(d.slice(1),10)):f[d]};CKEDITOR.on("reset",function(){g=[]});CKEDITOR.tools={arrayCompare:function(n,d){if(!n&&!d)return!0;if(!n||!d||n.length!=d.length)return!1; +for(var c=0;c<n.length;c++)if(n[c]!=d[c])return!1;return!0},getIndex:function(n,d){for(var c=0;c<n.length;++c)if(d(n[c]))return c;return-1},clone:function(n){var d;if(n&&n instanceof Array){d=[];for(var c=0;c<n.length;c++)d[c]=CKEDITOR.tools.clone(n[c]);return d}if(null===n||"object"!=typeof n||n instanceof String||n instanceof Number||n instanceof Boolean||n instanceof Date||n instanceof RegExp||n.nodeType||n.window===n)return n;d=new n.constructor;for(c in n)d[c]=CKEDITOR.tools.clone(n[c]);return d}, +capitalize:function(d,c){return d.charAt(0).toUpperCase()+(c?d.slice(1):d.slice(1).toLowerCase())},extend:function(d){var c=arguments.length,a,f;"boolean"==typeof(a=arguments[c-1])?c--:"boolean"==typeof(a=arguments[c-2])&&(f=arguments[c-1],c-=2);for(var e=1;e<c;e++){var b=arguments[e]||{};CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(b),function(c){if(!0===a||null==d[c])if(!f||c in f)d[c]=b[c]})}return d},prototypedCopy:function(d){var c=function(){};c.prototype=d;return new c},copy:function(d){var c= +{},a;for(a in d)c[a]=d[a];return c},isArray:function(d){return"[object Array]"==Object.prototype.toString.call(d)},isEmpty:function(d){for(var c in d)if(d.hasOwnProperty(c))return!1;return!0},cssVendorPrefix:function(d,c,a){if(a)return e+d+":"+c+";"+d+":"+c;a={};a[d]=c;a[e+d]=c;return a},cssStyleToDomStyle:function(){var d=document.createElement("div").style,c="undefined"!=typeof d.cssFloat?"cssFloat":"undefined"!=typeof d.styleFloat?"styleFloat":"float";return function(d){return"float"==d?c:d.replace(/-./g, +function(d){return d.substr(1).toUpperCase()})}}(),buildStyleHtml:function(d){d=[].concat(d);for(var c,a=[],f=0;f<d.length;f++)if(c=d[f])/@import|[{}]/.test(c)?a.push("\x3cstyle\x3e"+c+"\x3c/style\x3e"):a.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+c+'"\x3e');return a.join("")},htmlEncode:function(d){return void 0===d||null===d?"":String(d).replace(a,"\x26amp;").replace(m,"\x26gt;").replace(l,"\x26lt;")},htmlDecode:function(n){return n.replace(c,d)},htmlEncodeAttr:function(d){return CKEDITOR.tools.htmlEncode(d).replace(k, +"\x26quot;")},htmlDecodeAttr:function(d){return CKEDITOR.tools.htmlDecode(d)},transformPlainTextToHtml:function(d,c){var a=c==CKEDITOR.ENTER_BR,f=this.htmlEncode(d.replace(/\r\n/g,"\n")),f=f.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),e=c==CKEDITOR.ENTER_P?"p":"div";if(!a){var b=/\n{2}/g;if(b.test(f))var k="\x3c"+e+"\x3e",g="\x3c/"+e+"\x3e",f=k+f.replace(b,function(){return g+k})+g}f=f.replace(/\n/g,"\x3cbr\x3e");a||(f=f.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+e+"\x3e)"),function(d){return CKEDITOR.tools.repeat(d, +2)}));f=f.replace(/^ | $/g,"\x26nbsp;");return f=f.replace(/(>|\s) /g,function(d,n){return n+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var d=0;return function(){return++d}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var d="e",c=0;8>c;c++)d+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return d},override:function(d,c){var a=c(d);a.prototype=d.prototype;return a},setTimeout:function(d,c,a,f,e){e||(e=window);a||(a= +e);return e.setTimeout(function(){f?d.apply(a,[].concat(f)):d.apply(a)},c||0)},throttle:function(d,c,a){return new this.buffers.throttle(d,c,a)},trim:function(){var d=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(c){return c.replace(d,"")}}(),ltrim:function(){var d=/^[ \t\n\r]+/g;return function(c){return c.replace(d,"")}}(),rtrim:function(){var d=/[ \t\n\r]+$/g;return function(c){return c.replace(d,"")}}(),indexOf:function(d,c){if("function"==typeof c)for(var a=0,f=d.length;a<f;a++){if(c(d[a]))return a}else{if(d.indexOf)return d.indexOf(c); +a=0;for(f=d.length;a<f;a++)if(d[a]===c)return a}return-1},search:function(d,c){var a=CKEDITOR.tools.indexOf(d,c);return 0<=a?d[a]:null},bind:function(d,c){var a=Array.prototype.slice.call(arguments,2);return function(){return d.apply(c,a.concat(Array.prototype.slice.call(arguments)))}},createClass:function(d){var c=d.$,a=d.base,f=d.privates||d._,e=d.proto;d=d.statics;!c&&(c=function(){a&&this.base.apply(this,arguments)});if(f)var b=c,c=function(){var d=this._||(this._={}),c;for(c in f){var n=f[c]; +d[c]="function"==typeof n?CKEDITOR.tools.bind(n,this):n}b.apply(this,arguments)};a&&(c.prototype=this.prototypedCopy(a.prototype),c.prototype.constructor=c,c.base=a,c.baseProto=a.prototype,c.prototype.base=function t(){this.base=a.prototype.base;a.apply(this,arguments);this.base=t});e&&this.extend(c.prototype,e,!0);d&&this.extend(c,d,!0);return c},addFunction:function(d,c){return g.push(function(){return d.apply(c||this,arguments)})-1},removeFunction:function(d){g[d]=null},callFunction:function(d){var c= +g[d];return c&&c.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var d=/^-?\d+\.?\d*px$/,c;return function(a){c=CKEDITOR.tools.trim(a+"")+"px";return d.test(c)?c:a||""}}(),convertToPx:function(){var d;return function(c){d||(d=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e',CKEDITOR.document),CKEDITOR.document.getBody().append(d));if(!/%$/.test(c)){var a=0>parseFloat(c); +a&&(c=c.replace("-",""));d.setStyle("width",c);c=d.$.clientWidth;return a?-c:c}return c}}(),repeat:function(d,c){return Array(c+1).join(d)},tryThese:function(){for(var d,c=0,a=arguments.length;c<a;c++){var f=arguments[c];try{d=f();break}catch(e){}}return d},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(d){return function(){var c=arguments,a=this;window.setTimeout(function(){d.apply(a,c)},0)}},normalizeCssText:function(d,c){var a=[],f,e=CKEDITOR.tools.parseCssText(d, +!0,c);for(f in e)a.push(f+":"+e[f]);a.sort();return a.length?a.join(";")+";":""},convertRgbToHex:function(d){return d.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(d,c,n,a){d=[c,n,a];for(c=0;3>c;c++)d[c]=("0"+parseInt(d[c],10).toString(16)).slice(-2);return"#"+d.join("")})},normalizeHex:function(d){return d.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(d,c,n,a){d=c.toLowerCase();3==d.length&&(d=d.split(""),d=[d[0],d[0],d[1],d[1],d[2],d[2]].join(""));return"#"+d+a})},parseCssText:function(d, +c,a){var f={};a&&(d=(new CKEDITOR.dom.element("span")).setAttribute("style",d).getAttribute("style")||"");d&&(d=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(d)));if(!d||";"==d)return f;d.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(d,n,a){c&&(n=n.toLowerCase(),"font-family"==n&&(a=a.replace(/\s*,\s*/g,",")),a=CKEDITOR.tools.trim(a));f[n]=a});return f},writeCssText:function(d,c){var a,f=[];for(a in d)f.push(a+":"+d[a]);c&&f.sort();return f.join("; ")}, +objectCompare:function(d,c,a){var f;if(!d&&!c)return!0;if(!d||!c)return!1;for(f in d)if(d[f]!=c[f])return!1;if(!a)for(f in c)if(d[f]!=c[f])return!1;return!0},objectKeys:function(d){return CKEDITOR.tools.object.keys(d)},convertArrayToObject:function(d,c){var a={};1==arguments.length&&(c=!0);for(var f=0,e=d.length;f<e;++f)a[d[f]]=c;return a},fixDomain:function(){for(var d;;)try{d=window.parent.document.domain;break}catch(c){d=d?d.replace(/.+?(?:\.|$)/,""):document.domain;if(!d)break;document.domain= +d}return!!d},eventsBuffer:function(d,c,a){return new this.buffers.event(d,c,a)},enableHtml5Elements:function(d,c){for(var a="abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video".split(" "),f=a.length,e;f--;)e=d.createElement(a[f]),c&&d.appendChild(e)},checkIfAnyArrayItemMatches:function(d,c){for(var a=0,f=d.length;a<f;++a)if(d[a].match(c))return!0;return!1},checkIfAnyObjectPropertyMatches:function(d, +c){for(var a in d)if(a.match(c))return!0;return!1},keystrokeToString:function(d,c){var a=this.keystrokeToArray(d,c);a.display=a.display.join("+");a.aria=a.aria.join("+");return a},keystrokeToArray:function(d,c){var a=c&16711680,f=c&65535,e=CKEDITOR.env.mac,b=[],k=[];a&CKEDITOR.CTRL&&(b.push(e?"⌘":d[17]),k.push(e?d[224]:d[17]));a&CKEDITOR.ALT&&(b.push(e?"⌥":d[18]),k.push(d[18]));a&CKEDITOR.SHIFT&&(b.push(e?"⇧":d[16]),k.push(d[16]));f&&(d[f]?(b.push(d[f]),k.push(d[f])):(b.push(String.fromCharCode(f)), +k.push(String.fromCharCode(f))));return{display:b,aria:k}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",getCookie:function(d){d=d.toLowerCase();for(var c=document.cookie.split(";"),a,f,e=0;e<c.length;e++)if(a=c[e].split("\x3d"),f=decodeURIComponent(CKEDITOR.tools.trim(a[0]).toLowerCase()),f===d)return decodeURIComponent(1<a.length?a[1]:"");return null},setCookie:function(d,c){document.cookie=encodeURIComponent(d)+"\x3d"+encodeURIComponent(c)+ +";path\x3d/"},getCsrfToken:function(){var d=CKEDITOR.tools.getCookie("ckCsrfToken");if(!d||40!=d.length){var d=[],c="";if(window.crypto&&window.crypto.getRandomValues)d=new Uint8Array(40),window.crypto.getRandomValues(d);else for(var a=0;40>a;a++)d.push(Math.floor(256*Math.random()));for(a=0;a<d.length;a++)var f="abcdefghijklmnopqrstuvwxyz0123456789".charAt(d[a]%36),c=c+(.5<Math.random()?f.toUpperCase():f);d=c;CKEDITOR.tools.setCookie("ckCsrfToken",d)}return d},escapeCss:function(d){return d?window.CSS&& +CSS.escape?CSS.escape(d):isNaN(parseInt(d.charAt(0),10))?d:"\\3"+d.charAt(0)+" "+d.substring(1,d.length):""},getMouseButton:function(d){return(d=d&&d.data?d.data.$:d)?CKEDITOR.tools.normalizeMouseButton(d.button):!1},normalizeMouseButton:function(d,c){if(!CKEDITOR.env.ie||9<=CKEDITOR.env.version&&!CKEDITOR.env.ie6Compat)return d;for(var a=[[CKEDITOR.MOUSE_BUTTON_LEFT,1],[CKEDITOR.MOUSE_BUTTON_MIDDLE,4],[CKEDITOR.MOUSE_BUTTON_RIGHT,2]],f=0;f<a.length;f++){var e=a[f];if(e[0]===d&&c)return e[1];if(!c&& +e[1]===d)return e[0]}},convertHexStringToBytes:function(d){var c=[],a=d.length/2,f;for(f=0;f<a;f++)c.push(parseInt(d.substr(2*f,2),16));return c},convertBytesToBase64:function(d){var c="",a=d.length,f;for(f=0;f<a;f+=3){var e=d.slice(f,f+3),b=e.length,k=[],g;if(3>b)for(g=b;3>g;g++)e[g]=0;k[0]=(e[0]&252)>>2;k[1]=(e[0]&3)<<4|e[1]>>4;k[2]=(e[1]&15)<<2|(e[2]&192)>>6;k[3]=e[2]&63;for(g=0;4>g;g++)c=g<=b?c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(k[g]):c+"\x3d"}return c}, style:{parse:{_colors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400", darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC", ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A", lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1", moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460", seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",windowtext:"windowtext",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "), -_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(c){var d={},a=this._findColor(c);a.length&&(d.color=a[0],CKEDITOR.tools.array.forEach(a,function(d){c=c.replace(d,"")}));if(c=CKEDITOR.tools.trim(c))d.unprocessed=c;return d},margin:function(c){return CKEDITOR.tools.style.parse.sideShorthand(c, -function(c){return c.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g)||["0px"]})},sideShorthand:function(c,d){function a(c){e.top=f[c[0]];e.right=f[c[1]];e.bottom=f[c[2]];e.left=f[c[3]]}var e={},f=d?d(c):c.split(/\s+/);switch(f.length){case 1:a([0,0,0,0]);break;case 2:a([0,1,0,1]);break;case 3:a([0,1,2,1]);break;case 4:a([0,1,2,3])}return e},border:function(c){return CKEDITOR.tools.style.border.fromCssRule(c)},_findColor:function(c){var d=[],a=CKEDITOR.tools.array,d=d.concat(c.match(this._rgbaRegExp)|| -[]),d=d.concat(c.match(this._hslaRegExp)||[]);return d=d.concat(a.filter(c.split(/\s+/),function(c){return c.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:c.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(c,d,a){var e=[];this.forEach(c,function(f,b){d.call(a,f,b,c)&&e.push(f)});return e},find:function(c,d,a){for(var e=c.length,f=0;f<e;){if(d.call(a,c[f],f,c))return c[f];f++}},forEach:function(c,d,a){var e=c.length,f;for(f=0;f<e;f++)d.call(a,c[f],f,c)},map:function(c, -d,a){for(var e=[],f=0;f<c.length;f++)e.push(d.call(a,c[f],f,c));return e},reduce:function(c,d,a,e){for(var f=0;f<c.length;f++)a=d.call(e,a,c[f],f,c);return a},every:function(c,d,a){if(!c.length)return!0;d=this.filter(c,d,a);return c.length===d.length},some:function(c,d,a){for(var e=0;e<c.length;e++)if(d.call(a,c[e],e,c))return!0;return!1}},object:{DONT_ENUMS:"toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "),entries:function(c){return CKEDITOR.tools.array.map(CKEDITOR.tools.object.keys(c), -function(d){return[d,c[d]]})},values:function(c){return CKEDITOR.tools.array.map(CKEDITOR.tools.object.keys(c),function(d){return c[d]})},keys:function(c){var d=Object.prototype.hasOwnProperty,a=[],e=CKEDITOR.tools.object.DONT_ENUMS;if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(!c||"object"!==typeof c)){d=[];if("string"===typeof c)for(a=0;a<c.length;a++)d.push(String(a));return d}for(var f in c)a.push(f);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)for(f=0;f<e.length;f++)d.call(c,e[f])&&a.push(e[f]); -return a},findKey:function(c,d){if("object"!==typeof c)return null;for(var a in c)if(c[a]===d)return a;return null},merge:function(c,d){var a=CKEDITOR.tools,e=a.clone(c),f=a.clone(d);a.array.forEach(a.object.keys(f),function(c){e[c]="object"===typeof f[c]&&"object"===typeof e[c]?a.object.merge(e[c],f[c]):f[c]});return e}},getAbsoluteRectPosition:function(c,d){function a(c){if(c){var d=c.getClientRect();e.top+=d.top;e.left+=d.left;"x"in e&&"y"in e&&(e.x+=d.x,e.y+=d.y);a(c.getWindow().getFrame())}} -var e=CKEDITOR.tools.copy(d);a(c.getFrame());var f=CKEDITOR.document.getWindow().getScrollPosition();e.top+=f.y;e.left+=f.x;"x"in e&&"y"in e&&(e.y+=f.y,e.x+=f.x);e.right=e.left+e.width;e.bottom=e.top+e.height;return e}};b.prototype={reset:function(){this._lastOutput=0;this._clearTimer()},_reschedule:function(){return!1},_call:function(){this._output()},_clearTimer:function(){this._scheduledTimer&&clearTimeout(this._scheduledTimer);this._scheduledTimer=0}};h.prototype=CKEDITOR.tools.prototypedCopy(b.prototype); -h.prototype._reschedule=function(){this._scheduledTimer&&this._clearTimer()};h.prototype._call=function(){this._output.apply(this._context,this._args)};CKEDITOR.tools.buffers={};CKEDITOR.tools.buffers.event=b;CKEDITOR.tools.buffers.throttle=h;CKEDITOR.tools.style.border=CKEDITOR.tools.createClass({$:function(c){c=c||{};this.width=c.width;this.style=c.style;this.color=c.color;this._.normalize()},_:{normalizeMap:{color:[[/windowtext/g,"black"]]},normalize:function(){for(var c in this._.normalizeMap){var d= -this[c];d&&(this[c]=CKEDITOR.tools.array.reduce(this._.normalizeMap[c],function(c,d){return c.replace(d[0],d[1])},d))}}},proto:{toString:function(){return CKEDITOR.tools.array.filter([this.width,this.style,this.color],function(c){return!!c}).join(" ")}},statics:{fromCssRule:function(c){var d={},a=c.split(/\s+/g);c=CKEDITOR.tools.style.parse._findColor(c);c.length&&(d.color=c[0]);CKEDITOR.tools.array.forEach(a,function(c){d.style||-1===CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle, -c)?!d.width&&CKEDITOR.tools.style.parse._widthRegExp.test(c)&&(d.width=c):d.style=c});return new CKEDITOR.tools.style.border(d)},splitCssValues:function(c,d){d=d||{};var a=CKEDITOR.tools.array.reduce(["width","style","color"],function(a,e){var f=c["border-"+e]||d[e];a[e]=f?CKEDITOR.tools.style.parse.sideShorthand(f):null;return a},{});return CKEDITOR.tools.array.reduce(["top","right","bottom","left"],function(d,e){var f={},b;for(b in a){var l=c["border-"+e+"-"+b];f[b]=l?l:a[b]&&a[b][e]}d["border-"+ -e]=new CKEDITOR.tools.style.border(f);return d},{})}}});CKEDITOR.tools.array.indexOf=CKEDITOR.tools.indexOf;CKEDITOR.tools.array.isArray=CKEDITOR.tools.isArray;CKEDITOR.MOUSE_BUTTON_LEFT=0;CKEDITOR.MOUSE_BUTTON_MIDDLE=1;CKEDITOR.MOUSE_BUTTON_RIGHT=2})();CKEDITOR.dtd=function(){var b=CKEDITOR.tools.extend,h=function(d,c){for(var a=CKEDITOR.tools.clone(d),f=1;f<arguments.length;f++){c=arguments[f];for(var b in c)delete a[b]}return a},g={},f={},a={address:1,article:1,aside:1,blockquote:1,details:1,div:1, -dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},m={command:1,link:1,meta:1,noscript:1,script:1,style:1},k={},l={"#":1},d={center:1,dir:1,noframes:1};b(g,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1, -q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},l,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});b(f,a,g,d);h={a:h(g,{a:1,button:1}),abbr:g,address:f,area:k,article:f,aside:f,audio:b({source:1,track:1},f),b:g,base:k,bdi:g,bdo:g,blockquote:f,body:f,br:k,button:h(g,{a:1,button:1}),canvas:g,caption:f,cite:g,code:g,col:k,colgroup:{col:1},command:k,datalist:b({option:1},g),dd:f,del:g,details:b({summary:1}, -f),dfn:g,div:f,dl:{dt:1,dd:1},dt:f,em:g,embed:k,fieldset:b({legend:1},f),figcaption:f,figure:b({figcaption:1},f),footer:f,form:f,h1:g,h2:g,h3:g,h4:g,h5:g,h6:g,head:b({title:1,base:1},m),header:f,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:k,html:b({head:1,body:1},f,m),i:g,iframe:l,img:k,input:k,ins:g,kbd:g,keygen:k,label:g,legend:g,li:f,link:k,main:f,map:f,mark:g,menu:b({li:1},f),meta:k,meter:h(g,{meter:1}),nav:f,noscript:b({link:1,meta:1,style:1},g),object:b({param:1},g),ol:{li:1},optgroup:{option:1}, -option:l,output:g,p:g,param:k,pre:g,progress:h(g,{progress:1}),q:g,rp:g,rt:g,ruby:b({rp:1,rt:1},g),s:g,samp:g,script:l,section:f,select:{optgroup:1,option:1},small:g,source:k,span:g,strong:g,style:l,sub:g,summary:b({h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},g),sup:g,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:f,textarea:l,tfoot:{tr:1},th:f,thead:{tr:1},time:h(g,{time:1}),title:l,tr:{th:1,td:1},track:k,u:g,ul:{li:1},"var":g,video:b({source:1,track:1},f),wbr:k,acronym:g,applet:b({param:1}, -f),basefont:k,big:g,center:f,dialog:k,dir:{li:1},font:g,isindex:k,noframes:f,strike:g,tt:g};b(h,{$block:b({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},a,d),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1, +_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(d){var c={},a=this._findColor(d);a.length&&(c.color=a[0],CKEDITOR.tools.array.forEach(a,function(c){d=d.replace(c,"")}));if(d=CKEDITOR.tools.trim(d))c.unprocessed=d;return c},margin:function(d){return CKEDITOR.tools.style.parse.sideShorthand(d, +function(d){return d.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g)||["0px"]})},sideShorthand:function(d,c){function a(d){f.top=e[d[0]];f.right=e[d[1]];f.bottom=e[d[2]];f.left=e[d[3]]}var f={},e=c?c(d):d.split(/\s+/);switch(e.length){case 1:a([0,0,0,0]);break;case 2:a([0,1,0,1]);break;case 3:a([0,1,2,1]);break;case 4:a([0,1,2,3])}return f},border:function(d){return CKEDITOR.tools.style.border.fromCssRule(d)},_findColor:function(d){var c=[],a=CKEDITOR.tools.array,c=c.concat(d.match(this._rgbaRegExp)|| +[]),c=c.concat(d.match(this._hslaRegExp)||[]);return c=c.concat(a.filter(d.split(/\s+/),function(d){return d.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:d.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(d,c,a){var f=[];this.forEach(d,function(e,b){c.call(a,e,b,d)&&f.push(e)});return f},find:function(d,c,a){for(var f=d.length,e=0;e<f;){if(c.call(a,d[e],e,d))return d[e];e++}},forEach:function(d,c,a){var f=d.length,e;for(e=0;e<f;e++)c.call(a,d[e],e,d)},map:function(d, +c,a){for(var f=[],e=0;e<d.length;e++)f.push(c.call(a,d[e],e,d));return f},reduce:function(d,c,a,f){for(var e=0;e<d.length;e++)a=c.call(f,a,d[e],e,d);return a},every:function(d,c,a){if(!d.length)return!0;c=this.filter(d,c,a);return d.length===c.length},some:function(d,c,a){for(var f=0;f<d.length;f++)if(c.call(a,d[f],f,d))return!0;return!1}},object:{DONT_ENUMS:"toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "),entries:function(d){return CKEDITOR.tools.array.map(CKEDITOR.tools.object.keys(d), +function(c){return[c,d[c]]})},values:function(d){return CKEDITOR.tools.array.map(CKEDITOR.tools.object.keys(d),function(c){return d[c]})},keys:function(d){var c=Object.prototype.hasOwnProperty,a=[],f=CKEDITOR.tools.object.DONT_ENUMS;if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(!d||"object"!==typeof d)){c=[];if("string"===typeof d)for(a=0;a<d.length;a++)c.push(String(a));return c}for(var e in d)a.push(e);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)for(e=0;e<f.length;e++)c.call(d,f[e])&&a.push(f[e]); +return a},findKey:function(d,c){if("object"!==typeof d)return null;for(var a in d)if(d[a]===c)return a;return null},merge:function(d,c){var a=CKEDITOR.tools,f=a.clone(d),e=a.clone(c);a.array.forEach(a.object.keys(e),function(d){f[d]="object"===typeof e[d]&&"object"===typeof f[d]?a.object.merge(f[d],e[d]):e[d]});return f}},getAbsoluteRectPosition:function(d,c){function a(d){if(d){var c=d.getClientRect();f.top+=c.top;f.left+=c.left;"x"in f&&"y"in f&&(f.x+=c.x,f.y+=c.y);a(d.getWindow().getFrame())}} +var f=CKEDITOR.tools.copy(c);a(d.getFrame());var e=CKEDITOR.document.getWindow().getScrollPosition();f.top+=e.y;f.left+=e.x;"x"in f&&"y"in f&&(f.y+=e.y,f.x+=e.x);f.right=f.left+f.width;f.bottom=f.top+f.height;return f}};b.prototype={reset:function(){this._lastOutput=0;this._clearTimer()},_reschedule:function(){return!1},_call:function(){this._output()},_clearTimer:function(){this._scheduledTimer&&clearTimeout(this._scheduledTimer);this._scheduledTimer=0}};h.prototype=CKEDITOR.tools.prototypedCopy(b.prototype); +h.prototype._reschedule=function(){this._scheduledTimer&&this._clearTimer()};h.prototype._call=function(){this._output.apply(this._context,this._args)};CKEDITOR.tools.buffers={};CKEDITOR.tools.buffers.event=b;CKEDITOR.tools.buffers.throttle=h;CKEDITOR.tools.style.border=CKEDITOR.tools.createClass({$:function(d){d=d||{};this.width=d.width;this.style=d.style;this.color=d.color;this._.normalize()},_:{normalizeMap:{color:[[/windowtext/g,"black"]]},normalize:function(){for(var d in this._.normalizeMap){var c= +this[d];c&&(this[d]=CKEDITOR.tools.array.reduce(this._.normalizeMap[d],function(d,c){return d.replace(c[0],c[1])},c))}}},proto:{toString:function(){return CKEDITOR.tools.array.filter([this.width,this.style,this.color],function(d){return!!d}).join(" ")}},statics:{fromCssRule:function(d){var c={},a=d.split(/\s+/g);d=CKEDITOR.tools.style.parse._findColor(d);d.length&&(c.color=d[0]);CKEDITOR.tools.array.forEach(a,function(d){c.style||-1===CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle, +d)?!c.width&&CKEDITOR.tools.style.parse._widthRegExp.test(d)&&(c.width=d):c.style=d});return new CKEDITOR.tools.style.border(c)},splitCssValues:function(d,c){c=c||{};var a=CKEDITOR.tools.array.reduce(["width","style","color"],function(a,f){var e=d["border-"+f]||c[f];a[f]=e?CKEDITOR.tools.style.parse.sideShorthand(e):null;return a},{});return CKEDITOR.tools.array.reduce(["top","right","bottom","left"],function(c,f){var e={},b;for(b in a){var k=d["border-"+f+"-"+b];e[b]=k?k:a[b]&&a[b][f]}c["border-"+ +f]=new CKEDITOR.tools.style.border(e);return c},{})}}});CKEDITOR.tools.array.indexOf=CKEDITOR.tools.indexOf;CKEDITOR.tools.array.isArray=CKEDITOR.tools.isArray;CKEDITOR.MOUSE_BUTTON_LEFT=0;CKEDITOR.MOUSE_BUTTON_MIDDLE=1;CKEDITOR.MOUSE_BUTTON_RIGHT=2})();CKEDITOR.dtd=function(){var b=CKEDITOR.tools.extend,h=function(c,d){for(var a=CKEDITOR.tools.clone(c),e=1;e<arguments.length;e++){d=arguments[e];for(var b in d)delete a[b]}return a},g={},e={},a={address:1,article:1,aside:1,blockquote:1,details:1,div:1, +dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},m={command:1,link:1,meta:1,noscript:1,script:1,style:1},l={},k={"#":1},c={center:1,dir:1,noframes:1};b(g,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1, +q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},k,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});b(e,a,g,c);h={a:h(g,{a:1,button:1}),abbr:g,address:e,area:l,article:e,aside:e,audio:b({source:1,track:1},e),b:g,base:l,bdi:g,bdo:g,blockquote:e,body:e,br:l,button:h(g,{a:1,button:1}),canvas:g,caption:e,cite:g,code:g,col:l,colgroup:{col:1},command:l,datalist:b({option:1},g),dd:e,del:g,details:b({summary:1}, +e),dfn:g,div:e,dl:{dt:1,dd:1},dt:e,em:g,embed:l,fieldset:b({legend:1},e),figcaption:e,figure:b({figcaption:1},e),footer:e,form:e,h1:g,h2:g,h3:g,h4:g,h5:g,h6:g,head:b({title:1,base:1},m),header:e,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:l,html:b({head:1,body:1},e,m),i:g,iframe:k,img:l,input:l,ins:g,kbd:g,keygen:l,label:g,legend:g,li:e,link:l,main:e,map:e,mark:g,menu:b({li:1},e),meta:l,meter:h(g,{meter:1}),nav:e,noscript:b({link:1,meta:1,style:1},g),object:b({param:1},g),ol:{li:1},optgroup:{option:1}, +option:k,output:g,p:g,param:l,pre:g,progress:h(g,{progress:1}),q:g,rp:g,rt:g,ruby:b({rp:1,rt:1},g),s:g,samp:g,script:k,section:e,select:{optgroup:1,option:1},small:g,source:l,span:g,strong:g,style:k,sub:g,summary:b({h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},g),sup:g,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:e,textarea:k,tfoot:{tr:1},th:e,thead:{tr:1},time:h(g,{time:1}),title:k,tr:{th:1,td:1},track:l,u:g,ul:{li:1},"var":g,video:b({source:1,track:1},e),wbr:l,acronym:g,applet:b({param:1}, +e),basefont:l,big:g,center:e,dialog:l,dir:{li:1},font:g,isindex:l,noframes:e,strike:g,tt:g};b(h,{$block:b({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},a,c),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1, footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:g,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:b({body:1,head:1,html:1},h.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1, button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1, ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return h}();CKEDITOR.dom.event=function(b){this.$=b};CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var b=this.getKey();if(this.$.ctrlKey||this.$.metaKey)b+=CKEDITOR.CTRL;this.$.shiftKey&&(b+=CKEDITOR.SHIFT);this.$.altKey&&(b+=CKEDITOR.ALT);return b}, preventDefault:function(b){var h=this.$;h.preventDefault?h.preventDefault():h.returnValue=!1;b&&this.stopPropagation()},stopPropagation:function(){var b=this.$;b.stopPropagation?b.stopPropagation():b.cancelBubble=!0},getTarget:function(){var b=this.$.target||this.$.srcElement;return b?new CKEDITOR.dom.node(b):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var b=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(b.documentElement.scrollLeft||b.body.scrollLeft), -y:this.$.pageY||this.$.clientY+(b.documentElement.scrollTop||b.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(b){b&&(this.$=b)};CKEDITOR.dom.domObject.prototype=function(){var b=function(b,g){return function(f){"undefined"!=typeof CKEDITOR&&b.fire(g,new CKEDITOR.dom.event(f))}};return{getPrivate:function(){var b;(b=this.getCustomData("_"))|| +y:this.$.pageY||this.$.clientY+(b.documentElement.scrollTop||b.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(b){b&&(this.$=b)};CKEDITOR.dom.domObject.prototype=function(){var b=function(b,g){return function(e){"undefined"!=typeof CKEDITOR&&b.fire(g,new CKEDITOR.dom.event(e))}};return{getPrivate:function(){var b;(b=this.getCustomData("_"))|| this.setCustomData("_",b={});return b},on:function(h){var g=this.getCustomData("_cke_nativeListeners");g||(g={},this.setCustomData("_cke_nativeListeners",g));g[h]||(g=g[h]=b(this,h),this.$.addEventListener?this.$.addEventListener(h,g,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+h,g));return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(b){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(b)){var g=this.getCustomData("_cke_nativeListeners"), -f=g&&g[b];f&&(this.$.removeEventListener?this.$.removeEventListener(b,f,!1):this.$.detachEvent&&this.$.detachEvent("on"+b,f),delete g[b])}},removeAllListeners:function(){try{var b=this.getCustomData("_cke_nativeListeners"),g;for(g in b){var f=b[g];this.$.detachEvent?this.$.detachEvent("on"+g,f):this.$.removeEventListener&&this.$.removeEventListener(g,f,!1);delete b[g]}}catch(a){if(!CKEDITOR.env.edge||-2146828218!==a.number)throw a;}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}();(function(b){var h= -{};CKEDITOR.on("reset",function(){h={}});b.equals=function(b){try{return b&&b.$===this.$}catch(f){return!1}};b.setCustomData=function(b,f){var a=this.getUniqueId();(h[a]||(h[a]={}))[b]=f;return this};b.getCustomData=function(b){var f=this.$["data-cke-expando"];return(f=f&&h[f])&&b in f?f[b]:null};b.removeCustomData=function(b){var f=this.$["data-cke-expando"],f=f&&h[f],a,m;f&&(a=f[b],m=b in f,delete f[b]);return m?a:null};b.clearCustomData=function(){this.removeAllListeners();var b=this.getUniqueId(); +e=g&&g[b];e&&(this.$.removeEventListener?this.$.removeEventListener(b,e,!1):this.$.detachEvent&&this.$.detachEvent("on"+b,e),delete g[b])}},removeAllListeners:function(){try{var b=this.getCustomData("_cke_nativeListeners"),g;for(g in b){var e=b[g];this.$.detachEvent?this.$.detachEvent("on"+g,e):this.$.removeEventListener&&this.$.removeEventListener(g,e,!1);delete b[g]}}catch(a){if(!CKEDITOR.env.edge||-2146828218!==a.number)throw a;}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}();(function(b){var h= +{};CKEDITOR.on("reset",function(){h={}});b.equals=function(b){try{return b&&b.$===this.$}catch(e){return!1}};b.setCustomData=function(b,e){var a=this.getUniqueId();(h[a]||(h[a]={}))[b]=e;return this};b.getCustomData=function(b){var e=this.$["data-cke-expando"];return(e=e&&h[e])&&b in e?e[b]:null};b.removeCustomData=function(b){var e=this.$["data-cke-expando"],e=e&&h[e],a,m;e&&(a=e[b],m=b in e,delete e[b]);return m?a:null};b.clearCustomData=function(){this.removeAllListeners();var b=this.getUniqueId(); b&&delete h[b]};b.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(b)})(CKEDITOR.dom.domObject.prototype);CKEDITOR.dom.node=function(b){return b?new CKEDITOR.dom[b.nodeType==CKEDITOR.NODE_DOCUMENT?"document":b.nodeType==CKEDITOR.NODE_ELEMENT?"element":b.nodeType==CKEDITOR.NODE_TEXT?"text":b.nodeType==CKEDITOR.NODE_COMMENT?"comment":b.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](b): this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11;CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16;CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(b,h){b.append(this,h);return b},clone:function(b,h){function g(a){a["data-cke-expando"]&& -(a["data-cke-expando"]=!1);if(a.nodeType==CKEDITOR.NODE_ELEMENT||a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)if(h||a.nodeType!=CKEDITOR.NODE_ELEMENT||a.removeAttribute("id",!1),b){a=a.childNodes;for(var f=0;f<a.length;f++)g(a[f])}}function f(a){if(a.type==CKEDITOR.NODE_ELEMENT||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){if(a.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=a.getName();":"==g[0]&&a.renameNode(g.substring(1))}if(b)for(g=0;g<a.getChildCount();g++)f(a.getChild(g))}}var a=this.$.cloneNode(b); -g(a);a=new CKEDITOR.dom.node(a);CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&f(a);return a},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(b){b.$.parentNode.insertBefore(this.$,b.$.nextSibling);return b},insertBefore:function(b){b.$.parentNode.insertBefore(this.$,b.$);return b},insertBeforeMe:function(b){this.$.parentNode.insertBefore(b.$,this.$); -return b},getAddress:function(b){for(var h=[],g=this.getDocument().$.documentElement,f=this;f&&f!=g;){var a=f.getParent();a&&h.unshift(this.getIndex.call(f,b));f=a}return h},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(b){function h(a,f){var b=f?a.getNext():a.getPrevious();return b&&b.type==CKEDITOR.NODE_TEXT?b.isEmpty()?h(b,f):b:null}var g=this,f=-1,a;if(!this.getParent()||b&&g.type==CKEDITOR.NODE_TEXT&&g.isEmpty()&& -!h(g)&&!h(g,!0))return-1;do if(!b||g.equals(this)||g.type!=CKEDITOR.NODE_TEXT||!a&&!g.isEmpty())f++,a=g.type==CKEDITOR.NODE_TEXT;while(g=g.getPrevious());return f},getNextSourceNode:function(b,h,g){if(g&&!g.call){var f=g;g=function(a){return!a.equals(f)}}b=!b&&this.getFirst&&this.getFirst();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&g&&!1===g(this,!0))return null;b=this.getNext()}for(;!b&&(a=(a||this).getParent());){if(g&&!1===g(a,!0))return null;b=a.getNext()}return!b||g&&!1===g(b)?null:h&& -h!=b.type?b.getNextSourceNode(!1,h,g):b},getPreviousSourceNode:function(b,h,g){if(g&&!g.call){var f=g;g=function(a){return!a.equals(f)}}b=!b&&this.getLast&&this.getLast();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&g&&!1===g(this,!0))return null;b=this.getPrevious()}for(;!b&&(a=(a||this).getParent());){if(g&&!1===g(a,!0))return null;b=a.getPrevious()}return!b||g&&!1===g(b)?null:h&&b.type!=h?b.getPreviousSourceNode(!1,h,g):b},getPrevious:function(b){var h=this.$,g;do g=(h=h.previousSibling)&& +(a["data-cke-expando"]=!1);if(a.nodeType==CKEDITOR.NODE_ELEMENT||a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)if(h||a.nodeType!=CKEDITOR.NODE_ELEMENT||a.removeAttribute("id",!1),b){a=a.childNodes;for(var e=0;e<a.length;e++)g(a[e])}}function e(a){if(a.type==CKEDITOR.NODE_ELEMENT||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){if(a.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=a.getName();":"==g[0]&&a.renameNode(g.substring(1))}if(b)for(g=0;g<a.getChildCount();g++)e(a.getChild(g))}}var a=this.$.cloneNode(b); +g(a);a=new CKEDITOR.dom.node(a);CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&e(a);return a},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(b){b.$.parentNode.insertBefore(this.$,b.$.nextSibling);return b},insertBefore:function(b){b.$.parentNode.insertBefore(this.$,b.$);return b},insertBeforeMe:function(b){this.$.parentNode.insertBefore(b.$,this.$); +return b},getAddress:function(b){for(var h=[],g=this.getDocument().$.documentElement,e=this;e&&e!=g;){var a=e.getParent();a&&h.unshift(this.getIndex.call(e,b));e=a}return h},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(b){function h(a,e){var b=e?a.getNext():a.getPrevious();return b&&b.type==CKEDITOR.NODE_TEXT?b.isEmpty()?h(b,e):b:null}var g=this,e=-1,a;if(!this.getParent()||b&&g.type==CKEDITOR.NODE_TEXT&&g.isEmpty()&& +!h(g)&&!h(g,!0))return-1;do if(!b||g.equals(this)||g.type!=CKEDITOR.NODE_TEXT||!a&&!g.isEmpty())e++,a=g.type==CKEDITOR.NODE_TEXT;while(g=g.getPrevious());return e},getNextSourceNode:function(b,h,g){if(g&&!g.call){var e=g;g=function(a){return!a.equals(e)}}b=!b&&this.getFirst&&this.getFirst();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&g&&!1===g(this,!0))return null;b=this.getNext()}for(;!b&&(a=(a||this).getParent());){if(g&&!1===g(a,!0))return null;b=a.getNext()}return!b||g&&!1===g(b)?null:h&& +h!=b.type?b.getNextSourceNode(!1,h,g):b},getPreviousSourceNode:function(b,h,g){if(g&&!g.call){var e=g;g=function(a){return!a.equals(e)}}b=!b&&this.getLast&&this.getLast();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&g&&!1===g(this,!0))return null;b=this.getPrevious()}for(;!b&&(a=(a||this).getParent());){if(g&&!1===g(a,!0))return null;b=a.getPrevious()}return!b||g&&!1===g(b)?null:h&&b.type!=h?b.getPreviousSourceNode(!1,h,g):b},getPrevious:function(b){var h=this.$,g;do g=(h=h.previousSibling)&& 10!=h.nodeType&&new CKEDITOR.dom.node(h);while(g&&b&&!b(g));return g},getNext:function(b){var h=this.$,g;do g=(h=h.nextSibling)&&new CKEDITOR.dom.node(h);while(g&&b&&!b(g));return g},getParent:function(b){var h=this.$.parentNode;return h&&(h.nodeType==CKEDITOR.NODE_ELEMENT||b&&h.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(h):null},getParents:function(b){var h=this,g=[];do g[b?"push":"unshift"](h);while(h=h.getParent());return g},getCommonAncestor:function(b){if(b.equals(this))return this; if(b.contains&&b.contains(this))return b;var h=this.contains?this:this.getParent();do if(h.contains(b))return h;while(h=h.getParent());return null},getPosition:function(b){var h=this.$,g=b.$;if(h.compareDocumentPosition)return h.compareDocumentPosition(g);if(h==g)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&b.type==CKEDITOR.NODE_ELEMENT){if(h.contains){if(h.contains(g))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(g.contains(h))return CKEDITOR.POSITION_IS_CONTAINED+ -CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in h)return 0>h.sourceIndex||0>g.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:h.sourceIndex<g.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}h=this.getAddress();b=b.getAddress();for(var g=Math.min(h.length,b.length),f=0;f<g;f++)if(h[f]!=b[f])return h[f]<b[f]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return h.length<b.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}, -getAscendant:function(b,h){var g=this.$,f,a;h||(g=g.parentNode);"function"==typeof b?(a=!0,f=b):(a=!1,f=function(a){a="string"==typeof a.nodeName?a.nodeName.toLowerCase():"";return"string"==typeof b?a==b:a in b});for(;g;){if(f(a?new CKEDITOR.dom.node(g):g))return new CKEDITOR.dom.node(g);try{g=g.parentNode}catch(m){g=null}}return null},hasAscendant:function(b,h){var g=this.$;h||(g=g.parentNode);for(;g;){if(g.nodeName&&g.nodeName.toLowerCase()==b)return!0;g=g.parentNode}return!1},move:function(b,h){b.append(this.remove(), +CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in h)return 0>h.sourceIndex||0>g.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:h.sourceIndex<g.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}h=this.getAddress();b=b.getAddress();for(var g=Math.min(h.length,b.length),e=0;e<g;e++)if(h[e]!=b[e])return h[e]<b[e]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return h.length<b.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}, +getAscendant:function(b,h){var g=this.$,e,a;h||(g=g.parentNode);"function"==typeof b?(a=!0,e=b):(a=!1,e=function(a){a="string"==typeof a.nodeName?a.nodeName.toLowerCase():"";return"string"==typeof b?a==b:a in b});for(;g;){if(e(a?new CKEDITOR.dom.node(g):g))return new CKEDITOR.dom.node(g);try{g=g.parentNode}catch(m){g=null}}return null},hasAscendant:function(b,h){var g=this.$;h||(g=g.parentNode);for(;g;){if(g.nodeName&&g.nodeName.toLowerCase()==b)return!0;g=g.parentNode}return!1},move:function(b,h){b.append(this.remove(), h)},remove:function(b){var h=this.$,g=h.parentNode;if(g){if(b)for(;b=h.firstChild;)g.insertBefore(h.removeChild(b),h);g.removeChild(h)}return this},replace:function(b){this.insertBefore(b);b.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var b;this.getFirst&&(b=this.getFirst());){if(b.type==CKEDITOR.NODE_TEXT){var h=CKEDITOR.tools.ltrim(b.getText()),g=b.getLength();if(h)h.length<g&&(b.split(g-h.length),this.$.removeChild(this.$.firstChild));else{b.remove();continue}}break}}, rtrim:function(){for(var b;this.getLast&&(b=this.getLast());){if(b.type==CKEDITOR.NODE_TEXT){var h=CKEDITOR.tools.rtrim(b.getText()),g=b.getLength();if(h)h.length<g&&(b.split(h.length),this.$.lastChild.parentNode.removeChild(this.$.lastChild));else{b.remove();continue}}break}CKEDITOR.env.needsBrFiller&&(b=this.$.lastChild)&&1==b.type&&"br"==b.nodeName.toLowerCase()&&b.parentNode.removeChild(b)},isReadOnly:function(b){var h=this;this.type!=CKEDITOR.NODE_ELEMENT&&(h=this.getParent());CKEDITOR.env.edge&& h&&h.is("textarea","input")&&(b=!0);if(!b&&h&&"undefined"!=typeof h.$.isContentEditable)return!(h.$.isContentEditable||h.data("cke-editable"));for(;h;){if(h.data("cke-editable"))return!1;if(h.hasAttribute("contenteditable"))return"false"==h.getAttribute("contenteditable");h=h.getParent()}return!0}});CKEDITOR.dom.window=function(b){CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject;CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()}, getViewPaneSize:function(){var b=this.$.document,h="CSS1Compat"==b.compatMode;return{width:(h?b.documentElement.clientWidth:b.body.clientWidth)||0,height:(h?b.documentElement.clientHeight:b.body.clientHeight)||0}},getScrollPosition:function(){var b=this.$;if("pageXOffset"in b)return{x:b.pageXOffset||0,y:b.pageYOffset||0};b=b.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop||b.body.scrollTop||0}},getFrame:function(){var b=this.$.frameElement;return b? new CKEDITOR.dom.element.get(b):null}});CKEDITOR.dom.document=function(b){CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject;CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(b){if(this.$.createStyleSheet)this.$.createStyleSheet(b);else{var h=new CKEDITOR.dom.element("link");h.setAttributes({rel:"stylesheet",type:"text/css",href:b});this.getHead().append(h)}},appendStyleText:function(b){if(this.$.createStyleSheet){var h= this.$.createStyleSheet("");h.cssText=b}else{var g=new CKEDITOR.dom.element("style",this);g.append(new CKEDITOR.dom.text(b,this));this.getHead().append(g)}return h||g.$.sheet},createElement:function(b,h){var g=new CKEDITOR.dom.element(b,this);h&&(h.attributes&&g.setAttributes(h.attributes),h.styles&&g.setStyles(h.styles));return g},createText:function(b){return new CKEDITOR.dom.text(b,this)},focus:function(){this.getWindow().focus()},getActive:function(){var b;try{b=this.$.activeElement}catch(h){return null}return new CKEDITOR.dom.element(b)}, -getById:function(b){return(b=this.$.getElementById(b))?new CKEDITOR.dom.element(b):null},getByAddress:function(b,h){for(var g=this.$.documentElement,f=0;g&&f<b.length;f++){var a=b[f];if(h)for(var m=-1,k=0;k<g.childNodes.length;k++){var l=g.childNodes[k];if(!0!==h||3!=l.nodeType||!l.previousSibling||3!=l.previousSibling.nodeType)if(m++,m==a){g=l;break}}else g=g.childNodes[a]}return g?new CKEDITOR.dom.node(g):null},getElementsByTag:function(b,h){CKEDITOR.env.ie&&8>=document.documentMode||!h||(b=h+":"+ +getById:function(b){return(b=this.$.getElementById(b))?new CKEDITOR.dom.element(b):null},getByAddress:function(b,h){for(var g=this.$.documentElement,e=0;g&&e<b.length;e++){var a=b[e];if(h)for(var m=-1,l=0;l<g.childNodes.length;l++){var k=g.childNodes[l];if(!0!==h||3!=k.nodeType||!k.previousSibling||3!=k.previousSibling.nodeType)if(m++,m==a){g=k;break}}else g=g.childNodes[a]}return g?new CKEDITOR.dom.node(g):null},getElementsByTag:function(b,h){CKEDITOR.env.ie&&8>=document.documentMode||!h||(b=h+":"+ b);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(b))},getHead:function(){var b=this.$.getElementsByTagName("head")[0];return b=b?new CKEDITOR.dom.element(b):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(b){this.$.open("text/html", "replace");CKEDITOR.env.ie&&(b=b.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(b);this.$.close()},find:function(b){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b))},findOne:function(b){return(b=this.$.querySelector(b))?new CKEDITOR.dom.element(b):null},_getHtml5ShivFrag:function(){var b=this.getCustomData("html5ShivFrag");b||(b=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(b, !0),this.setCustomData("html5ShivFrag",b));return b}});CKEDITOR.dom.nodeList=function(b){this.$=b};CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(b){return 0>b||b>=this.$.length?null:(b=this.$[b])?new CKEDITOR.dom.node(b):null},toArray:function(){return CKEDITOR.tools.array.map(this.$,function(b){return new CKEDITOR.dom.node(b)})}};CKEDITOR.dom.element=function(b,h){"string"==typeof b&&(b=(h?h.$:document).createElement(b));CKEDITOR.dom.domObject.call(this, -b)};CKEDITOR.dom.element.get=function(b){return(b="string"==typeof b?document.getElementById(b)||document.getElementsByName(b)[0]:b)&&(b.$?b:new CKEDITOR.dom.element(b))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(b,h){var g=new CKEDITOR.dom.element("div",h);g.setHtml(b);return g.getFirst().remove()};CKEDITOR.dom.element.setMarker=function(b,h,g,f){var a=h.getCustomData("list_marker_id")||h.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), -m=h.getCustomData("list_marker_names")||h.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");b[a]=h;m[g]=1;return h.setCustomData(g,f)};CKEDITOR.dom.element.clearAllMarkers=function(b){for(var h in b)CKEDITOR.dom.element.clearMarkers(b,b[h],1)};CKEDITOR.dom.element.clearMarkers=function(b,h,g){var f=h.getCustomData("list_marker_names"),a=h.getCustomData("list_marker_id"),m;for(m in f)h.removeCustomData(m);h.removeCustomData("list_marker_names");g&&(h.removeCustomData("list_marker_id"), -delete b[a])};(function(){function b(a,d){return-1<(" "+a+" ").replace(m," ").indexOf(" "+d+" ")}function h(a){var d=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),d=!1);return function(){d||a.removeAttribute("id")}}function g(a,d){var e=CKEDITOR.tools.escapeCss(a.$.id);return"#"+e+" "+d.split(/,\s*/).join(", #"+e+" ")}function f(a){for(var d=0,e=0,c=k[a].length;e<c;e++)d+=parseFloat(this.getComputedStyle(k[a][e])||0,10)||0;return d}var a=document.createElement("_").classList,a="undefined"!== -typeof a&&null!==String(a.add).match(/\[Native code\]/gi),m=/[\n\t\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:a?function(a){this.$.classList.add(a);return this}:function(a){var d=this.$.className;d&&(b(d,a)||(d+=" "+a));this.$.className=d||a;return this},removeClass:a?function(a){var d=this.$;d.classList.remove(a);d.className||d.removeAttribute("class");return this}:function(a){var d=this.getAttribute("class");d&&b(d,a)&&((d=d.replace(new RegExp("(?:^|\\s+)"+ -a+"(?\x3d\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class"));return this},hasClass:function(a){return b(this.$.className,a)},append:function(a,d){"string"==typeof a&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!= -this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,d){var e=new CKEDITOR.dom.range(this.getDocument());e.setStartAfter(this);e.setEndAfter(a); -var c=e.extractContents(!1,d||!1),f;e.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(e=new CKEDITOR.dom.element("div");f=c.getFirst();)f.$.style.backgroundColor&&(f.$.style.backgroundColor=f.$.style.backgroundColor),e.append(f);e.insertAfter(this);e.remove(!0)}else c.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$): -d!=a.$&&d.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(d){}}return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(a){var d=CKEDITOR.tools.extend({}, -this.$.getBoundingClientRect());!d.width&&(d.width=d.right-d.left);!d.height&&(d.height=d.bottom-d.top);return a?CKEDITOR.tools.getAbsoluteRectPosition(this.getWindow(),d):d},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var e=this.getDocument()._getHtml5ShivFrag();e.appendChild(d);d.innerHTML=a;e.removeChild(d);return a}catch(c){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0)); -return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(d){return this.$.getAttribute(d,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d){switch(d){case "class":d="className";break;case "http-equiv":d="httpEquiv";break;case "name":return this.$.name;case "tabindex":return d=this.$.getAttribute(d, -2),0!==d&&0===this.$.tabIndex&&(d=null),d;case "checked":return d=this.$.attributes.getNamedItem(d),(d.specified?d.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[d];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(d,2)}:a}(),getAttributes:function(a){var d={},e=this.$.attributes,c;a=CKEDITOR.tools.isArray(a)? -a:[];for(c=0;c<e.length;c++)-1===CKEDITOR.tools.indexOf(a,e[c].name)&&(d[e[c].name]=e[c].value);return d},getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getClientSize:function(){return{width:this.$.clientWidth,height:this.$.clientHeight}},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}, +b)};CKEDITOR.dom.element.get=function(b){return(b="string"==typeof b?document.getElementById(b)||document.getElementsByName(b)[0]:b)&&(b.$?b:new CKEDITOR.dom.element(b))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(b,h){var g=new CKEDITOR.dom.element("div",h);g.setHtml(b);return g.getFirst().remove()};CKEDITOR.dom.element.setMarker=function(b,h,g,e){var a=h.getCustomData("list_marker_id")||h.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), +m=h.getCustomData("list_marker_names")||h.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");b[a]=h;m[g]=1;return h.setCustomData(g,e)};CKEDITOR.dom.element.clearAllMarkers=function(b){for(var h in b)CKEDITOR.dom.element.clearMarkers(b,b[h],1)};CKEDITOR.dom.element.clearMarkers=function(b,h,g){var e=h.getCustomData("list_marker_names"),a=h.getCustomData("list_marker_id"),m;for(m in e)h.removeCustomData(m);h.removeCustomData("list_marker_names");g&&(h.removeCustomData("list_marker_id"), +delete b[a])};(function(){function b(a,c){return-1<(" "+a+" ").replace(m," ").indexOf(" "+c+" ")}function h(a){var c=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),c=!1);return function(){c||a.removeAttribute("id")}}function g(a,c){var f=CKEDITOR.tools.escapeCss(a.$.id);return"#"+f+" "+c.split(/,\s*/).join(", #"+f+" ")}function e(a){for(var c=0,f=0,d=l[a].length;f<d;f++)c+=parseFloat(this.getComputedStyle(l[a][f])||0,10)||0;return c}var a=document.createElement("_").classList,a="undefined"!== +typeof a&&null!==String(a.add).match(/\[Native code\]/gi),m=/[\n\t\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:a?function(a){this.$.classList.add(a);return this}:function(a){var c=this.$.className;c&&(b(c,a)||(c+=" "+a));this.$.className=c||a;return this},removeClass:a?function(a){var c=this.$;c.classList.remove(a);c.className||c.removeAttribute("class");return this}:function(a){var c=this.getAttribute("class");c&&b(c,a)&&((c=c.replace(new RegExp("(?:^|\\s+)"+ +a+"(?\x3d\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",c):this.removeAttribute("class"));return this},hasClass:function(a){return b(this.$.className,a)},append:function(a,c){"string"==typeof a&&(a=this.getDocument().createElement(a));c?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var c=new CKEDITOR.dom.element("div",this.getDocument());c.setHtml(a);c.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!= +this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,c){var f=new CKEDITOR.dom.range(this.getDocument());f.setStartAfter(this);f.setEndAfter(a); +var d=f.extractContents(!1,c||!1),e;f.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(f=new CKEDITOR.dom.element("div");e=d.getFirst();)e.$.style.backgroundColor&&(e.$.style.backgroundColor=e.$.style.backgroundColor),f.append(e);f.insertAfter(this);f.remove(!0)}else d.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var c=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?c.contains(a.getParent().$): +c!=a.$&&c.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(c){}}return function(c){c?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(a){var c=CKEDITOR.tools.extend({}, +this.$.getBoundingClientRect());!c.width&&(c.width=c.right-c.left);!c.height&&(c.height=c.bottom-c.top);return a?CKEDITOR.tools.getAbsoluteRectPosition(this.getWindow(),c):c},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var c=this.$;if(this.getParent())return c.innerHTML=a;var f=this.getDocument()._getHtml5ShivFrag();f.appendChild(c);c.innerHTML=a;f.removeChild(c);return a}catch(d){this.$.innerHTML="";c=new CKEDITOR.dom.element("body",this.getDocument());c.$.innerHTML=a;for(c=c.getChildren();c.count();)this.append(c.getItem(0)); +return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(c){this.$[a?"textContent":"innerText"]=c}}(),getAttribute:function(){var a=function(c){return this.$.getAttribute(c,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(c){switch(c){case "class":c="className";break;case "http-equiv":c="httpEquiv";break;case "name":return this.$.name;case "tabindex":return c=this.$.getAttribute(c, +2),0!==c&&0===this.$.tabIndex&&(c=null),c;case "checked":return c=this.$.attributes.getNamedItem(c),(c.specified?c.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[c];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(c,2)}:a}(),getAttributes:function(a){var c={},f=this.$.attributes,d;a=CKEDITOR.tools.isArray(a)? +a:[];for(d=0;d<f.length;d++)-1===CKEDITOR.tools.indexOf(a,f[d].name)&&(c[f[d].name]=f[d].value);return c},getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getClientSize:function(){return{width:this.$.clientWidth,height:this.$.clientHeight}},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var c=this.getWindow().$.getComputedStyle(this.$,null);return c?c.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}, getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:function(){var a=this.$.tabIndex;return 0!==a||CKEDITOR.dtd.$tabIndex[this.getName()]||0===parseInt(this.getAttribute("tabindex"),10)?a:-1},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name|| -null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&8>=document.documentMode){var d=this.$.scopeName;"HTML"!=d&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&a&&!a(d)&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&a&&!a(d)&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]}, -is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]==a)return!0;return!1},isEditable:function(a){var d=this.getName();return this.isReadOnly()||"none"==this.getComputedStyle("display")||"hidden"==this.getComputedStyle("visibility")||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount()?!1:!1!==a?(a=CKEDITOR.dtd[d]|| -CKEDITOR.dtd.span,!(!a||!a["#"])):!0},isIdentical:function(a){var d=this.clone(0,1);a=a.clone(0,1);d.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode)return d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText),a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText),d.$.isEqualNode(a.$);d=d.getOuterHtml();a= -a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var e=this.getParent();e.type==CKEDITOR.NODE_ELEMENT&&(e=e.clone(),e.setHtml(d),d=e.getHtml(),e.setHtml(a),a=e.getHtml())}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),d,e;a&&CKEDITOR.env.webkit&&(d=this.getWindow(),!d.equals(CKEDITOR.document.getWindow())&&(e=d.$.frameElement)&&(a=(new CKEDITOR.dom.element(e)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1; -for(var a=this.getChildren(),d=0,e=a.count();d<e;d++){var c=a.getItem(d);if(c.type!=CKEDITOR.NODE_ELEMENT||!c.data("cke-bookmark"))if(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()))return!1}return!0},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var e=a[d];switch(e.nodeName){case "class":if(this.getAttribute("class"))return!0;case "data-cke-expando":continue; -default:if(e.specified)return!0}}return!1}:function(){var a=this.$.attributes,d=a.length,e={"data-cke-expando":1,_moz_dirty:1};return 0<d&&(2<d||!e[a[0].nodeName]||2==d&&!e[a[1].nodeName])},hasAttribute:function(){function a(d){var e=this.$.attributes.getNamedItem(d);if("input"==this.getName())switch(d){case "class":return 0<this.$.className.length;case "checked":return!!this.$.checked;case "value":return d=this.getAttribute("type"),"checkbox"==d||"radio"==d?"on"!=this.$.value:!!this.$.value}return e? -e.specified:!1}return CKEDITOR.env.ie?8>CKEDITOR.env.version?function(d){return"name"==d?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var e=this.$;a=a.$;if(e!=a){var c;if(d)for(;c=e.lastChild;)a.insertBefore(e.removeChild(c),a.firstChild);else for(;c=e.firstChild;)a.appendChild(e.removeChild(c))}},mergeSiblings:function(){function a(d,e,c){if(e&&e.type==CKEDITOR.NODE_ELEMENT){for(var f= -[];e.data("cke-bookmark")||e.isEmptyInlineRemoveable();)if(f.push(e),e=c?e.getNext():e.getPrevious(),!e||e.type!=CKEDITOR.NODE_ELEMENT)return;if(d.isIdentical(e)){for(var b=c?d.getLast():d.getFirst();f.length;)f.shift().move(d,!c);e.moveChildren(d,!c);e.remove();b&&b.type==CKEDITOR.NODE_ELEMENT&&b.mergeSiblings()}}}return function(d){if(!1===d||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", -visibility:""})},setAttribute:function(){var a=function(a,e){this.$.setAttribute(a,e);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,e){"class"==d?this.$.className=e:"style"==d?this.$.style.cssText=e:"tabindex"==d?this.$.tabIndex=e:"checked"==d?this.$.checked=e:"contenteditable"==d?a.call(this,"contentEditable",e):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,e){if("src"==d&&e.match(/^http:\/\//))try{a.apply(this, -arguments)}catch(c){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d= -0;d<a.length;d++)this.removeAttribute(a[d]);else for(d in a=a||this.getAttributes(),a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(d.removeProperty||"border"!=a&&"margin"!=a&&"padding"!=a)d.removeProperty?d.removeProperty(a):d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute("style");else{var e=["top","left","right","bottom"],c;"border"==a&&(c=["color","style","width"]);for(var d=[],f=0;f<e.length;f++)if(c)for(var b= -0;b<c.length;b++)d.push([a,e[f],c[b]].join("-"));else d.push([a,e[f]].join("-"));for(a=0;a<d.length;a++)this.removeStyle(d[a])}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", -"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),e=0,c=d.count();e<c;e++)a=d.getItem(e),a.setAttribute("unselectable","on")}},getPositionedAncestor:function(){for(var a=this;"html"!=a.getName();){if("static"!=a.getComputedStyle("position"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var d=0,e=0,c=this.getDocument(),f=c.getBody(),b="BackCompat"==c.$.compatMode;if(document.documentElement.getBoundingClientRect&&(CKEDITOR.env.ie? -8!==CKEDITOR.env.version:1)){var g=this.$.getBoundingClientRect(),h=c.$.documentElement,k=h.clientTop||f.$.clientTop||0,q=h.clientLeft||f.$.clientLeft||0,m=!0;CKEDITOR.env.ie&&(m=c.getDocumentElement().contains(this),c=c.getBody().contains(this),m=b&&c||!b&&m);m&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(d=f.$.scrollLeft||h.scrollLeft,e=f.$.scrollTop||h.scrollTop):(e=b?f.$:h,d=e.scrollLeft,e=e.scrollTop),d=g.left+d-q,e=g.top+e-k)}else for(k=this,q=null;k&&"body"!=k.getName()&& -"html"!=k.getName();){d+=k.$.offsetLeft-k.$.scrollLeft;e+=k.$.offsetTop-k.$.scrollTop;k.equals(this)||(d+=k.$.clientLeft||0,e+=k.$.clientTop||0);for(;q&&!q.equals(k);)d-=q.$.scrollLeft,e-=q.$.scrollTop,q=q.getParent();q=k;k=(g=k.$.offsetParent)?new CKEDITOR.dom.element(g):null}a&&(g=this.getWindow(),k=a.getWindow(),!g.equals(k)&&g.$.frameElement&&(a=(new CKEDITOR.dom.element(g.$.frameElement)).getDocumentPosition(a),d+=a.x,e+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko|| -b||(d+=this.$.clientLeft?1:0,e+=this.$.clientTop?1:0);return{x:d,y:e}},scrollIntoView:function(a){var d=this.getParent();if(d){do if((d.$.clientWidth&&d.$.clientWidth<d.$.scrollWidth||d.$.clientHeight&&d.$.clientHeight<d.$.scrollHeight)&&!d.is("body")&&this.scrollIntoParent(d,a,1),d.is("html")){var e=d.getWindow();try{var c=e.$.frameElement;c&&(d=new CKEDITOR.dom.element(c))}catch(f){}}while(d=d.getParent())}},scrollIntoParent:function(a,d,e){var c,f,b,g;function h(c,d){/body|html/.test(a.getName())? -a.getWindow().$.scrollBy(c,d):(a.$.scrollLeft+=c,a.$.scrollTop+=d)}function k(c,a){var d={x:0,y:0};if(!c.is(m?"body":"html")){var e=c.$.getBoundingClientRect();d.x=e.left;d.y=e.top}e=c.getWindow();e.equals(a)||(e=k(CKEDITOR.dom.element.get(e.$.frameElement),a),d.x+=e.x,d.y+=e.y);return d}function q(c,a){return parseInt(c.getComputedStyle("margin-"+a)||0,10)||0}!a&&(a=this.getWindow());b=a.getDocument();var m="BackCompat"==b.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=m?b.getBody():b.getDocumentElement()); -CKEDITOR.env.webkit&&(b=this.getEditor(!1))&&(b._.previousScrollTop=null);b=a.getWindow();f=k(this,b);var t=k(a,b),y=this.$.offsetHeight;c=this.$.offsetWidth;var v=a.$.clientHeight,x=a.$.clientWidth;b=f.x-q(this,"left")-t.x||0;g=f.y-q(this,"top")-t.y||0;c=f.x+c+q(this,"right")-(t.x+x)||0;f=f.y+y+q(this,"bottom")-(t.y+v)||0;(0>g||0<f)&&h(0,!0===d?g:!1===d?f:0>g?g:f);e&&(0>b||0<c)&&h(0>b?b:c,0)},setState:function(a,d,e){d=d||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(d+"_on");this.removeClass(d+ -"_off");this.removeClass(d+"_disabled");e&&this.setAttribute("aria-pressed",!0);e&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(d+"_disabled");this.removeClass(d+"_off");this.removeClass(d+"_on");e&&this.setAttribute("aria-disabled",!0);e&&this.removeAttribute("aria-pressed");break;default:this.addClass(d+"_off"),this.removeClass(d+"_on"),this.removeClass(d+"_disabled"),e&&this.removeAttribute("aria-pressed"),e&&this.removeAttribute("aria-disabled")}}, -getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(d){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,d){var e=this.$.attributes;d=d||{};for(var c=0;c<e.length;c++){var f=e[c],b=f.nodeName.toLowerCase(),g;if(!(b in d))if("checked"==b&&(g=this.getAttribute(b)))a.setAttribute(b,g);else if(!CKEDITOR.env.ie||this.hasAttribute(b))g=this.getAttribute(b),null===g&&(g=f.nodeValue),a.setAttribute(b,g)}""!==this.$.style.cssText&& -(a.$.style.cssText=this.$.style.cssText)},renameNode:function(a){if(this.getName()!=a){var d=this.getDocument();a=new CKEDITOR.dom.element(a,d);this.copyAttributes(a);this.moveChildren(a);this.getParent(!0)&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(d,e){var c=d.childNodes;if(0<=e&&e<c.length)return c[e]}return function(d){var e=this.$;if(d.slice)for(d=d.slice();0<d.length&&e;)e=a(e, -d.shift());else e=a(e,d);return e?new CKEDITOR.dom.node(e):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){function a(d){return d.type==CKEDITOR.NODE_ELEMENT&&d.hasClass("cke_enable_context_menu")}this.on("contextmenu",function(d){d.data.getTarget().getAscendant(a,!0)||d.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir|| -"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,d){a="data-"+a;if(void 0===d)return this.getAttribute(a);!1===d?this.removeAttribute(a):this.setAttribute(a,d);return null},getEditor:function(a){var d=CKEDITOR.instances,e,c,f;a=a||void 0===a;for(e in d)if(c=d[e],c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||!a&&(f=c.editable())&&(f.equals(this)||f.contains(this)))return c;return null},find:function(a){var d=h(this);a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(g(this, -a)));d();return a},findOne:function(a){var d=h(this);a=this.$.querySelector(g(this,a));d();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,d,e){if(!(e||d&&this.type!=d))var c=a(this);if(!1!==c){e=this.getChildren();for(var f=0;f<e.count();f++)c=e.getItem(f),c.type==CKEDITOR.NODE_ELEMENT?c.forEach(a,d):d&&c.type!=d||a(c)}},fireEventHandler:function(a,d){var e="on"+a,c=this.$;if(CKEDITOR.env.ie&&9>CKEDITOR.env.version){var f=c.ownerDocument.createEventObject(),b;for(b in d)f[b]=d[b];c.fireEvent(e, -f)}else c[c[a]?a:e](d)},isDetached:function(){var a=this.getDocument(),d=a.getDocumentElement();return d.equals(this)||d.contains(this)?!CKEDITOR.env.ie||8<CKEDITOR.env.version&&!CKEDITOR.env.quirks?!a.$.defaultView:!1:!0}});var k={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,d,e){"number"==typeof d&&(!e||CKEDITOR.env.ie&&CKEDITOR.env.quirks|| -(d-=f.call(this,a)),this.setStyle(a,d+"px"))};CKEDITOR.dom.element.prototype.getSize=function(a,d){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;d&&(e-=f.call(this,a));return e}})();CKEDITOR.dom.documentFragment=function(b){b=b||CKEDITOR.document;this.$=b.type==CKEDITOR.NODE_DOCUMENT?b.$.createDocumentFragment():b};CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT, +null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&8>=document.documentMode){var c=this.$.scopeName;"HTML"!=c&&(a=c.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var c=this.$.firstChild;(c=c&&new CKEDITOR.dom.node(c))&&a&&!a(c)&&(c=c.getNext(a));return c},getLast:function(a){var c=this.$.lastChild;(c=c&&new CKEDITOR.dom.node(c))&&a&&!a(c)&&(c=c.getPrevious(a));return c},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]}, +is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];for(var c=0;c<arguments.length;c++)if(arguments[c]==a)return!0;return!1},isEditable:function(a){var c=this.getName();return this.isReadOnly()||"none"==this.getComputedStyle("display")||"hidden"==this.getComputedStyle("visibility")||CKEDITOR.dtd.$nonEditable[c]||CKEDITOR.dtd.$empty[c]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount()?!1:!1!==a?(a=CKEDITOR.dtd[c]|| +CKEDITOR.dtd.span,!(!a||!a["#"])):!0},isIdentical:function(a){var c=this.clone(0,1);a=a.clone(0,1);c.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(c.$.isEqualNode)return c.$.style.cssText=CKEDITOR.tools.normalizeCssText(c.$.style.cssText),a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText),c.$.isEqualNode(a.$);c=c.getOuterHtml();a= +a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var f=this.getParent();f.type==CKEDITOR.NODE_ELEMENT&&(f=f.clone(),f.setHtml(c),c=f.getHtml(),f.setHtml(a),a=f.getHtml())}return c==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),c,f;a&&CKEDITOR.env.webkit&&(c=this.getWindow(),!c.equals(CKEDITOR.document.getWindow())&&(f=c.$.frameElement)&&(a=(new CKEDITOR.dom.element(f)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1; +for(var a=this.getChildren(),c=0,f=a.count();c<f;c++){var d=a.getItem(c);if(d.type!=CKEDITOR.NODE_ELEMENT||!d.data("cke-bookmark"))if(d.type==CKEDITOR.NODE_ELEMENT&&!d.isEmptyInlineRemoveable()||d.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(d.getText()))return!1}return!0},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,c=0;c<a.length;c++){var f=a[c];switch(f.nodeName){case "class":if(this.getAttribute("class"))return!0;case "data-cke-expando":continue; +default:if(f.specified)return!0}}return!1}:function(){var a=this.$.attributes,c=a.length,f={"data-cke-expando":1,_moz_dirty:1};return 0<c&&(2<c||!f[a[0].nodeName]||2==c&&!f[a[1].nodeName])},hasAttribute:function(){function a(c){var f=this.$.attributes.getNamedItem(c);if("input"==this.getName())switch(c){case "class":return 0<this.$.className.length;case "checked":return!!this.$.checked;case "value":return c=this.getAttribute("type"),"checkbox"==c||"radio"==c?"on"!=this.$.value:!!this.$.value}return f? +f.specified:!1}return CKEDITOR.env.ie?8>CKEDITOR.env.version?function(c){return"name"==c?!!this.$.name:a.call(this,c)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,c){var f=this.$;a=a.$;if(f!=a){var d;if(c)for(;d=f.lastChild;)a.insertBefore(f.removeChild(d),a.firstChild);else for(;d=f.firstChild;)a.appendChild(f.removeChild(d))}},mergeSiblings:function(){function a(c,f,d){if(f&&f.type==CKEDITOR.NODE_ELEMENT){for(var e= +[];f.data("cke-bookmark")||f.isEmptyInlineRemoveable();)if(e.push(f),f=d?f.getNext():f.getPrevious(),!f||f.type!=CKEDITOR.NODE_ELEMENT)return;if(c.isIdentical(f)){for(var b=d?c.getLast():c.getFirst();e.length;)e.shift().move(c,!d);f.moveChildren(c,!d);f.remove();b&&b.type==CKEDITOR.NODE_ELEMENT&&b.mergeSiblings()}}}return function(c){if(!1===c||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", +visibility:""})},setAttribute:function(){var a=function(a,f){this.$.setAttribute(a,f);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(c,f){"class"==c?this.$.className=f:"style"==c?this.$.style.cssText=f:"tabindex"==c?this.$.tabIndex=f:"checked"==c?this.$.checked=f:"contenteditable"==c?a.call(this,"contentEditable",f):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(c,f){if("src"==c&&f.match(/^http:\/\//))try{a.apply(this, +arguments)}catch(d){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var c in a)this.setAttribute(c,a[c]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var c= +0;c<a.length;c++)this.removeAttribute(a[c]);else for(c in a=a||this.getAttributes(),a)a.hasOwnProperty(c)&&this.removeAttribute(c)},removeStyle:function(a){var c=this.$.style;if(c.removeProperty||"border"!=a&&"margin"!=a&&"padding"!=a)c.removeProperty?c.removeProperty(a):c.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute("style");else{var f=["top","left","right","bottom"],d;"border"==a&&(d=["color","style","width"]);for(var c=[],e=0;e<f.length;e++)if(d)for(var b= +0;b<d.length;b++)c.push([a,f[e],d[b]].join("-"));else c.push([a,f[e]].join("-"));for(a=0;a<c.length;a++)this.removeStyle(c[a])}},setStyle:function(a,c){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=c;return this},setStyles:function(a){for(var c in a)this.setStyle(c,a[c]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,c=this.getElementsByTag("*"),f=0,d=c.count();f<d;f++)a=c.getItem(f),a.setAttribute("unselectable","on")}},getPositionedAncestor:function(){for(var a=this;"html"!=a.getName();){if("static"!=a.getComputedStyle("position"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var c=0,f=0,d=this.getDocument(),e=d.getBody(),b="BackCompat"==d.$.compatMode;if(document.documentElement.getBoundingClientRect&&(CKEDITOR.env.ie? +8!==CKEDITOR.env.version:1)){var g=this.$.getBoundingClientRect(),h=d.$.documentElement,l=h.clientTop||e.$.clientTop||0,q=h.clientLeft||e.$.clientLeft||0,m=!0;CKEDITOR.env.ie&&(m=d.getDocumentElement().contains(this),d=d.getBody().contains(this),m=b&&d||!b&&m);m&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(c=e.$.scrollLeft||h.scrollLeft,f=e.$.scrollTop||h.scrollTop):(f=b?e.$:h,c=f.scrollLeft,f=f.scrollTop),c=g.left+c-q,f=g.top+f-l)}else for(l=this,q=null;l&&"body"!=l.getName()&& +"html"!=l.getName();){c+=l.$.offsetLeft-l.$.scrollLeft;f+=l.$.offsetTop-l.$.scrollTop;l.equals(this)||(c+=l.$.clientLeft||0,f+=l.$.clientTop||0);for(;q&&!q.equals(l);)c-=q.$.scrollLeft,f-=q.$.scrollTop,q=q.getParent();q=l;l=(g=l.$.offsetParent)?new CKEDITOR.dom.element(g):null}a&&(g=this.getWindow(),l=a.getWindow(),!g.equals(l)&&g.$.frameElement&&(a=(new CKEDITOR.dom.element(g.$.frameElement)).getDocumentPosition(a),c+=a.x,f+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko|| +b||(c+=this.$.clientLeft?1:0,f+=this.$.clientTop?1:0);return{x:c,y:f}},scrollIntoView:function(a){var c=this.getParent();if(c){do if((c.$.clientWidth&&c.$.clientWidth<c.$.scrollWidth||c.$.clientHeight&&c.$.clientHeight<c.$.scrollHeight)&&!c.is("body")&&this.scrollIntoParent(c,a,1),c.is("html")){var f=c.getWindow();try{var d=f.$.frameElement;d&&(c=new CKEDITOR.dom.element(d))}catch(e){}}while(c=c.getParent())}},scrollIntoParent:function(a,c,f){var d,e,b,g;function h(d,c){/body|html/.test(a.getName())? +a.getWindow().$.scrollBy(d,c):(a.$.scrollLeft+=d,a.$.scrollTop+=c)}function l(d,a){var c={x:0,y:0};if(!d.is(m?"body":"html")){var f=d.$.getBoundingClientRect();c.x=f.left;c.y=f.top}f=d.getWindow();f.equals(a)||(f=l(CKEDITOR.dom.element.get(f.$.frameElement),a),c.x+=f.x,c.y+=f.y);return c}function q(d,a){return parseInt(d.getComputedStyle("margin-"+a)||0,10)||0}!a&&(a=this.getWindow());b=a.getDocument();var m="BackCompat"==b.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=m?b.getBody():b.getDocumentElement()); +CKEDITOR.env.webkit&&(b=this.getEditor(!1))&&(b._.previousScrollTop=null);b=a.getWindow();e=l(this,b);var t=l(a,b),z=this.$.offsetHeight;d=this.$.offsetWidth;var y=a.$.clientHeight,u=a.$.clientWidth;b=e.x-q(this,"left")-t.x||0;g=e.y-q(this,"top")-t.y||0;d=e.x+d+q(this,"right")-(t.x+u)||0;e=e.y+z+q(this,"bottom")-(t.y+y)||0;(0>g||0<e)&&h(0,!0===c?g:!1===c?e:0>g?g:e);f&&(0>b||0<d)&&h(0>b?b:d,0)},setState:function(a,c,f){c=c||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(c+"_on");this.removeClass(c+ +"_off");this.removeClass(c+"_disabled");f&&this.setAttribute("aria-pressed",!0);f&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(c+"_disabled");this.removeClass(c+"_off");this.removeClass(c+"_on");f&&this.setAttribute("aria-disabled",!0);f&&this.removeAttribute("aria-pressed");break;default:this.addClass(c+"_off"),this.removeClass(c+"_on"),this.removeClass(c+"_disabled"),f&&this.removeAttribute("aria-pressed"),f&&this.removeAttribute("aria-disabled")}}, +getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(c){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,c){var f=this.$.attributes;c=c||{};for(var d=0;d<f.length;d++){var e=f[d],b=e.nodeName.toLowerCase(),g;if(!(b in c))if("checked"==b&&(g=this.getAttribute(b)))a.setAttribute(b,g);else if(!CKEDITOR.env.ie||this.hasAttribute(b))g=this.getAttribute(b),null===g&&(g=e.nodeValue),a.setAttribute(b,g)}""!==this.$.style.cssText&& +(a.$.style.cssText=this.$.style.cssText)},renameNode:function(a){if(this.getName()!=a){var c=this.getDocument();a=new CKEDITOR.dom.element(a,c);this.copyAttributes(a);this.moveChildren(a);this.getParent(!0)&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(c,f){var d=c.childNodes;if(0<=f&&f<d.length)return d[f]}return function(c){var f=this.$;if(c.slice)for(c=c.slice();0<c.length&&f;)f=a(f, +c.shift());else f=a(f,c);return f?new CKEDITOR.dom.node(f):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){function a(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.hasClass("cke_enable_context_menu")}this.on("contextmenu",function(c){c.data.getTarget().getAscendant(a,!0)||c.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir|| +"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,c){a="data-"+a;if(void 0===c)return this.getAttribute(a);!1===c?this.removeAttribute(a):this.setAttribute(a,c);return null},getEditor:function(a){var c=CKEDITOR.instances,f,d,e;a=a||void 0===a;for(f in c)if(d=c[f],d.element.equals(this)&&d.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||!a&&(e=d.editable())&&(e.equals(this)||e.contains(this)))return d;return null},find:function(a){var c=h(this);a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(g(this, +a)));c();return a},findOne:function(a){var c=h(this);a=this.$.querySelector(g(this,a));c();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,c,f){if(!(f||c&&this.type!=c))var d=a(this);if(!1!==d){f=this.getChildren();for(var e=0;e<f.count();e++)d=f.getItem(e),d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,c):c&&d.type!=c||a(d)}},fireEventHandler:function(a,c){var f="on"+a,d=this.$;if(CKEDITOR.env.ie&&9>CKEDITOR.env.version){var e=d.ownerDocument.createEventObject(),b;for(b in c)e[b]=c[b];d.fireEvent(f, +e)}else d[d[a]?a:f](c)},isDetached:function(){var a=this.getDocument(),c=a.getDocumentElement();return c.equals(this)||c.contains(this)?!CKEDITOR.env.ie||8<CKEDITOR.env.version&&!CKEDITOR.env.quirks?!a.$.defaultView:!1:!0}});var l={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,f){"number"==typeof c&&(!f||CKEDITOR.env.ie&&CKEDITOR.env.quirks|| +(c-=e.call(this,a)),this.setStyle(a,c+"px"))};CKEDITOR.dom.element.prototype.getSize=function(a,c){var f=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(f-=e.call(this,a));return f}})();CKEDITOR.dom.documentFragment=function(b){b=b||CKEDITOR.document;this.$=b.type==CKEDITOR.NODE_DOCUMENT?b.$.createDocumentFragment():b};CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT, insertAfterNode:function(b){b=b.$;b.parentNode.insertBefore(this.$,b.nextSibling)},getHtml:function(){var b=new CKEDITOR.dom.element("div");this.clone(1,1).appendTo(b);return b.getHtml().replace(/\s*data-cke-expando=".*?"/g,"")}},!0,{append:1,appendBogus:1,clone:1,getFirst:1,getHtml:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype, -CKEDITOR.dom.document.prototype,!0,{find:1,findOne:1});(function(){function b(c,a){var d=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(d.collapsed)return this.end(),null;d.optimize()}var e,f=d.startContainer;e=d.endContainer;var b=d.startOffset,n=d.endOffset,g,h=this.guard,k=this.type,m=c?"getPreviousSourceNode":"getNextSourceNode";if(!c&&!this._.guardLTR){var l=e.type==CKEDITOR.NODE_ELEMENT?e:e.getParent(),A=e.type==CKEDITOR.NODE_ELEMENT?e.getChild(n):e.getNext();this._.guardLTR= -function(c,a){return(!a||!l.equals(c))&&(!A||!c.equals(A))&&(c.type!=CKEDITOR.NODE_ELEMENT||!a||!c.equals(d.root))}}if(c&&!this._.guardRTL){var G=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),C=f.type==CKEDITOR.NODE_ELEMENT?b?f.getChild(b-1):null:f.getPrevious();this._.guardRTL=function(c,a){return(!a||!G.equals(c))&&(!C||!c.equals(C))&&(c.type!=CKEDITOR.NODE_ELEMENT||!a||!c.equals(d.root))}}var I=c?this._.guardRTL:this._.guardLTR;g=h?function(c,a){return!1===I(c,a)?!1:h(c,a)}:I;this.current?e=this.current[m](!1, -k,g):(c?e.type==CKEDITOR.NODE_ELEMENT&&(e=0<n?e.getChild(n-1):!1===g(e,!0)?null:e.getPreviousSourceNode(!0,k,g)):(e=f,e.type==CKEDITOR.NODE_ELEMENT&&((e=e.getChild(b))||(e=!1===g(f,!0)?null:f.getNextSourceNode(!0,k,g)))),e&&!1===g(e)&&(e=null));for(;e&&!this._.end;){this.current=e;if(!this.evaluator||!1!==this.evaluator(e)){if(!a)return e}else if(a&&this.evaluator)return!1;e=e[m](!1,k,g)}this.end();return this.current=null}function h(c){for(var a,d=null;a=b.call(this,c);)d=a;return d}CKEDITOR.dom.walker= -CKEDITOR.tools.createClass({$:function(c){this.range=c;this._={}},proto:{end:function(){this._.end=1},next:function(){return b.call(this)},previous:function(){return b.call(this,1)},checkForward:function(){return!1!==b.call(this,0,1)},checkBackward:function(){return!1!==b.call(this,1,1)},lastForward:function(){return h.call(this)},lastBackward:function(){return h.call(this,1)},reset:function(){delete this.current;this._={}}}});var g={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1, -"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},f={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(c){return"none"!=this.getComputedStyle("float")||this.getComputedStyle("position")in f||!g[this.getComputedStyle("display")]?!!(this.is(CKEDITOR.dtd.$block)||c&&this.is(c)):!0};CKEDITOR.dom.walker.blockBoundary=function(c){return function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary(c))}};CKEDITOR.dom.walker.listItemBoundary= -function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(c,a){function d(c){return c&&c.getName&&"span"==c.getName()&&c.data("cke-bookmark")}return function(e){var f,b;f=e&&e.type!=CKEDITOR.NODE_ELEMENT&&(b=e.getParent())&&d(b);f=c?f:f||d(e);return!!(a^f)}};CKEDITOR.dom.walker.whitespaces=function(c){return function(a){var d;a&&a.type==CKEDITOR.NODE_TEXT&&(d=!CKEDITOR.tools.trim(a.getText())||CKEDITOR.env.webkit&&a.getText()==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE); -return!!(c^d)}};CKEDITOR.dom.walker.invisible=function(c){var a=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.env.webkit?1:0;return function(e){a(e)?e=1:(e.type==CKEDITOR.NODE_TEXT&&(e=e.getParent()),e=e.$.offsetWidth<=d);return!!(c^e)}};CKEDITOR.dom.walker.nodeType=function(c,a){return function(d){return!!(a^d.type==c)}};CKEDITOR.dom.walker.bogus=function(c){function d(c){return!m(c)&&!k(c)}return function(e){var f=CKEDITOR.env.needsBrFiller?e.is&&e.is("br"):e.getText&&a.test(e.getText());f&&(f=e.getParent(), -e=e.getNext(d),f=f.isBlockBoundary()&&(!e||e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()));return!!(c^f)}};CKEDITOR.dom.walker.temp=function(c){return function(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());a=a&&a.hasAttribute("data-cke-temp");return!!(c^a)}};var a=/^[\t\r\n ]*(?: |\xa0)$/,m=CKEDITOR.dom.walker.whitespaces(),k=CKEDITOR.dom.walker.bookmark(),l=CKEDITOR.dom.walker.temp(),d=function(c){return k(c)||m(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.is(CKEDITOR.dtd.$inline)&&!c.is(CKEDITOR.dtd.$empty)}; -CKEDITOR.dom.walker.ignored=function(c){return function(a){a=m(a)||k(a)||l(a);return!!(c^a)}};var e=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(c){return function(a){for(var d=0,f=a.getChildCount();d<f;++d)if(!e(a.getChild(d)))return!!c;return!c}};var c=CKEDITOR.dom.walker.empty(),n=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(c){var a={},d;for(d in c)CKEDITOR.dtd[d]["#"]&&(a[d]=1);return a}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable= -function(a){return function(d){d=e(d)?!1:d.type==CKEDITOR.NODE_TEXT||d.type==CKEDITOR.NODE_ELEMENT&&(d.is(CKEDITOR.dtd.$inline)||d.is("hr")||"false"==d.getAttribute("contenteditable")||!CKEDITOR.env.needsBrFiller&&d.is(n)&&c(d))?!0:!1;return!!(a^d)}};CKEDITOR.dom.element.prototype.getBogus=function(){var c=this;do c=c.getPreviousSourceNode();while(d(c));return c&&(CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&a.test(c.getText()))?c:!1}})();CKEDITOR.dom.range=function(b){this.endOffset=this.endContainer= -this.startOffset=this.startContainer=null;this.collapsed=!0;var h=b instanceof CKEDITOR.dom.document;this.document=h?b:b.getDocument();this.root=h?b.getBody():b};(function(){function b(c){c.collapsed=c.startContainer&&c.endContainer&&c.startContainer.equals(c.endContainer)&&c.startOffset==c.endOffset}function h(c,a,d,e,f){function b(c,a,d,e){var n=d?c.getPrevious():c.getNext();if(e&&k)return n;l||e?a.append(c.clone(!0,f),d):(c.remove(),m&&a.append(c,d));return n}function g(){var c,a,d,e=Math.min(H.length, -E.length);for(c=0;c<e;c++)if(a=H[c],d=E[c],!a.equals(d))return c;return c-1}function h(){var a=Q-1,d=I&&J&&!x.equals(B);a<O-1||a<P-1||d?(d?c.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START):P==a+1&&C?c.moveToPosition(E[a],CKEDITOR.POSITION_BEFORE_END):c.moveToPosition(E[a+1],CKEDITOR.POSITION_BEFORE_START),e&&(a=H[a+1])&&a.type==CKEDITOR.NODE_ELEMENT&&(d=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',c.document),d.insertAfter(a), -a.mergeSiblings(!1),c.moveToBookmark({startNode:d}))):c.collapse(!0)}c.optimizeBookmark();var k=0===a,m=1==a,l=2==a;a=l||m;var x=c.startContainer,B=c.endContainer,D=c.startOffset,A=c.endOffset,G,C,I,J,F,M;if(l&&B.type==CKEDITOR.NODE_TEXT&&(x.equals(B)||x.type===CKEDITOR.NODE_ELEMENT&&x.getFirst().equals(B)))d.append(c.document.createText(B.substring(D,A)));else{B.type==CKEDITOR.NODE_TEXT?l?M=!0:B=B.split(A):0<B.getChildCount()?A>=B.getChildCount()?(B=B.getChild(A-1),C=!0):B=B.getChild(A):J=C=!0;x.type== -CKEDITOR.NODE_TEXT?l?F=!0:x.split(D):0<x.getChildCount()?0===D?(x=x.getChild(D),G=!0):x=x.getChild(D-1):I=G=!0;for(var H=x.getParents(),E=B.getParents(),Q=g(),O=H.length-1,P=E.length-1,K=d,X,S,W,ea=-1,L=Q;L<=O;L++){S=H[L];W=S.getNext();for(L!=O||S.equals(E[L])&&O<P?a&&(X=K.append(S.clone(0,f))):G?b(S,K,!1,I):F&&K.append(c.document.createText(S.substring(D)));W;){if(W.equals(E[L])){ea=L;break}W=b(W,K)}K=X}K=d;for(L=Q;L<=P;L++)if(d=E[L],W=d.getPrevious(),d.equals(H[L]))a&&(K=K.getChild(0));else{L!= -P||d.equals(H[L])&&P<O?a&&(X=K.append(d.clone(0,f))):C?b(d,K,!1,J):M&&K.append(c.document.createText(d.substring(0,A)));if(L>ea)for(;W;)W=b(W,K,!0);K=X}l||h()}}function g(){var c=!1,a=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),e=CKEDITOR.dom.walker.bogus();return function(f){return d(f)||a(f)?!0:e(f)&&!c?c=!0:f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(m)?!1:!0}}function f(c){var a=CKEDITOR.dom.walker.whitespaces(), -d=CKEDITOR.dom.walker.bookmark(1);return function(e){return d(e)||a(e)?!0:!c&&k(e)||e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$removeEmpty)}}function a(c){return function(){var a;return this[c?"getPreviousNode":"getNextNode"](function(c){!a&&e(c)&&(a=c);return d(c)&&!(k(c)&&c.equals(a))})}}var m={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},k=CKEDITOR.dom.walker.bogus(), -l=/^[\t\r\n ]*(?: |\xa0)$/,d=CKEDITOR.dom.walker.editable(),e=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var c=new CKEDITOR.dom.range(this.root);c._setStartContainer(this.startContainer);c.startOffset=this.startOffset;c._setEndContainer(this.endContainer);c.endOffset=this.endOffset;c.collapsed=this.collapsed;return c},collapse:function(c){c?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer), -this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(c){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||h(this,2,a,!1,"undefined"==typeof c?!0:c);return a},deleteContents:function(c){this.collapsed||h(this,0,null,c)},extractContents:function(c,a){var d=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||h(this,1,d,c,"undefined"==typeof a?!0:a);return d},equals:function(c){return this.startOffset===c.startOffset&&this.endOffset===c.endOffset&& -this.startContainer.equals(c.startContainer)&&this.endContainer.equals(c.endContainer)},createBookmark:function(c){function a(c){return c.getAscendant(function(c){var a;if(a=c.data&&c.data("cke-temp"))a=-1===CKEDITOR.tools.array.indexOf(["cke_copybin","cke_pastebin"],c.getAttribute("id"));return a},!0)}var d=this.startContainer,e=this.endContainer,f=this.collapsed,b,g,h,k;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");c&&(h="cke_bm_"+ -CKEDITOR.tools.getNextNumber(),b.setAttribute("id",h+(f?"C":"S")));f||(g=b.clone(),g.setHtml("\x26nbsp;"),c&&g.setAttribute("id",h+"E"),k=this.clone(),a(e)&&(e=a(e),k.moveToPosition(e,CKEDITOR.POSITION_AFTER_END)),k.collapse(),k.insertNode(g));k=this.clone();a(d)&&(e=a(d),k.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START));k.collapse(!0);k.insertNode(b);g?(this.setStartAfter(b),this.setEndBefore(g)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:c?h+(f?"C":"S"):b,endNode:c?h+ -"E":g,serializable:c,collapsed:f}},createBookmark2:function(){function c(c){var a=c.container,e=c.offset,f;f=a;var b=e;f=f.type!=CKEDITOR.NODE_ELEMENT||0===b||b==f.getChildCount()?0:f.getChild(b-1).type==CKEDITOR.NODE_TEXT&&f.getChild(b).type==CKEDITOR.NODE_TEXT;f&&(a=a.getChild(e-1),e=a.getLength());if(a.type==CKEDITOR.NODE_ELEMENT&&0<e){a:{for(f=a;e--;)if(b=f.getChild(e).getIndex(!0),0<=b){e=b;break a}e=-1}e+=1}if(a.type==CKEDITOR.NODE_TEXT){f=a;for(b=0;(f=f.getPrevious())&&f.type==CKEDITOR.NODE_TEXT;)b+= -f.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,"").length;f=b;a.isEmpty()?(b=a.getPrevious(d),f?(e=f,a=b?b.getNext():a.getParent().getFirst()):(a=a.getParent(),e=b?b.getIndex(!0)+1:0)):e+=f}c.container=a;c.offset=e}function a(c,d){var e=d.getCustomData("cke-fillingChar");if(e){var f=c.container;e.equals(f)&&(c.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=c.offset&&(c.offset=f.getIndex(),c.container=f.getParent()))}}var d=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT, -!0);return function(d){var e=this.collapsed,f={container:this.startContainer,offset:this.startOffset},b={container:this.endContainer,offset:this.endOffset};d&&(c(f),a(f,this.root),e||(c(b),a(b,this.root)));return{start:f.container.getAddress(d),end:e?null:b.container.getAddress(d),startOffset:f.offset,endOffset:b.offset,normalized:d,collapsed:e,is2:!0}}}(),moveToBookmark:function(c){if(c.is2){var a=this.document.getByAddress(c.start,c.normalized),d=c.startOffset,e=c.end&&this.document.getByAddress(c.end, -c.normalized);c=c.endOffset;this.setStart(a,d);e?this.setEnd(e,c):this.collapse(!0)}else a=(d=c.serializable)?this.document.getById(c.startNode):c.startNode,c=d?this.document.getById(c.endNode):c.endNode,this.setStartBefore(a),a.remove(),c?(this.setEndBefore(c),c.remove()):this.collapse(!0)},getBoundaryNodes:function(){var c=this.startContainer,a=this.endContainer,d=this.startOffset,e=this.endOffset,f;if(c.type==CKEDITOR.NODE_ELEMENT)if(f=c.getChildCount(),f>d)c=c.getChild(d);else if(1>f)c=c.getPreviousSourceNode(); -else{for(c=c.$;c.lastChild;)c=c.lastChild;c=new CKEDITOR.dom.node(c);c=c.getNextSourceNode()||c}if(a.type==CKEDITOR.NODE_ELEMENT)if(f=a.getChildCount(),f>e)a=a.getChild(e).getPreviousSourceNode(!0);else if(1>f)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a)}c.getPosition(a)&CKEDITOR.POSITION_FOLLOWING&&(c=a);return{startNode:c,endNode:a}},getCommonAncestor:function(c,a){var d=this.startContainer,e=this.endContainer,d=d.equals(e)?c&&d.type==CKEDITOR.NODE_ELEMENT&& -this.startOffset==this.endOffset-1?d.getChild(this.startOffset):d:d.getCommonAncestor(e);return a&&!d.is?d.getParent():d},optimize:function(){var c=this.startContainer,a=this.startOffset;c.type!=CKEDITOR.NODE_ELEMENT&&(a?a>=c.getLength()&&this.setStartAfter(c):this.setStartBefore(c));c=this.endContainer;a=this.endOffset;c.type!=CKEDITOR.NODE_ELEMENT&&(a?a>=c.getLength()&&this.setEndAfter(c):this.setEndBefore(c))},optimizeBookmark:function(){var c=this.startContainer,a=this.endContainer;c.is&&c.is("span")&& -c.data("cke-bookmark")&&this.setStartAt(c,CKEDITOR.POSITION_BEFORE_START);a&&a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setEndAt(a,CKEDITOR.POSITION_AFTER_END)},trim:function(c,a){var d=this.startContainer,e=this.startOffset,f=this.collapsed;if((!c||f)&&d&&d.type==CKEDITOR.NODE_TEXT){if(e)if(e>=d.getLength())e=d.getIndex()+1,d=d.getParent();else{var b=d.split(e),e=d.getIndex()+1,d=d.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(b,this.endOffset-this.startOffset):d.equals(this.endContainer)&& -(this.endOffset+=1)}else e=d.getIndex(),d=d.getParent();this.setStart(d,e);if(f){this.collapse(!0);return}}d=this.endContainer;e=this.endOffset;a||f||!d||d.type!=CKEDITOR.NODE_TEXT||(e?(e>=d.getLength()||d.split(e),e=d.getIndex()+1):e=d.getIndex(),d=d.getParent(),this.setEnd(d,e))},enlarge:function(c,a){function d(c){return c&&c.type==CKEDITOR.NODE_ELEMENT&&c.hasAttribute("contenteditable")?null:c}var e=new RegExp(/[^\s\ufeff]/);switch(c){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:var b= -function(c,a){var d=new CKEDITOR.dom.range(h);d.setStart(c,a);d.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var d=new CKEDITOR.dom.walker(d),f;for(d.guard=function(c){return!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())};f=d.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;G=f!=c?f.getText():f.substring(a);if(e.test(G))return!1}return!0};if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,k,m,l,x,B,D=!1,A,G;A=this.startContainer;var C=this.startOffset;A.type==CKEDITOR.NODE_TEXT? -(C&&(A=!CKEDITOR.tools.trim(A.substring(0,C)).length&&A,D=!!A),A&&((x=A.getPrevious())||(l=A.getParent()))):(C&&(x=A.getChild(C-1)||A.getLast()),x||(l=A));for(l=d(l);l||x;){if(l&&!x){!B&&l.equals(g)&&(B=!0);if(f?l.isBlockBoundary():!h.contains(l))break;D&&"inline"==l.getComputedStyle("display")||(D=!1,B?k=l:this.setStartBefore(l));x=l.getPrevious()}for(;x;)if(A=!1,x.type==CKEDITOR.NODE_COMMENT)x=x.getPrevious();else{if(x.type==CKEDITOR.NODE_TEXT)G=x.getText(),e.test(G)&&(x=null),A=/[\s\ufeff]$/.test(G); -else if((x.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||a&&x.is("br"))&&!x.data("cke-bookmark"))if(D&&CKEDITOR.dtd.$removeEmpty[x.getName()]){G=x.getText();if(e.test(G))x=null;else for(var C=x.$.getElementsByTagName("*"),I=0,J;J=C[I++];)if(!CKEDITOR.dtd.$removeEmpty[J.nodeName.toLowerCase()]){x=null;break}x&&(A=!!G.length)}else x=null;A&&(D?B?k=l:l&&this.setStartBefore(l):D=!0);if(x){A=x.getPrevious();if(!l&&!A){l=x;x=null;break}x=A}else l=null}l&&(l=d(l.getParent()))}A=this.endContainer;C=this.endOffset; -l=x=null;B=D=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(C)).length?D=!0:(D=!A.getLength(),C==A.getLength()?(x=A.getNext())||(l=A.getParent()):b(A,C)&&(l=A.getParent())):(x=A.getChild(C))||(l=A);for(;l||x;){if(l&&!x){!B&&l.equals(g)&&(B=!0);if(f?l.isBlockBoundary():!h.contains(l))break;D&&"inline"==l.getComputedStyle("display")||(D=!1,B?m=l:l&&this.setEndAfter(l));x=l.getNext()}for(;x;){A=!1;if(x.type==CKEDITOR.NODE_TEXT)G=x.getText(),b(x,0)||(x=null),A=/^[\s\ufeff]/.test(G);else if(x.type== -CKEDITOR.NODE_ELEMENT){if((0<x.$.offsetWidth||a&&x.is("br"))&&!x.data("cke-bookmark"))if(D&&CKEDITOR.dtd.$removeEmpty[x.getName()]){G=x.getText();if(e.test(G))x=null;else for(C=x.$.getElementsByTagName("*"),I=0;J=C[I++];)if(!CKEDITOR.dtd.$removeEmpty[J.nodeName.toLowerCase()]){x=null;break}x&&(A=!!G.length)}else x=null}else A=1;A&&D&&(B?m=l:this.setEndAfter(l));if(x){A=x.getNext();if(!l&&!A){l=x;x=null;break}x=A}else l=null}l&&(l=d(l.getParent()))}k&&m&&(g=k.contains(m)?m:k,this.setStartBefore(g), -this.setEndAfter(g));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:l=new CKEDITOR.dom.range(this.root);h=this.root;l.setStartAt(h,CKEDITOR.POSITION_AFTER_START);l.setEnd(this.startContainer,this.startOffset);l=new CKEDITOR.dom.walker(l);var F,M,H=CKEDITOR.dom.walker.blockBoundary(c==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),E=null,Q=function(c){if(c.type==CKEDITOR.NODE_ELEMENT&&"false"==c.getAttribute("contenteditable"))if(E){if(E.equals(c)){E=null;return}}else E= -c;else if(E)return;var a=H(c);a||(F=c);return a},f=function(c){var a=Q(c);!a&&c.is&&c.is("br")&&(M=c);return a};l.guard=Q;l=l.lastBackward();F=F||h;this.setStartAt(F,!F.is("br")&&(!l&&this.checkStartOfBlock()||l&&F.contains(l))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(c==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){l=this.clone();l=new CKEDITOR.dom.walker(l);var O=CKEDITOR.dom.walker.whitespaces(),P=CKEDITOR.dom.walker.bookmark();l.evaluator=function(c){return!O(c)&&!P(c)};if((l=l.previous())&& -l.type==CKEDITOR.NODE_ELEMENT&&l.is("br"))break}l=this.clone();l.collapse();l.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);l=new CKEDITOR.dom.walker(l);l.guard=c==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:Q;F=E=M=null;l=l.lastForward();F=F||h;this.setEndAt(F,!l&&this.checkEndOfBlock()||l&&F.contains(l)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);M&&this.setEndAfter(M)}},shrink:function(c,a,d){var e="boolean"===typeof d?d:d&&"boolean"===typeof d.shrinkOnBlockBoundary?d.shrinkOnBlockBoundary: -!0,f=d&&d.skipBogus;if(!this.collapsed){c=c||CKEDITOR.SHRINK_TEXT;var b=this.clone(),g=this.startContainer,h=this.endContainer,k=this.startOffset,l=this.endOffset,m=d=1;g&&g.type==CKEDITOR.NODE_TEXT&&(k?k>=g.getLength()?b.setStartAfter(g):(b.setStartBefore(g),d=0):b.setStartBefore(g));h&&h.type==CKEDITOR.NODE_TEXT&&(l?l>=h.getLength()?b.setEndAfter(h):(b.setEndAfter(h),m=0):b.setEndBefore(h));var b=new CKEDITOR.dom.walker(b),x=CKEDITOR.dom.walker.bookmark(),B=CKEDITOR.dom.walker.bogus();b.evaluator= -function(a){return a.type==(c==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var D;b.guard=function(a,d){if(f&&B(a)||x(a))return!0;if(c==CKEDITOR.SHRINK_ELEMENT&&a.type==CKEDITOR.NODE_TEXT||d&&a.equals(D)||!1===e&&a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary()||a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable"))return!1;d||a.type!=CKEDITOR.NODE_ELEMENT||(D=a);return!0};d&&(g=b[c==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(g,a?CKEDITOR.POSITION_AFTER_START: -CKEDITOR.POSITION_BEFORE_START);m&&(b.reset(),(b=b[c==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(b,a?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!d&&!m)}},insertNode:function(c){this.optimizeBookmark();this.trim(!1,!0);var a=this.startContainer,d=a.getChild(this.startOffset);d?c.insertBefore(d):a.append(c);c.getParent()&&c.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(c)},moveToPosition:function(c,a){this.setStartAt(c, -a);this.collapse(!0)},moveToRange:function(c){this.setStart(c.startContainer,c.startOffset);this.setEnd(c.endContainer,c.endOffset)},selectNodeContents:function(c){this.setStart(c,0);this.setEnd(c,c.type==CKEDITOR.NODE_TEXT?c.getLength():c.getChildCount())},setStart:function(c,a){c.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[c.getName()]&&(a=c.getIndex(),c=c.getParent());this._setStartContainer(c);this.startOffset=a;this.endContainer||(this._setEndContainer(c),this.endOffset=a);b(this)},setEnd:function(c, -a){c.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[c.getName()]&&(a=c.getIndex()+1,c=c.getParent());this._setEndContainer(c);this.endOffset=a;this.startContainer||(this._setStartContainer(c),this.startOffset=a);b(this)},setStartAfter:function(c){this.setStart(c.getParent(),c.getIndex()+1)},setStartBefore:function(c){this.setStart(c.getParent(),c.getIndex())},setEndAfter:function(c){this.setEnd(c.getParent(),c.getIndex()+1)},setEndBefore:function(c){this.setEnd(c.getParent(),c.getIndex())},setStartAt:function(c, -a){switch(a){case CKEDITOR.POSITION_AFTER_START:this.setStart(c,0);break;case CKEDITOR.POSITION_BEFORE_END:c.type==CKEDITOR.NODE_TEXT?this.setStart(c,c.getLength()):this.setStart(c,c.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(c);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(c)}b(this)},setEndAt:function(c,a){switch(a){case CKEDITOR.POSITION_AFTER_START:this.setEnd(c,0);break;case CKEDITOR.POSITION_BEFORE_END:c.type==CKEDITOR.NODE_TEXT?this.setEnd(c, -c.getLength()):this.setEnd(c,c.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(c);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(c)}b(this)},fixBlock:function(c,a){var d=this.createBookmark(),e=this.document.createElement(a);this.collapse(c);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(e);e.trim();this.insertNode(e);var f=e.getBogus();f&&f.remove();e.appendBogus();this.moveToBookmark(d);return e},splitBlock:function(c,a){var d= -new CKEDITOR.dom.elementPath(this.startContainer,this.root),e=new CKEDITOR.dom.elementPath(this.endContainer,this.root),f=d.block,b=e.block,g=null;if(!d.blockLimit.equals(e.blockLimit))return null;"br"!=c&&(f||(f=this.fixBlock(!0,c),b=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),b||(b=this.fixBlock(!1,c)));d=f&&this.checkStartOfBlock();e=b&&this.checkEndOfBlock();this.deleteContents();f&&f.equals(b)&&(e?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(b, -CKEDITOR.POSITION_AFTER_END),b=null):d?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f=null):(b=this.splitElement(f,a||!1),f.is("ul","ol")||f.appendBogus()));return{previousBlock:f,nextBlock:b,wasStartOfBlock:d,wasEndOfBlock:e,elementPath:g}},splitElement:function(c,a){if(!this.collapsed)return null;this.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);var d=this.extractContents(!1,a||!1),e=c.clone(!1,a||!1);d.appendTo(e);e.insertAfter(c); -this.moveToPosition(c,CKEDITOR.POSITION_AFTER_END);return e},removeEmptyBlocksAtEnd:function(){function a(c){return function(a){return d(a)||e(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||c.is("table")&&a.is("caption")?!1:!0}}var d=CKEDITOR.dom.walker.whitespaces(),e=CKEDITOR.dom.walker.bookmark(!1);return function(d){for(var e=this.createBookmark(),f=this[d?"endPath":"startPath"](),b=f.block||f.blockLimit,g;b&&!b.equals(f.root)&&!b.getFirst(a(b));)g=b.getParent(),this[d?"setEndAt": -"setStartAt"](b,CKEDITOR.POSITION_AFTER_END),b.remove(1),b=g;this.moveToBookmark(e)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,d){var e=d==CKEDITOR.START,b=this.clone();b.collapse(e);b[e?"setStartAt":"setEndAt"](a,e?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(b);b.evaluator=f(e);return b[e? -"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,d=this.startOffset;CKEDITOR.env.ie&&d&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,d)),l.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);d=this.clone();d.collapse(!0);d.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(d);a.evaluator=g();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer, -d=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(d)),l.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);d=this.clone();d.collapse(!1);d.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(d);a.evaluator=g();return a.checkForward()},getPreviousNode:function(a,d,e){var f=this.clone();f.collapse(1);f.setStartAt(e||this.root,CKEDITOR.POSITION_AFTER_START);e=new CKEDITOR.dom.walker(f); -e.evaluator=a;e.guard=d;return e.previous()},getNextNode:function(a,d,e){var f=this.clone();f.collapse();f.setEndAt(e||this.root,CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(f);e.evaluator=a;e.guard=d;return e.next()},checkReadOnly:function(){function a(c,d){for(;c;){if(c.type==CKEDITOR.NODE_ELEMENT){if("false"==c.getAttribute("contentEditable")&&!c.data("cke-editable"))return 0;if(c.is("html")||"true"==c.getAttribute("contentEditable")&&(c.contains(d)||c.equals(d)))break}c=c.getParent()}return 1} -return function(){var d=this.startContainer,e=this.endContainer;return!(a(d,e)&&a(e,d))}}(),moveToElementEditablePosition:function(a,d){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,d?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var f=0;a;){if(a.type==CKEDITOR.NODE_TEXT){d&&this.endContainer&&this.checkEndOfBlock()&&l.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,d?CKEDITOR.POSITION_AFTER_END: -CKEDITOR.POSITION_BEFORE_START);f=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,d?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),f=1;else if(d&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var b=a,g=f,h=void 0;b.type==CKEDITOR.NODE_ELEMENT&&b.isEditable(!1)&& -(h=b[d?"getLast":"getFirst"](e));g||h||(h=b[d?"getPrevious":"getNext"](e));a=h}return!!f},moveToClosestEditablePosition:function(a,d){var e,f=0,b,g,h=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(e=new CKEDITOR.dom.range(this.root),e.moveToPosition(a,h[d?0:1])):e=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))f=1;else if(b=e[d?"getNextEditableNode":"getPreviousEditableNode"]())f=1,(g=b.type==CKEDITOR.NODE_ELEMENT)&&b.is(CKEDITOR.dtd.$block)&&"false"==b.getAttribute("contenteditable")? -(e.setStartAt(b,CKEDITOR.POSITION_BEFORE_START),e.setEndAt(b,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&b.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(e.setEnd(b,0),e.collapse()):e.moveToPosition(b,h[d?1:0]);f&&this.moveToRange(e);return!!f},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!= -CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),d=CKEDITOR.dom.walker.bookmark(!1,!0),e=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return e(a)&&d(a)};var f=a.next();a.reset();return f&&f.equals(a.previous())?f:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed|| -a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:a(),getPreviousEditableNode:a(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var d=this.getTouchedStartNode(),e=this.getTouchedEndNode(),f=d.getAscendant("table",!0),e=e.getAscendant("table",!0);return f&&!this.root.contains(f)?null:this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):f&&e&&(f.equals(e)||f.contains(e)||e.contains(f))?d.getAscendant(a,!0):null},scrollIntoView:function(){var a= -new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),d,e,f,b=this.clone();b.optimize();(f=b.startContainer.type==CKEDITOR.NODE_TEXT)?(e=b.startContainer.getText(),d=b.startContainer.split(b.startOffset),a.insertAfter(b.startContainer)):b.insertNode(a);a.scrollIntoView();f&&(b.startContainer.setText(e),d.remove());a.remove()},getClientRects:function(){function a(c,d){var e=CKEDITOR.tools.array.map(c,function(a){return a}),f=new CKEDITOR.dom.range(d.root),b,g, -h;d.startContainer instanceof CKEDITOR.dom.element&&(g=0===d.startOffset&&d.startContainer.hasAttribute("data-widget"));d.endContainer instanceof CKEDITOR.dom.element&&(h=(h=d.endOffset===(d.endContainer.getChildCount?d.endContainer.getChildCount():d.endContainer.length))&&d.endContainer.hasAttribute("data-widget"));g&&f.setStart(d.startContainer.getParent(),d.startContainer.getIndex());h&&f.setEnd(d.endContainer.getParent(),d.endContainer.getIndex()+1);if(g||h)d=f;f=d.cloneContents().find("[data-cke-widget-id]").toArray(); -if(f=CKEDITOR.tools.array.map(f,function(a){var c=d.root.editor;a=a.getAttribute("data-cke-widget-id");return c.widgets.instances[a].element}))return f=CKEDITOR.tools.array.map(f,function(a){var c;c=a.getParent().hasClass("cke_widget_wrapper")?a.getParent():a;b=this.root.getDocument().$.createRange();b.setStart(c.getParent().$,c.getIndex());b.setEnd(c.getParent().$,c.getIndex()+1);c=b.getClientRects();c.widgetRect=a.getClientRect();return c},d),CKEDITOR.tools.array.forEach(f,function(a){function c(f){CKEDITOR.tools.array.forEach(e, -function(c,b){var g=CKEDITOR.tools.objectCompare(a[f],c);g||(g=CKEDITOR.tools.objectCompare(a.widgetRect,c));g&&(Array.prototype.splice.call(e,b,a.length-f,a.widgetRect),d=!0)});d||(f<e.length-1?c(f+1):e.push(a.widgetRect))}var d;c(0)}),e}function d(a,c,e){var b;c.collapsed?e.startContainer instanceof CKEDITOR.dom.element?(a=e.checkStartOfBlock(),b=new CKEDITOR.dom.text(""),a?e.startContainer.append(b,!0):0===e.startOffset?b.insertBefore(e.startContainer.getFirst()):(e=e.startContainer.getChildren().getItem(e.startOffset- -1),b.insertAfter(e)),c.setStart(b.$,0),c.setEnd(b.$,0),a=c.getClientRects(),b.remove()):e.startContainer instanceof CKEDITOR.dom.text&&(""===e.startContainer.getText()?(e.startContainer.setText(""),a=c.getClientRects(),e.startContainer.setText("")):a=[f(e.createBookmark())]):a=[f(e.createBookmark())];return a}function e(a,c,d){a=CKEDITOR.tools.extend({},a);c&&(a=CKEDITOR.tools.getAbsoluteRectPosition(d.document.getWindow(),a));!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top); -return a}function f(a){var c=a.startNode;a=a.endNode;var d;c.setText("");c.removeStyle("display");a?(a.setText(""),a.removeStyle("display"),d=[c.getClientRect(),a.getClientRect()],a.remove()):d=[c.getClientRect(),c.getClientRect()];c.remove();return{right:Math.max(d[0].right,d[1].right),bottom:Math.max(d[0].bottom,d[1].bottom),left:Math.min(d[0].left,d[1].left),top:Math.min(d[0].top,d[1].top),width:Math.abs(d[0].left-d[1].left),height:Math.max(d[0].bottom,d[1].bottom)-Math.min(d[0].top,d[1].top)}} -return void 0!==this.document.getSelection?function(f){var b=this.root.getDocument().$.createRange(),g;b.setStart(this.startContainer.$,this.startOffset);b.setEnd(this.endContainer.$,this.endOffset);g=b.getClientRects();g=a(g,this);g.length||(g=d(g,b,this));return CKEDITOR.tools.array.map(g,function(a){return e(a,f,this)},this)}:function(a){return[e(f(this.createBookmark()),a,this)]}}(),_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a, -d){var e=this.getCommonAncestor(),f=this.getBoundaryNodes(),b=[],g,h,k,l;if(e&&e.find)for(h=e.find(a),g=0;g<h.count();g++)if(e=h.getItem(g),d||!e.isReadOnly())k=e.getPosition(f.startNode)&CKEDITOR.POSITION_FOLLOWING||f.startNode.equals(e),l=e.getPosition(f.endNode)&CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IS_CONTAINED||f.endNode.equals(e),k&&l&&b.push(e);return b}};CKEDITOR.dom.range.mergeRanges=function(a){return CKEDITOR.tools.array.reduce(a,function(a,c){var d=a[a.length-1],e=!1;c=c.clone(); -c.enlarge(CKEDITOR.ENLARGE_ELEMENT);if(d){var f=new CKEDITOR.dom.range(c.root),e=new CKEDITOR.dom.walker(f),b=CKEDITOR.dom.walker.whitespaces();f.setStart(d.endContainer,d.endOffset);f.setEnd(c.startContainer,c.startOffset);for(f=e.next();b(f)||c.endContainer.equals(f);)f=e.next();e=!f}e?d.setEnd(c.endContainer,c.endOffset):a.push(c);return a},[])}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT= -1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict";(function(){function b(a){1>arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function h(a){var c=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return c.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return c}function g(a,c,d,f){a:{null== -f&&(f=h(d));for(var b;b=f.shift();)if(b.getDtd().p){f={element:b,remaining:f};break a}f=null}if(!f)return 0;if((b=CKEDITOR.filter.instances[f.element.data("cke-filter")])&&!b.check(c))return g(a,c,d,f.remaining);c=new CKEDITOR.dom.range(f.element);c.selectNodeContents(f.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=b;a._.nestedEditable={element:f.element,container:d,remaining:f.remaining,iterator:c};return 1}function f(a,c,d){if(!c)return!1; -a=a.clone();a.collapse(!d);return a.checkBoundaryOfElement(c,d?CKEDITOR.START:CKEDITOR.END)}var a=/^[\r\n\t ]+$/,m=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker.whitespaces(!0),l=function(a){return m(a)&&k(a)},d={dd:1,dt:1,li:1};b.prototype={getNextParagraph:function(e){var c,b,h,k,r;e=e||"p";if(this._.nestedEditable){if(c=this._.nestedEditable.iterator.getNextParagraph(e))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,c;this.activeFilter=this.filter;if(g(this,e, -this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(e);this._.nestedEditable=null}if(!this.range.root.getDtd()[e])return null;if(!this._.started){var p=this.range.clone();b=p.startPath();var q=p.endPath(),u=!p.collapsed&&f(p,b.block),t=!p.collapsed&&f(p,q.block,1);p.shrink(CKEDITOR.SHRINK_ELEMENT,!0);u&&p.setStartAt(b.block,CKEDITOR.POSITION_BEFORE_END);t&&p.setEndAt(q.block, -CKEDITOR.POSITION_AFTER_START);b=p.endContainer.hasAscendant("pre",!0)||p.startContainer.hasAscendant("pre",!0);p.enlarge(this.forceBrBreak&&!b||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);p.collapsed||(b=new CKEDITOR.dom.walker(p.clone()),q=CKEDITOR.dom.walker.bookmark(!0,!0),b.evaluator=q,this._.nextNode=b.next(),b=new CKEDITOR.dom.walker(p.clone()),b.evaluator=q,b=b.previous(),this._.lastNode=b.getNextSourceNode(!0,null,p.root),this._.lastNode&&this._.lastNode.type== -CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(q=this.range.clone(),q.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),q.checkEndOfBlock()&&(q=new CKEDITOR.dom.elementPath(q.endContainer,q.root),this._.lastNode=(q.block||q.blockLimit).getNextSourceNode(!0))),this._.lastNode&&p.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=p.document.createText(""),this._.lastNode.insertAfter(b)),p=null);this._.started= -1;b=p}q=this._.nextNode;p=this._.lastNode;for(this._.nextNode=null;q;){var u=0,t=q.hasAscendant("pre"),y=q.type!=CKEDITOR.NODE_ELEMENT,v=0;if(y)q.type==CKEDITOR.NODE_TEXT&&a.test(q.getText())&&(y=0);else{var x=q.getName();if(CKEDITOR.dtd.$block[x]&&"false"==q.getAttribute("contenteditable")){c=q;g(this,e,c);break}else if(q.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){if("br"==x)y=1;else if(!b&&!q.getChildCount()&&"hr"!=x){c=q;h=q.equals(p);break}b&&(b.setEndAt(q,CKEDITOR.POSITION_BEFORE_START), -"br"!=x&&(this._.nextNode=q));u=1}else{if(q.getFirst()){b||(b=this.range.clone(),b.setStartAt(q,CKEDITOR.POSITION_BEFORE_START));q=q.getFirst();continue}y=1}}y&&!b&&(b=this.range.clone(),b.setStartAt(q,CKEDITOR.POSITION_BEFORE_START));h=(!u||y)&&q.equals(p);if(b&&!u)for(;!q.getNext(l)&&!h;){x=q.getParent();if(x.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){u=1;y=0;h||x.equals(p);b.setEndAt(x,CKEDITOR.POSITION_BEFORE_END);break}q=x;y=1;h=q.equals(p);v=1}y&&b.setEndAt(q,CKEDITOR.POSITION_AFTER_END); -q=this._getNextSourceNode(q,v,p);if((h=!q)||u&&b)break}if(!c){if(!b)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;c=new CKEDITOR.dom.elementPath(b.startContainer,b.root);q=c.blockLimit;u={div:1,th:1,td:1};c=c.block;!c&&q&&!this.enforceRealBlocks&&u[q.getName()]&&b.checkStartOfBlock()&&b.checkEndOfBlock()&&!q.equals(b.root)?c=q:!c||this.enforceRealBlocks&&c.is(d)?(c=this.range.document.createElement(e),b.extractContents().appendTo(c),c.trim(),b.insertNode(c),k=r=!0): -"li"!=c.getName()?b.checkStartOfBlock()&&b.checkEndOfBlock()||(c=c.clone(!1),b.extractContents().appendTo(c),c.trim(),r=b.splitBlock(),k=!r.wasStartOfBlock,r=!r.wasEndOfBlock,b.insertNode(c)):h||(this._.nextNode=c.equals(p)?null:this._getNextSourceNode(b.getBoundaryNodes().endNode,1,p))}k&&(k=c.getPrevious())&&k.type==CKEDITOR.NODE_ELEMENT&&("br"==k.getName()?k.remove():k.getLast()&&"br"==k.getLast().$.nodeName.toLowerCase()&&k.getLast().remove());r&&(k=c.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&& -"br"==k.getName()&&(!CKEDITOR.env.needsBrFiller||k.getPrevious(m)||k.getNext(m))&&k.remove();this._.nextNode||(this._.nextNode=h||c.equals(p)||!p?null:this._getNextSourceNode(c,1,p));return c},_getNextSourceNode:function(a,c,d){function f(a){return!(a.equals(d)||a.equals(b))}var b=this.range.root;for(a=a.getNextSourceNode(c,null,f);!m(a);)a=a.getNextSourceNode(c,null,f);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new b(this)}})();CKEDITOR.command=function(b,h){this.uiItems= -[];this.exec=function(f){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&b.focus();return!1===this.fire("exec")?!0:!1!==h.exec.call(this,b,f)};this.refresh=function(f,a){if(!this.readOnly&&f.readOnly)return!0;if(this.context&&!a.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[f.mode]&&this.disable();return!1===this.fire("refresh",{editor:f,path:a})?!0:h.refresh&&!1!==h.refresh.apply(this, -arguments)};var g;this.checkAllowed=function(f){return f||"boolean"!=typeof g?g=b.activeFilter.checkFeature(this):g};CKEDITOR.tools.extend(this,h,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!h.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)};CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)}, +CKEDITOR.dom.document.prototype,!0,{find:1,findOne:1});(function(){function b(d,a){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed)return this.end(),null;c.optimize()}var f,e=c.startContainer;f=c.endContainer;var b=c.startOffset,n=c.endOffset,g,h=this.guard,u=this.type,l=d?"getPreviousSourceNode":"getNextSourceNode";if(!d&&!this._.guardLTR){var m=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),k=f.type==CKEDITOR.NODE_ELEMENT?f.getChild(n):f.getNext();this._.guardLTR= +function(d,a){return(!a||!m.equals(d))&&(!k||!d.equals(k))&&(d.type!=CKEDITOR.NODE_ELEMENT||!a||!d.equals(c.root))}}if(d&&!this._.guardRTL){var E=e.type==CKEDITOR.NODE_ELEMENT?e:e.getParent(),G=e.type==CKEDITOR.NODE_ELEMENT?b?e.getChild(b-1):null:e.getPrevious();this._.guardRTL=function(d,a){return(!a||!E.equals(d))&&(!G||!d.equals(G))&&(d.type!=CKEDITOR.NODE_ELEMENT||!a||!d.equals(c.root))}}var I=d?this._.guardRTL:this._.guardLTR;g=h?function(d,a){return!1===I(d,a)?!1:h(d,a)}:I;this.current?f=this.current[l](!1, +u,g):(d?f.type==CKEDITOR.NODE_ELEMENT&&(f=0<n?f.getChild(n-1):!1===g(f,!0)?null:f.getPreviousSourceNode(!0,u,g)):(f=e,f.type==CKEDITOR.NODE_ELEMENT&&((f=f.getChild(b))||(f=!1===g(e,!0)?null:e.getNextSourceNode(!0,u,g)))),f&&!1===g(f)&&(f=null));for(;f&&!this._.end;){this.current=f;if(!this.evaluator||!1!==this.evaluator(f)){if(!a)return f}else if(a&&this.evaluator)return!1;f=f[l](!1,u,g)}this.end();return this.current=null}function h(d){for(var a,c=null;a=b.call(this,d);)c=a;return c}CKEDITOR.dom.walker= +CKEDITOR.tools.createClass({$:function(d){this.range=d;this._={}},proto:{end:function(){this._.end=1},next:function(){return b.call(this)},previous:function(){return b.call(this,1)},checkForward:function(){return!1!==b.call(this,0,1)},checkBackward:function(){return!1!==b.call(this,1,1)},lastForward:function(){return h.call(this)},lastBackward:function(){return h.call(this,1)},reset:function(){delete this.current;this._={}}}});var g={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1, +"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},e={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(d){return"none"!=this.getComputedStyle("float")||this.getComputedStyle("position")in e||!g[this.getComputedStyle("display")]?!!(this.is(CKEDITOR.dtd.$block)||d&&this.is(d)):!0};CKEDITOR.dom.walker.blockBoundary=function(d){return function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary(d))}};CKEDITOR.dom.walker.listItemBoundary= +function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(d,a){function c(d){return d&&d.getName&&"span"==d.getName()&&d.data("cke-bookmark")}return function(f){var e,b;e=f&&f.type!=CKEDITOR.NODE_ELEMENT&&(b=f.getParent())&&c(b);e=d?e:e||c(f);return!!(a^e)}};CKEDITOR.dom.walker.whitespaces=function(d){return function(a){var c;a&&a.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(a.getText())||CKEDITOR.env.webkit&&a.getText()==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE); +return!!(d^c)}};CKEDITOR.dom.walker.invisible=function(d){var a=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(f){a(f)?f=1:(f.type==CKEDITOR.NODE_TEXT&&(f=f.getParent()),f=f.$.offsetWidth<=c);return!!(d^f)}};CKEDITOR.dom.walker.nodeType=function(d,a){return function(c){return!!(a^c.type==d)}};CKEDITOR.dom.walker.bogus=function(d){function c(d){return!m(d)&&!l(d)}return function(f){var e=CKEDITOR.env.needsBrFiller?f.is&&f.is("br"):f.getText&&a.test(f.getText());e&&(e=f.getParent(), +f=f.getNext(c),e=e.isBlockBoundary()&&(!f||f.type==CKEDITOR.NODE_ELEMENT&&f.isBlockBoundary()));return!!(d^e)}};CKEDITOR.dom.walker.temp=function(d){return function(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());a=a&&a.hasAttribute("data-cke-temp");return!!(d^a)}};var a=/^[\t\r\n ]*(?: |\xa0)$/,m=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(),k=CKEDITOR.dom.walker.temp(),c=function(d){return l(d)||m(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$inline)&&!d.is(CKEDITOR.dtd.$empty)}; +CKEDITOR.dom.walker.ignored=function(d){return function(a){a=m(a)||l(a)||k(a);return!!(d^a)}};var f=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(d){return function(a){for(var c=0,e=a.getChildCount();c<e;++c)if(!f(a.getChild(c)))return!!d;return!d}};var d=CKEDITOR.dom.walker.empty(),n=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(d){var a={},c;for(c in d)CKEDITOR.dtd[c]["#"]&&(a[c]=1);return a}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable= +function(a){return function(c){c=f(c)?!1:c.type==CKEDITOR.NODE_TEXT||c.type==CKEDITOR.NODE_ELEMENT&&(c.is(CKEDITOR.dtd.$inline)||c.is("hr")||"false"==c.getAttribute("contenteditable")||!CKEDITOR.env.needsBrFiller&&c.is(n)&&d(c))?!0:!1;return!!(a^c)}};CKEDITOR.dom.element.prototype.getBogus=function(){var d=this;do d=d.getPreviousSourceNode();while(c(d));return d&&(CKEDITOR.env.needsBrFiller?d.is&&d.is("br"):d.getText&&a.test(d.getText()))?d:!1}})();CKEDITOR.dom.range=function(b){this.endOffset=this.endContainer= +this.startOffset=this.startContainer=null;this.collapsed=!0;var h=b instanceof CKEDITOR.dom.document;this.document=h?b:b.getDocument();this.root=h?b.getBody():b};(function(){function b(d){d.collapsed=d.startContainer&&d.endContainer&&d.startContainer.equals(d.endContainer)&&d.startOffset==d.endOffset}function h(d,a,c,f,e){function b(d,a,c,f){var n=c?d.getPrevious():d.getNext();if(f&&l)return n;k||f?a.append(d.clone(!0,e),c):(d.remove(),m&&a.append(d,c));return n}function g(){var d,a,c,f=Math.min(H.length, +J.length);for(d=0;d<f;d++)if(a=H[d],c=J[d],!a.equals(c))return d;return d-1}function h(){var a=D-1,c=I&&L&&!u.equals(B);a<K-1||a<O-1||c?(c?d.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START):O==a+1&&G?d.moveToPosition(J[a],CKEDITOR.POSITION_BEFORE_END):d.moveToPosition(J[a+1],CKEDITOR.POSITION_BEFORE_START),f&&(a=H[a+1])&&a.type==CKEDITOR.NODE_ELEMENT&&(c=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',d.document),c.insertAfter(a), +a.mergeSiblings(!1),d.moveToBookmark({startNode:c}))):d.collapse(!0)}d.optimizeBookmark();var l=0===a,m=1==a,k=2==a;a=k||m;var u=d.startContainer,B=d.endContainer,C=d.startOffset,A=d.endOffset,E,G,I,L,F,M;if(k&&B.type==CKEDITOR.NODE_TEXT&&(u.equals(B)||u.type===CKEDITOR.NODE_ELEMENT&&u.getFirst().equals(B)))c.append(d.document.createText(B.substring(C,A)));else{B.type==CKEDITOR.NODE_TEXT?k?M=!0:B=B.split(A):0<B.getChildCount()?A>=B.getChildCount()?(B=B.getChild(A-1),G=!0):B=B.getChild(A):L=G=!0;u.type== +CKEDITOR.NODE_TEXT?k?F=!0:u.split(C):0<u.getChildCount()?0===C?(u=u.getChild(C),E=!0):u=u.getChild(C-1):I=E=!0;for(var H=u.getParents(),J=B.getParents(),D=g(),K=H.length-1,O=J.length-1,N=c,Y,R,W,ea=-1,X=D;X<=K;X++){R=H[X];W=R.getNext();for(X!=K||R.equals(J[X])&&K<O?a&&(Y=N.append(R.clone(0,e))):E?b(R,N,!1,I):F&&N.append(d.document.createText(R.substring(C)));W;){if(W.equals(J[X])){ea=X;break}W=b(W,N)}N=Y}N=c;for(X=D;X<=O;X++)if(c=J[X],W=c.getPrevious(),c.equals(H[X]))a&&(N=N.getChild(0));else{X!= +O||c.equals(H[X])&&O<K?a&&(Y=N.append(c.clone(0,e))):G?b(c,N,!1,L):M&&N.append(d.document.createText(c.substring(0,A)));if(X>ea)for(;W;)W=b(W,N,!0);N=Y}k||h()}}function g(){var d=!1,a=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!0),f=CKEDITOR.dom.walker.bogus();return function(e){return c(e)||a(e)?!0:f(e)&&!d?d=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(m)?!1:!0}}function e(d){var a=CKEDITOR.dom.walker.whitespaces(), +c=CKEDITOR.dom.walker.bookmark(1);return function(f){return c(f)||a(f)?!0:!d&&l(f)||f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$removeEmpty)}}function a(d){return function(){var a;return this[d?"getPreviousNode":"getNextNode"](function(d){!a&&f(d)&&(a=d);return c(d)&&!(l(d)&&d.equals(a))})}}var m={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},l=CKEDITOR.dom.walker.bogus(), +k=/^[\t\r\n ]*(?: |\xa0)$/,c=CKEDITOR.dom.walker.editable(),f=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var d=new CKEDITOR.dom.range(this.root);d._setStartContainer(this.startContainer);d.startOffset=this.startOffset;d._setEndContainer(this.endContainer);d.endOffset=this.endOffset;d.collapsed=this.collapsed;return d},collapse:function(d){d?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer), +this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(d){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||h(this,2,a,!1,"undefined"==typeof d?!0:d);return a},deleteContents:function(d){this.collapsed||h(this,0,null,d)},extractContents:function(d,a){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||h(this,1,c,d,"undefined"==typeof a?!0:a);return c},equals:function(d){return this.startOffset===d.startOffset&&this.endOffset===d.endOffset&& +this.startContainer.equals(d.startContainer)&&this.endContainer.equals(d.endContainer)},createBookmark:function(d){function a(d){return d.getAscendant(function(d){var a;if(a=d.data&&d.data("cke-temp"))a=-1===CKEDITOR.tools.array.indexOf(["cke_copybin","cke_pastebin"],d.getAttribute("id"));return a},!0)}var c=this.startContainer,f=this.endContainer,e=this.collapsed,b,g,h,l;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");d&&(h="cke_bm_"+ +CKEDITOR.tools.getNextNumber(),b.setAttribute("id",h+(e?"C":"S")));e||(g=b.clone(),g.setHtml("\x26nbsp;"),d&&g.setAttribute("id",h+"E"),l=this.clone(),a(f)&&(f=a(f),l.moveToPosition(f,CKEDITOR.POSITION_AFTER_END)),l.collapse(),l.insertNode(g));l=this.clone();a(c)&&(f=a(c),l.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START));l.collapse(!0);l.insertNode(b);g?(this.setStartAfter(b),this.setEndBefore(g)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:d?h+(e?"C":"S"):b,endNode:d?h+ +"E":g,serializable:d,collapsed:e}},createBookmark2:function(){function d(d){var a=d.container,f=d.offset,e;e=a;var b=f;e=e.type!=CKEDITOR.NODE_ELEMENT||0===b||b==e.getChildCount()?0:e.getChild(b-1).type==CKEDITOR.NODE_TEXT&&e.getChild(b).type==CKEDITOR.NODE_TEXT;e&&(a=a.getChild(f-1),f=a.getLength());if(a.type==CKEDITOR.NODE_ELEMENT&&0<f){a:{for(e=a;f--;)if(b=e.getChild(f).getIndex(!0),0<=b){f=b;break a}f=-1}f+=1}if(a.type==CKEDITOR.NODE_TEXT){e=a;for(b=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)b+= +e.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,"").length;e=b;a.isEmpty()?(b=a.getPrevious(c),e?(f=e,a=b?b.getNext():a.getParent().getFirst()):(a=a.getParent(),f=b?b.getIndex(!0)+1:0)):f+=e}d.container=a;d.offset=f}function a(d,c){var f=c.getCustomData("cke-fillingChar");if(f){var e=d.container;f.equals(e)&&(d.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=d.offset&&(d.offset=e.getIndex(),d.container=e.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT, +!0);return function(c){var f=this.collapsed,e={container:this.startContainer,offset:this.startOffset},b={container:this.endContainer,offset:this.endOffset};c&&(d(e),a(e,this.root),f||(d(b),a(b,this.root)));return{start:e.container.getAddress(c),end:f?null:b.container.getAddress(c),startOffset:e.offset,endOffset:b.offset,normalized:c,collapsed:f,is2:!0}}}(),moveToBookmark:function(d){if(d.is2){var a=this.document.getByAddress(d.start,d.normalized),c=d.startOffset,f=d.end&&this.document.getByAddress(d.end, +d.normalized);d=d.endOffset;this.setStart(a,c);f?this.setEnd(f,d):this.collapse(!0)}else a=(c=d.serializable)?this.document.getById(d.startNode):d.startNode,d=c?this.document.getById(d.endNode):d.endNode,this.setStartBefore(a),a.remove(),d?(this.setEndBefore(d),d.remove()):this.collapse(!0)},getBoundaryNodes:function(){var d=this.startContainer,a=this.endContainer,c=this.startOffset,f=this.endOffset,e;if(d.type==CKEDITOR.NODE_ELEMENT)if(e=d.getChildCount(),e>c)d=d.getChild(c);else if(1>e)d=d.getPreviousSourceNode(); +else{for(d=d.$;d.lastChild;)d=d.lastChild;d=new CKEDITOR.dom.node(d);d=d.getNextSourceNode()||d}if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>f)a=a.getChild(f).getPreviousSourceNode(!0);else if(1>e)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a)}d.getPosition(a)&CKEDITOR.POSITION_FOLLOWING&&(d=a);return{startNode:d,endNode:a}},getCommonAncestor:function(d,a){var c=this.startContainer,f=this.endContainer,c=c.equals(f)?d&&c.type==CKEDITOR.NODE_ELEMENT&& +this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(f);return a&&!c.is?c.getParent():c},optimize:function(){var d=this.startContainer,a=this.startOffset;d.type!=CKEDITOR.NODE_ELEMENT&&(a?a>=d.getLength()&&this.setStartAfter(d):this.setStartBefore(d));d=this.endContainer;a=this.endOffset;d.type!=CKEDITOR.NODE_ELEMENT&&(a?a>=d.getLength()&&this.setEndAfter(d):this.setEndBefore(d))},optimizeBookmark:function(){var d=this.startContainer,a=this.endContainer;d.is&&d.is("span")&& +d.data("cke-bookmark")&&this.setStartAt(d,CKEDITOR.POSITION_BEFORE_START);a&&a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setEndAt(a,CKEDITOR.POSITION_AFTER_END)},trim:function(d,a){var c=this.startContainer,f=this.startOffset,e=this.collapsed;if((!d||e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(f)if(f>=c.getLength())f=c.getIndex()+1,c=c.getParent();else{var b=c.split(f),f=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(b,this.endOffset-this.startOffset):c.equals(this.endContainer)&& +(this.endOffset+=1)}else f=c.getIndex(),c=c.getParent();this.setStart(c,f);if(e){this.collapse(!0);return}}c=this.endContainer;f=this.endOffset;a||e||!c||c.type!=CKEDITOR.NODE_TEXT||(f?(f>=c.getLength()||c.split(f),f=c.getIndex()+1):f=c.getIndex(),c=c.getParent(),this.setEnd(c,f))},enlarge:function(d,a){function c(d){return d&&d.type==CKEDITOR.NODE_ELEMENT&&d.hasAttribute("contenteditable")?null:d}var f=new RegExp(/[^\s\ufeff]/);switch(d){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var b= +function(d,a){var c=new CKEDITOR.dom.range(h);c.setStart(d,a);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),e;for(c.guard=function(d){return!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary())};e=c.next();){if(e.type!=CKEDITOR.NODE_TEXT)return!1;E=e!=d?e.getText():e.substring(a);if(f.test(E))return!1}return!0};if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,l,m,k,u,B,C=!1,A,E;A=this.startContainer;var G=this.startOffset;A.type==CKEDITOR.NODE_TEXT? +(G&&(A=!CKEDITOR.tools.trim(A.substring(0,G)).length&&A,C=!!A),A&&((u=A.getPrevious())||(k=A.getParent()))):(G&&(u=A.getChild(G-1)||A.getLast()),u||(k=A));for(k=c(k);k||u;){if(k&&!u){!B&&k.equals(g)&&(B=!0);if(e?k.isBlockBoundary():!h.contains(k))break;C&&"inline"==k.getComputedStyle("display")||(C=!1,B?l=k:this.setStartBefore(k));u=k.getPrevious()}for(;u;)if(A=!1,u.type==CKEDITOR.NODE_COMMENT)u=u.getPrevious();else{if(u.type==CKEDITOR.NODE_TEXT)E=u.getText(),f.test(E)&&(u=null),A=/[\s\ufeff]$/.test(E); +else if((u.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||a&&u.is("br"))&&!u.data("cke-bookmark"))if(C&&CKEDITOR.dtd.$removeEmpty[u.getName()]){E=u.getText();if(f.test(E))u=null;else for(var G=u.$.getElementsByTagName("*"),I=0,L;L=G[I++];)if(!CKEDITOR.dtd.$removeEmpty[L.nodeName.toLowerCase()]){u=null;break}u&&(A=!!E.length)}else u=null;A&&(C?B?l=k:k&&this.setStartBefore(k):C=!0);if(u){A=u.getPrevious();if(!k&&!A){k=u;u=null;break}u=A}else k=null}k&&(k=c(k.getParent()))}A=this.endContainer;G=this.endOffset; +k=u=null;B=C=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(G)).length?C=!0:(C=!A.getLength(),G==A.getLength()?(u=A.getNext())||(k=A.getParent()):b(A,G)&&(k=A.getParent())):(u=A.getChild(G))||(k=A);for(;k||u;){if(k&&!u){!B&&k.equals(g)&&(B=!0);if(e?k.isBlockBoundary():!h.contains(k))break;C&&"inline"==k.getComputedStyle("display")||(C=!1,B?m=k:k&&this.setEndAfter(k));u=k.getNext()}for(;u;){A=!1;if(u.type==CKEDITOR.NODE_TEXT)E=u.getText(),b(u,0)||(u=null),A=/^[\s\ufeff]/.test(E);else if(u.type== +CKEDITOR.NODE_ELEMENT){if((0<u.$.offsetWidth||a&&u.is("br"))&&!u.data("cke-bookmark"))if(C&&CKEDITOR.dtd.$removeEmpty[u.getName()]){E=u.getText();if(f.test(E))u=null;else for(G=u.$.getElementsByTagName("*"),I=0;L=G[I++];)if(!CKEDITOR.dtd.$removeEmpty[L.nodeName.toLowerCase()]){u=null;break}u&&(A=!!E.length)}else u=null}else A=1;A&&C&&(B?m=k:this.setEndAfter(k));if(u){A=u.getNext();if(!k&&!A){k=u;u=null;break}u=A}else k=null}k&&(k=c(k.getParent()))}l&&m&&(g=l.contains(m)?m:l,this.setStartBefore(g), +this.setEndAfter(g));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:k=new CKEDITOR.dom.range(this.root);h=this.root;k.setStartAt(h,CKEDITOR.POSITION_AFTER_START);k.setEnd(this.startContainer,this.startOffset);k=new CKEDITOR.dom.walker(k);var F,M,H=CKEDITOR.dom.walker.blockBoundary(d==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),J=null,D=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable"))if(J){if(J.equals(d)){J=null;return}}else J= +d;else if(J)return;var a=H(d);a||(F=d);return a},e=function(d){var a=D(d);!a&&d.is&&d.is("br")&&(M=d);return a};k.guard=D;k=k.lastBackward();F=F||h;this.setStartAt(F,!F.is("br")&&(!k&&this.checkStartOfBlock()||k&&F.contains(k))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(d==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){k=this.clone();k=new CKEDITOR.dom.walker(k);var K=CKEDITOR.dom.walker.whitespaces(),O=CKEDITOR.dom.walker.bookmark();k.evaluator=function(d){return!K(d)&&!O(d)};if((k=k.previous())&& +k.type==CKEDITOR.NODE_ELEMENT&&k.is("br"))break}k=this.clone();k.collapse();k.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);k=new CKEDITOR.dom.walker(k);k.guard=d==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:D;F=J=M=null;k=k.lastForward();F=F||h;this.setEndAt(F,!k&&this.checkEndOfBlock()||k&&F.contains(k)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);M&&this.setEndAfter(M)}},shrink:function(d,a,c){var f="boolean"===typeof c?c:c&&"boolean"===typeof c.shrinkOnBlockBoundary?c.shrinkOnBlockBoundary: +!0,e=c&&c.skipBogus;if(!this.collapsed){d=d||CKEDITOR.SHRINK_TEXT;var b=this.clone(),g=this.startContainer,h=this.endContainer,l=this.startOffset,k=this.endOffset,m=c=1;g&&g.type==CKEDITOR.NODE_TEXT&&(l?l>=g.getLength()?b.setStartAfter(g):(b.setStartBefore(g),c=0):b.setStartBefore(g));h&&h.type==CKEDITOR.NODE_TEXT&&(k?k>=h.getLength()?b.setEndAfter(h):(b.setEndAfter(h),m=0):b.setEndBefore(h));var b=new CKEDITOR.dom.walker(b),u=CKEDITOR.dom.walker.bookmark(),B=CKEDITOR.dom.walker.bogus();b.evaluator= +function(a){return a.type==(d==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var C;b.guard=function(a,c){if(e&&B(a)||u(a))return!0;if(d==CKEDITOR.SHRINK_ELEMENT&&a.type==CKEDITOR.NODE_TEXT||c&&a.equals(C)||!1===f&&a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary()||a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable"))return!1;c||a.type!=CKEDITOR.NODE_ELEMENT||(C=a);return!0};c&&(g=b[d==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(g,a?CKEDITOR.POSITION_AFTER_START: +CKEDITOR.POSITION_BEFORE_START);m&&(b.reset(),(b=b[d==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(b,a?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!c&&!m)}},insertNode:function(d){this.optimizeBookmark();this.trim(!1,!0);var a=this.startContainer,c=a.getChild(this.startOffset);c?d.insertBefore(c):a.append(d);d.getParent()&&d.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(d)},moveToPosition:function(d,a){this.setStartAt(d, +a);this.collapse(!0)},moveToRange:function(d){this.setStart(d.startContainer,d.startOffset);this.setEnd(d.endContainer,d.endOffset)},selectNodeContents:function(d){this.setStart(d,0);this.setEnd(d,d.type==CKEDITOR.NODE_TEXT?d.getLength():d.getChildCount())},setStart:function(d,a){d.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[d.getName()]&&(a=d.getIndex(),d=d.getParent());this._setStartContainer(d);this.startOffset=a;this.endContainer||(this._setEndContainer(d),this.endOffset=a);b(this)},setEnd:function(a, +c){a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]&&(c=a.getIndex()+1,a=a.getParent());this._setEndContainer(a);this.endOffset=c;this.startContainer||(this._setStartContainer(a),this.startOffset=c);b(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a, +c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}b(this)},setEndAt:function(a,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a, +a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}b(this)},fixBlock:function(a,c){var f=this.createBookmark(),e=this.document.createElement(c);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(e);e.trim();this.insertNode(e);var b=e.getBogus();b&&b.remove();e.appendBogus();this.moveToBookmark(f);return e},splitBlock:function(a,c){var f= +new CKEDITOR.dom.elementPath(this.startContainer,this.root),e=new CKEDITOR.dom.elementPath(this.endContainer,this.root),b=f.block,g=e.block,h=null;if(!f.blockLimit.equals(e.blockLimit))return null;"br"!=a&&(b||(b=this.fixBlock(!0,a),g=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),g||(g=this.fixBlock(!1,a)));f=b&&this.checkStartOfBlock();e=g&&this.checkEndOfBlock();this.deleteContents();b&&b.equals(g)&&(e?(h=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(g, +CKEDITOR.POSITION_AFTER_END),g=null):f?(h=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START),b=null):(g=this.splitElement(b,c||!1),b.is("ul","ol")||b.appendBogus()));return{previousBlock:b,nextBlock:g,wasStartOfBlock:f,wasEndOfBlock:e,elementPath:h}},splitElement:function(a,c){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var f=this.extractContents(!1,c||!1),e=a.clone(!1,c||!1);f.appendTo(e);e.insertAfter(a); +this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return e},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return c(a)||f(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||d.is("table")&&a.is("caption")?!1:!0}}var c=CKEDITOR.dom.walker.whitespaces(),f=CKEDITOR.dom.walker.bookmark(!1);return function(c){for(var f=this.createBookmark(),e=this[c?"endPath":"startPath"](),b=e.block||e.blockLimit,g;b&&!b.equals(e.root)&&!b.getFirst(a(b));)g=b.getParent(),this[c?"setEndAt": +"setStartAt"](b,CKEDITOR.POSITION_AFTER_END),b.remove(1),b=g;this.moveToBookmark(f)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,c){var f=c==CKEDITOR.START,b=this.clone();b.collapse(f);b[f?"setStartAt":"setEndAt"](a,f?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(b);b.evaluator=e(f);return b[f? +"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),k.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=g();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer, +c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),k.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=g();return a.checkForward()},getPreviousNode:function(a,c,f){var e=this.clone();e.collapse(1);e.setStartAt(f||this.root,CKEDITOR.POSITION_AFTER_START);f=new CKEDITOR.dom.walker(e); +f.evaluator=a;f.guard=c;return f.previous()},getNextNode:function(a,c,f){var e=this.clone();e.collapse();e.setEndAt(f||this.root,CKEDITOR.POSITION_BEFORE_END);f=new CKEDITOR.dom.walker(e);f.evaluator=a;f.guard=c;return f.next()},checkReadOnly:function(){function a(d,c){for(;d;){if(d.type==CKEDITOR.NODE_ELEMENT){if("false"==d.getAttribute("contentEditable")&&!d.data("cke-editable"))return 0;if(d.is("html")||"true"==d.getAttribute("contentEditable")&&(d.contains(c)||d.equals(c)))break}d=d.getParent()}return 1} +return function(){var c=this.startContainer,f=this.endContainer;return!(a(c,f)&&a(f,c))}}(),moveToElementEditablePosition:function(a,c){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var e=0;a;){if(a.type==CKEDITOR.NODE_TEXT){c&&this.endContainer&&this.checkEndOfBlock()&&k.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END: +CKEDITOR.POSITION_BEFORE_START);e=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),e=1;else if(c&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var b=a,g=e,h=void 0;b.type==CKEDITOR.NODE_ELEMENT&&b.isEditable(!1)&& +(h=b[c?"getLast":"getFirst"](f));g||h||(h=b[c?"getPrevious":"getNext"](f));a=h}return!!e},moveToClosestEditablePosition:function(a,c){var f,e=0,b,g,h=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(f=new CKEDITOR.dom.range(this.root),f.moveToPosition(a,h[c?0:1])):f=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))e=1;else if(b=f[c?"getNextEditableNode":"getPreviousEditableNode"]())e=1,(g=b.type==CKEDITOR.NODE_ELEMENT)&&b.is(CKEDITOR.dtd.$block)&&"false"==b.getAttribute("contenteditable")? +(f.setStartAt(b,CKEDITOR.POSITION_BEFORE_START),f.setEndAt(b,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&b.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(f.setEnd(b,0),f.collapse()):f.moveToPosition(b,h[c?1:0]);e&&this.moveToRange(f);return!!e},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!= +CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),c=CKEDITOR.dom.walker.bookmark(!1,!0),f=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return f(a)&&c(a)};var e=a.next();a.reset();return e&&e.equals(a.previous())?e:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed|| +a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:a(),getPreviousEditableNode:a(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var c=this.getTouchedStartNode(),f=this.getTouchedEndNode(),e=c.getAscendant("table",!0),f=f.getAscendant("table",!0);return e&&!this.root.contains(e)?null:this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):e&&f&&(e.equals(f)||e.contains(f)||f.contains(e))?c.getAscendant(a,!0):null},scrollIntoView:function(){var a= +new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),c,f,e,b=this.clone();b.optimize();(e=b.startContainer.type==CKEDITOR.NODE_TEXT)?(f=b.startContainer.getText(),c=b.startContainer.split(b.startOffset),a.insertAfter(b.startContainer)):b.insertNode(a);a.scrollIntoView();e&&(b.startContainer.setText(f),c.remove());a.remove()},getClientRects:function(){function a(d,c){var f=CKEDITOR.tools.array.map(d,function(a){return a}),e=new CKEDITOR.dom.range(c.root),b,g, +h;c.startContainer instanceof CKEDITOR.dom.element&&(g=0===c.startOffset&&c.startContainer.hasAttribute("data-widget"));c.endContainer instanceof CKEDITOR.dom.element&&(h=(h=c.endOffset===(c.endContainer.getChildCount?c.endContainer.getChildCount():c.endContainer.length))&&c.endContainer.hasAttribute("data-widget"));g&&e.setStart(c.startContainer.getParent(),c.startContainer.getIndex());h&&e.setEnd(c.endContainer.getParent(),c.endContainer.getIndex()+1);if(g||h)c=e;e=c.cloneContents().find("[data-cke-widget-id]").toArray(); +if(e=CKEDITOR.tools.array.map(e,function(a){var d=c.root.editor;a=a.getAttribute("data-cke-widget-id");return d.widgets.instances[a].element}))return e=CKEDITOR.tools.array.map(e,function(a){var d;d=a.getParent().hasClass("cke_widget_wrapper")?a.getParent():a;b=this.root.getDocument().$.createRange();b.setStart(d.getParent().$,d.getIndex());b.setEnd(d.getParent().$,d.getIndex()+1);d=b.getClientRects();d.widgetRect=a.getClientRect();return d},c),CKEDITOR.tools.array.forEach(e,function(a){function d(e){CKEDITOR.tools.array.forEach(f, +function(d,b){var g=CKEDITOR.tools.objectCompare(a[e],d);g||(g=CKEDITOR.tools.objectCompare(a.widgetRect,d));g&&(Array.prototype.splice.call(f,b,a.length-e,a.widgetRect),c=!0)});c||(e<f.length-1?d(e+1):f.push(a.widgetRect))}var c;d(0)}),f}function c(a,d,f){var b;d.collapsed?f.startContainer instanceof CKEDITOR.dom.element?(a=f.checkStartOfBlock(),b=new CKEDITOR.dom.text(""),a?f.startContainer.append(b,!0):0===f.startOffset?b.insertBefore(f.startContainer.getFirst()):(f=f.startContainer.getChildren().getItem(f.startOffset- +1),b.insertAfter(f)),d.setStart(b.$,0),d.setEnd(b.$,0),a=d.getClientRects(),b.remove()):f.startContainer instanceof CKEDITOR.dom.text&&(""===f.startContainer.getText()?(f.startContainer.setText(""),a=d.getClientRects(),f.startContainer.setText("")):a=[e(f.createBookmark())]):a=[e(f.createBookmark())];return a}function f(a,d,c){a=CKEDITOR.tools.extend({},a);d&&(a=CKEDITOR.tools.getAbsoluteRectPosition(c.document.getWindow(),a));!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top); +return a}function e(a){var d=a.startNode;a=a.endNode;var c;d.setText("");d.removeStyle("display");a?(a.setText(""),a.removeStyle("display"),c=[d.getClientRect(),a.getClientRect()],a.remove()):c=[d.getClientRect(),d.getClientRect()];d.remove();return{right:Math.max(c[0].right,c[1].right),bottom:Math.max(c[0].bottom,c[1].bottom),left:Math.min(c[0].left,c[1].left),top:Math.min(c[0].top,c[1].top),width:Math.abs(c[0].left-c[1].left),height:Math.max(c[0].bottom,c[1].bottom)-Math.min(c[0].top,c[1].top)}} +return void 0!==this.document.getSelection?function(e){var b=this.root.getDocument().$.createRange(),g;b.setStart(this.startContainer.$,this.startOffset);b.setEnd(this.endContainer.$,this.endOffset);g=b.getClientRects();g=a(g,this);g.length||(g=c(g,b,this));return CKEDITOR.tools.array.map(g,function(a){return f(a,e,this)},this)}:function(a){return[f(e(this.createBookmark()),a,this)]}}(),_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a, +c){var f=this.getCommonAncestor(),e=this.getBoundaryNodes(),b=[],g,h,l,k;if(f&&f.find)for(h=f.find(a),g=0;g<h.count();g++)if(f=h.getItem(g),c||!f.isReadOnly())l=f.getPosition(e.startNode)&CKEDITOR.POSITION_FOLLOWING||e.startNode.equals(f),k=f.getPosition(e.endNode)&CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IS_CONTAINED||e.endNode.equals(f),l&&k&&b.push(f);return b}};CKEDITOR.dom.range.mergeRanges=function(a){return CKEDITOR.tools.array.reduce(a,function(a,c){var d=a[a.length-1],f=!1;c=c.clone(); +c.enlarge(CKEDITOR.ENLARGE_ELEMENT);if(d){var e=new CKEDITOR.dom.range(c.root),f=new CKEDITOR.dom.walker(e),b=CKEDITOR.dom.walker.whitespaces();e.setStart(d.endContainer,d.endOffset);e.setEnd(c.startContainer,c.startOffset);for(e=f.next();b(e)||c.endContainer.equals(e);)e=f.next();f=!e}f?d.setEnd(c.endContainer,c.endOffset):a.push(c);return a},[])}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT= +1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict";(function(){function b(a){1>arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function h(a){var c=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return c.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return c}function g(a,c,e,b){a:{null== +b&&(b=h(e));for(var l;l=b.shift();)if(l.getDtd().p){b={element:l,remaining:b};break a}b=null}if(!b)return 0;if((l=CKEDITOR.filter.instances[b.element.data("cke-filter")])&&!l.check(c))return g(a,c,e,b.remaining);c=new CKEDITOR.dom.range(b.element);c.selectNodeContents(b.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=l;a._.nestedEditable={element:b.element,container:e,remaining:b.remaining,iterator:c};return 1}function e(a,c,e){if(!c)return!1; +a=a.clone();a.collapse(!e);return a.checkBoundaryOfElement(c,e?CKEDITOR.START:CKEDITOR.END)}var a=/^[\r\n\t ]+$/,m=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.dom.walker.whitespaces(!0),k=function(a){return m(a)&&l(a)},c={dd:1,dt:1,li:1};b.prototype={getNextParagraph:function(f){var d,b,h,l,p;f=f||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(f))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(g(this,f, +this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(f);this._.nestedEditable=null}if(!this.range.root.getDtd()[f])return null;if(!this._.started){var r=this.range.clone();b=r.startPath();var q=r.endPath(),x=!r.collapsed&&e(r,b.block),t=!r.collapsed&&e(r,q.block,1);r.shrink(CKEDITOR.SHRINK_ELEMENT,!0);x&&r.setStartAt(b.block,CKEDITOR.POSITION_BEFORE_END);t&&r.setEndAt(q.block, +CKEDITOR.POSITION_AFTER_START);b=r.endContainer.hasAscendant("pre",!0)||r.startContainer.hasAscendant("pre",!0);r.enlarge(this.forceBrBreak&&!b||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);r.collapsed||(b=new CKEDITOR.dom.walker(r.clone()),q=CKEDITOR.dom.walker.bookmark(!0,!0),b.evaluator=q,this._.nextNode=b.next(),b=new CKEDITOR.dom.walker(r.clone()),b.evaluator=q,b=b.previous(),this._.lastNode=b.getNextSourceNode(!0,null,r.root),this._.lastNode&&this._.lastNode.type== +CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(q=this.range.clone(),q.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),q.checkEndOfBlock()&&(q=new CKEDITOR.dom.elementPath(q.endContainer,q.root),this._.lastNode=(q.block||q.blockLimit).getNextSourceNode(!0))),this._.lastNode&&r.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=r.document.createText(""),this._.lastNode.insertAfter(b)),r=null);this._.started= +1;b=r}q=this._.nextNode;r=this._.lastNode;for(this._.nextNode=null;q;){var x=0,t=q.hasAscendant("pre"),z=q.type!=CKEDITOR.NODE_ELEMENT,y=0;if(z)q.type==CKEDITOR.NODE_TEXT&&a.test(q.getText())&&(z=0);else{var u=q.getName();if(CKEDITOR.dtd.$block[u]&&"false"==q.getAttribute("contenteditable")){d=q;g(this,f,d);break}else if(q.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){if("br"==u)z=1;else if(!b&&!q.getChildCount()&&"hr"!=u){d=q;h=q.equals(r);break}b&&(b.setEndAt(q,CKEDITOR.POSITION_BEFORE_START), +"br"!=u&&(this._.nextNode=q));x=1}else{if(q.getFirst()){b||(b=this.range.clone(),b.setStartAt(q,CKEDITOR.POSITION_BEFORE_START));q=q.getFirst();continue}z=1}}z&&!b&&(b=this.range.clone(),b.setStartAt(q,CKEDITOR.POSITION_BEFORE_START));h=(!x||z)&&q.equals(r);if(b&&!x)for(;!q.getNext(k)&&!h;){u=q.getParent();if(u.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){x=1;z=0;h||u.equals(r);b.setEndAt(u,CKEDITOR.POSITION_BEFORE_END);break}q=u;z=1;h=q.equals(r);y=1}z&&b.setEndAt(q,CKEDITOR.POSITION_AFTER_END); +q=this._getNextSourceNode(q,y,r);if((h=!q)||x&&b)break}if(!d){if(!b)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(b.startContainer,b.root);q=d.blockLimit;x={div:1,th:1,td:1};d=d.block;!d&&q&&!this.enforceRealBlocks&&x[q.getName()]&&b.checkStartOfBlock()&&b.checkEndOfBlock()&&!q.equals(b.root)?d=q:!d||this.enforceRealBlocks&&d.is(c)?(d=this.range.document.createElement(f),b.extractContents().appendTo(d),d.trim(),b.insertNode(d),l=p=!0): +"li"!=d.getName()?b.checkStartOfBlock()&&b.checkEndOfBlock()||(d=d.clone(!1),b.extractContents().appendTo(d),d.trim(),p=b.splitBlock(),l=!p.wasStartOfBlock,p=!p.wasEndOfBlock,b.insertNode(d)):h||(this._.nextNode=d.equals(r)?null:this._getNextSourceNode(b.getBoundaryNodes().endNode,1,r))}l&&(l=d.getPrevious())&&l.type==CKEDITOR.NODE_ELEMENT&&("br"==l.getName()?l.remove():l.getLast()&&"br"==l.getLast().$.nodeName.toLowerCase()&&l.getLast().remove());p&&(l=d.getLast())&&l.type==CKEDITOR.NODE_ELEMENT&& +"br"==l.getName()&&(!CKEDITOR.env.needsBrFiller||l.getPrevious(m)||l.getNext(m))&&l.remove();this._.nextNode||(this._.nextNode=h||d.equals(r)||!r?null:this._getNextSourceNode(d,1,r));return d},_getNextSourceNode:function(a,c,e){function b(a){return!(a.equals(e)||a.equals(g))}var g=this.range.root;for(a=a.getNextSourceNode(c,null,b);!m(a);)a=a.getNextSourceNode(c,null,b);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new b(this)}})();CKEDITOR.command=function(b,h){this.uiItems= +[];this.exec=function(e){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&b.focus();return!1===this.fire("exec")?!0:!1!==h.exec.call(this,b,e)};this.refresh=function(e,a){if(!this.readOnly&&e.readOnly)return!0;if(this.context&&!a.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[e.mode]&&this.disable();return!1===this.fire("refresh",{editor:e,path:a})?!0:h.refresh&&!1!==h.refresh.apply(this, +arguments)};var g;this.checkAllowed=function(e){return e||"boolean"!=typeof g?g=b.activeFilter.checkFeature(this):g};CKEDITOR.tools.extend(this,h,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!h.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)};CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)}, setState:function(b){if(this.state==b||b!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=b;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0, -language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};(function(){function b(a,c,d,e,f){var b,g;a=[];for(b in c){g=c[b];g="boolean"== -typeof g?{}:"function"==typeof g?{match:g}:I(g);"$"!=b.charAt(0)&&(g.elements=b);d&&(g.featureName=d.toLowerCase());var h=g;h.elements=k(h.elements,/\s+/)||null;h.propertiesOnly=h.propertiesOnly||!0===h.elements;var n=/\s*,\s*/,l=void 0;for(l in M){h[l]=k(h[l],n)||null;var q=h,m=H[l],E=k(h[H[l]],n),x=h[l],B=[],w=!0,t=void 0;E?w=!1:E={};for(t in x)"!"==t.charAt(0)&&(t=t.slice(1),B.push(t),E[t]=!0,w=!1);for(;t=B.pop();)x[t]=x["!"+t],delete x["!"+t];q[m]=(w?!1:E)||null}h.match=h.match||null;e.push(g); -a.push(g)}c=f.elements;f=f.generic;var p;d=0;for(e=a.length;d<e;++d){b=I(a[d]);g=!0===b.classes||!0===b.styles||!0===b.attributes;h=b;l=m=n=void 0;for(n in M)h[n]=u(h[n]);q=!0;for(l in H){n=H[l];m=h[n];E=[];x=void 0;for(x in m)-1<x.indexOf("*")?E.push(new RegExp("^"+x.replace(/\*/g,".*")+"$")):E.push(x);m=E;m.length&&(h[n]=m,q=!1)}h.nothingRequired=q;h.noProperties=!(h.attributes||h.classes||h.styles);if(!0===b.elements||null===b.elements)f[g?"unshift":"push"](b);else for(p in h=b.elements,delete b.elements, -h)if(c[p])c[p][g?"unshift":"push"](b);else c[p]=[b]}}function h(a,c,d,e){if(!a.match||a.match(c))if(e||l(a,c))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=g(a.attributes,c.attributes,d.validAttributes)),d.allStyles||(d.allStyles=g(a.styles,c.styles,d.validStyles)),!d.allClasses){a=a.classes;c=c.classes;e=d.validClasses;if(a)if(!0===a)a=!0;else{for(var f=0,b=c.length,h;f<b;++f)h=c[f],e[h]||(e[h]=a(h));a=!1}else a=!1;d.allClasses=a}}function g(a,c,d){if(!a)return!1;if(!0===a)return!0; -for(var e in c)d[e]||(d[e]=a(e));return!1}function f(c,d,e){if(!c.match||c.match(d)){if(c.noProperties)return!1;e.hadInvalidAttribute=a(c.attributes,d.attributes)||e.hadInvalidAttribute;e.hadInvalidStyle=a(c.styles,d.styles)||e.hadInvalidStyle;c=c.classes;d=d.classes;if(c){for(var f=!1,b=!0===c,g=d.length;g--;)if(b||c(d[g]))d.splice(g,1),f=!0;c=f}else c=!1;e.hadInvalidClass=c||e.hadInvalidClass}}function a(a,c){if(!a)return!1;var d=!1,e=!0===a,f;for(f in c)if(e||a(f))delete c[f],d=!0;return d}function m(a, -c,d){if(a.disabled||a.customConfig&&!d||!c)return!1;a._.cachedChecks={};return!0}function k(a,c){if(!a)return!1;if(!0===a)return a;if("string"==typeof a)return a=J(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(c));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var d={},e=0,f;for(f in a)d[f]=a[f],e++;return e?d:!1}function l(a,c){if(a.nothingRequired)return!0;var e,f,b,g;if(b=a.requiredClasses)for(g=c.classes,e=0;e<b.length;++e)if(f=b[e],"string"== -typeof f){if(-1==CKEDITOR.tools.indexOf(g,f))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(g,f))return!1;return d(c.styles,a.requiredStyles)&&d(c.attributes,a.requiredAttributes)}function d(a,c){if(!c)return!0;for(var d=0,e;d<c.length;++d)if(e=c[d],"string"==typeof e){if(!(e in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,e))return!1;return!0}function e(a){if(!a)return{};a=a.split(/\s*,\s*/).sort();for(var c={};a.length;)c[a.shift()]="cke-test";return c}function c(a){var c, -d,e,f,b={},g=1;for(a=J(a);c=a.match(E);)(d=c[2])?(e=n(d,"styles"),f=n(d,"attrs"),d=n(d,"classes")):e=f=d=null,b["$"+g++]={elements:c[1],classes:d,styles:e,attributes:f},a=a.slice(c[0].length);return b}function n(a,c){var d=a.match(Q[c]);return d?J(d[1]):null}function w(a){var c=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(c||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function z(a,c,d,e){var b=0,g;e.toHtml&&(c.name=c.name.replace(O, -"$1"));if(e.doCallbacks&&a.elementCallbacks){a:{g=a.elementCallbacks;for(var k=0,n=g.length,l;k<n;++k)if(l=g[k](c)){g=l;break a}g=void 0}if(g)return g}if(e.doTransform&&(g=a._.transformations[c.name])){w(c);for(k=0;k<g.length;++k)x(a,c,g[k]);p(c)}if(e.doFilter){a:{k=c.name;n=a._;a=n.allowedRules.elements[k];g=n.allowedRules.generic;k=n.disallowedRules.elements[k];n=n.disallowedRules.generic;l=e.skipRequired;var m={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1, -allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},E,B;if(a||g){w(c);if(k)for(E=0,B=k.length;E<B;++E)if(!1===f(k[E],c,m)){a=null;break a}if(n)for(E=0,B=n.length;E<B;++E)f(n[E],c,m);if(a)for(E=0,B=a.length;E<B;++E)h(a[E],c,m,l);if(g)for(E=0,B=g.length;E<B;++E)h(g[E],c,m,l);a=m}else a=null}if(!a||!a.valid)return d.push(c),1;B=a.validAttributes;var t=a.validStyles;g=a.validClasses;var k=c.attributes,Q=c.styles,n=c.classes;l=c.classBackup;var u=c.styleBackup,C,J,A=[],m=[],I=/^data-cke-/; -E=!1;delete k.style;delete k["class"];delete c.classBackup;delete c.styleBackup;if(!a.allAttributes)for(C in k)B[C]||(I.test(C)?C==(J=C.replace(/^data-cke-saved-/,""))||B[J]||(delete k[C],E=!0):(delete k[C],E=!0));if(!a.allStyles||a.hadInvalidStyle){for(C in Q)a.allStyles||t[C]?A.push(C+":"+Q[C]):E=!0;A.length&&(k.style=A.sort().join("; "))}else u&&(k.style=u);if(!a.allClasses||a.hadInvalidClass){for(C=0;C<n.length;++C)(a.allClasses||g[n[C]])&&m.push(n[C]);m.length&&(k["class"]=m.sort().join(" ")); -l&&m.length<l.split(/\s+/).length&&(E=!0)}else l&&(k["class"]=l);E&&(b=1);if(!e.skipFinalValidation&&!q(c))return d.push(c),1}e.toHtml&&(c.name=c.name.replace(P,"cke:$1"));return b}function r(a){var c=[],d;for(d in a)-1<d.indexOf("*")&&c.push(d.replace(/\*/g,".*"));return c.length?new RegExp("^(?:"+c.join("|")+")$"):null}function p(a){var c=a.attributes,d;delete c.style;delete c["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))c.style=d;a.classes.length&&(c["class"]=a.classes.sort().join(" "))} -function q(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function u(a){if(!a)return!1;if(!0===a)return!0;var c=r(a);return function(d){return d in a||c&&d.match(c)}}function t(){return new CKEDITOR.htmlParser.element("br")}function y(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||C.$block[a.name])}function v(a,c,d){var e=a.name;if(C.$empty[e]||!a.children.length)"hr"==e&&"br"==c?a.replaceWith(t()): -(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(C.$block[e]||"tr"==e)if("br"==c)a.previous&&!y(a.previous)&&(c=t(),c.insertBefore(a)),a.next&&!y(a.next)&&(c=t(),c.insertAfter(a)),a.replaceWithChildren();else{var e=a.children,f;b:{f=C[c];for(var b=0,g=e.length,h;b<g;++b)if(h=e[b],h.type==CKEDITOR.NODE_ELEMENT&&!f[h.name]){f=!1;break b}f=!0}if(f)a.name=c,a.attributes={},d.push({check:"parent-down",el:a});else{f=a.parent;for(var b=f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||"body"==f.name, -k,n,g=e.length;0<g;)h=e[--g],b&&(h.type==CKEDITOR.NODE_TEXT||h.type==CKEDITOR.NODE_ELEMENT&&C.$inline[h.name])?(k||(k=new CKEDITOR.htmlParser.element(c),k.insertAfter(a),d.push({check:"parent-down",el:k})),k.add(h,0)):(k=null,n=C[f.name]||C.span,h.insertAfter(a),f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||h.type!=CKEDITOR.NODE_ELEMENT||n[h.name]||d.push({check:"el-up",el:h}));a.remove()}}else e in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function x(a, -c,d){var e,f;for(e=0;e<d.length;++e)if(f=d[e],!(f.check&&!a.check(f.check,!1)||f.left&&!f.left(c))){f.right(c,K);break}}function B(a,c){var d=c.getDefinition(),e=d.attributes,f=d.styles,b,g,h,k;if(a.name!=d.element)return!1;for(b in e)if("class"==b)for(d=e[b].split(/\s+/),h=a.classes.join("|");k=d.pop();){if(-1==h.indexOf(k))return!1}else if(a.attributes[b]!=e[b])return!1;for(g in f)if(a.styles[g]!=f[g])return!1;return!0}function D(a,c){var d,e;"string"==typeof a?d=a:a instanceof CKEDITOR.style?e= -a:(d=a[0],e=a[1]);return[{element:d,left:e,right:function(a,d){d.transform(a,c)}}]}function A(a){return function(c){return B(c,a)}}function G(a){return function(c,d){d[a](c)}}var C=CKEDITOR.dtd,I=CKEDITOR.tools.copy,J=CKEDITOR.tools.trim,F=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a,c){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{}, -generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{},cachedChecks:{}};CKEDITOR.filter.instances[this.id]=this;var d=this.editor=a instanceof CKEDITOR.editor?a:null;if(d&&!c){this.customConfig=!0;var e=d.config.allowedContent;!0===e?this.disabled=!0:(e||(this.customConfig=!1),this.allow(e,"config",1),this.allow(d.config.extraAllowedContent,"extra",1),this.allow(F[d.enterMode]+" "+F[d.shiftEnterMode],"default",1),this.disallow(d.config.disallowedContent))}else this.customConfig= -!1,this.allow(c||a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(a,d,e){if(!m(this,a,e))return!1;var f,g;if("string"==typeof a)a=c(a);else if(a instanceof CKEDITOR.style){if(a.toAllowedContentRules)return this.allow(a.toAllowedContentRules(this.editor),d,e);f=a.getDefinition();a={};e=f.attributes;a[f.element]=f={styles:f.styles,requiredStyles:f.styles&&CKEDITOR.tools.object.keys(f.styles)};e&&(e=I(e),f.classes=e["class"]?e["class"].split(/\s+/):null,f.requiredClasses= -f.classes,delete e["class"],f.attributes=e,f.requiredAttributes=e&&CKEDITOR.tools.object.keys(e))}else if(CKEDITOR.tools.isArray(a)){for(f=0;f<a.length;++f)g=this.allow(a[f],d,e);return g}b(this,a,d,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,c,d,e){if(this.disabled)return!1;var f=this,b=[],g=this.editor&&this.editor.config.protectedSource,h,k=!1,n={doFilter:!d,doTransform:!0,doCallbacks:!0,toHtml:c};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1; -if(!c||"span"!=a.name||!~CKEDITOR.tools.object.keys(a.attributes).join("|").indexOf("data-cke-"))if(h=z(f,a,b,n),h&1)k=!0;else if(h&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var e=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var l,q,m;if(g)for(q=0;q<g.length;++q)if((m=e.match(g[q]))&&m[0].length==e.length){d=!0;break a}e=CKEDITOR.htmlParser.fragment.fromHtml(e);1==e.children.length&&(l=e.children[0]).type==CKEDITOR.NODE_ELEMENT&& -z(f,l,d,n);d=!d.length}d||b.push(a)}},null,!0);b.length&&(k=!0);var l;a=[];e=F[e||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var m;d=b.pop();)d.type==CKEDITOR.NODE_ELEMENT?v(d,e,a):d.remove();for(;l=a.pop();)if(d=l.el,d.parent)switch(m=C[d.parent.name]||C.span,l.check){case "it":C.$removeEmpty[d.name]&&!d.children.length?v(d,e,a):q(d)||v(d,e,a);break;case "el-up":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||m[d.name]||v(d,e,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT|| -m[d.name]||v(d.parent,e,a)}return k},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(a){if(!m(this,a,!0))return!1;"string"==typeof a&&(a=c(a));b(this,a,null,this.disallowedContent,this._.disallowedRules);return!0},addContentForms:function(a){if(!this.disabled&&a){var c,d,e=[],f;for(c=0;c<a.length&&!f;++c)d=a[c],("string"==typeof d||d instanceof -CKEDITOR.style)&&this.check(d)&&(f=d);if(f){for(c=0;c<a.length;++c)e.push(D(a[c],f));this.addTransformations(e)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)? -this.check(a.requiredContent):!0},addTransformations:function(a){var c,d;if(!this.disabled&&a){var e=this._.transformations,f;for(f=0;f<a.length;++f){c=a[f];var b=void 0,g=void 0,h=void 0,k=void 0,n=void 0,l=void 0;d=[];for(g=0;g<c.length;++g)h=c[g],"string"==typeof h?(h=h.split(/\s*:\s*/),k=h[0],n=null,l=h[1]):(k=h.check,n=h.left,l=h.right),b||(b=h,b=b.element?b.element:k?k.match(/^([a-z0-9]+)/i)[0]:b.left.getDefinition().element),n instanceof CKEDITOR.style&&(n=A(n)),d.push({check:k==b?null:k,left:n, -right:"string"==typeof l?G(l):l});c=b;e[c]||(e[c]=[]);e[c].push(d)}}},check:function(a,d,f){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var b=a.length;b--;)if(this.check(a[b],d,f))return!0;return!1}var g,h;if("string"==typeof a){h=a+"\x3c"+(!1===d?"0":"1")+(f?"1":"0")+"\x3e";if(h in this._.cachedChecks)return this._.cachedChecks[h];g=c(a).$1;var k=g.styles,b=g.classes;g.name=g.elements;g.classes=b=b?b.split(/\s*,\s*/):[];g.styles=e(k);g.attributes=e(g.attributes);g.children=[];b.length&& -(g.attributes["class"]=b.join(" "));k&&(g.attributes.style=CKEDITOR.tools.writeCssText(g.styles))}else g=a.getDefinition(),k=g.styles,b=g.attributes||{},k&&!CKEDITOR.tools.isEmpty(k)?(k=I(k),b.style=CKEDITOR.tools.writeCssText(k,!0)):k={},g={name:g.element,attributes:b,classes:b["class"]?b["class"].split(/\s+/):[],styles:k,children:[]};var k=CKEDITOR.tools.clone(g),n=[],l;if(!1!==d&&(l=this._.transformations[g.name])){for(b=0;b<l.length;++b)x(this,g,l[b]);p(g)}z(this,k,n,{doFilter:!0,doTransform:!1!== -d,skipRequired:!f,skipFinalValidation:!f});0<n.length?f=!1:((d=g.attributes["class"])&&(g.attributes["class"]=g.attributes["class"].split(" ").sort().join(" ")),f=CKEDITOR.tools.objectCompare(g.attributes,k.attributes,!0),d&&(g.attributes["class"]=d));"string"==typeof a&&(this._.cachedChecks[h]=f);return f},getAllowedEnterMode:function(){var a=["p","div","br"],c={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,e){var f=a.slice(),b;if(this.check(F[d]))return d;for(e|| -(f=f.reverse());b=f.pop();)if(this.check(b))return c[b];return CKEDITOR.ENTER_BR}}(),clone:function(){var a=new CKEDITOR.filter,c=CKEDITOR.tools.clone;a.allowedContent=c(this.allowedContent);a._.allowedRules=c(this._.allowedRules);a.disallowedContent=c(this.disallowedContent);a._.disallowedRules=c(this._.disallowedRules);a._.transformations=c(this._.transformations);a.disabled=this.disabled;a.editor=this.editor;return a},destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; -delete this.disallowedContent}};var M={styles:1,attributes:1,classes:1},H={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},E=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,Q={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},O=/^cke:(object|embed|param)$/,P=/^(object|embed|param)$/,K;K=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, -"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,c,d){d=d||c;if(!(d in a.styles)){var e=a.attributes[c];e&&(/^\d+$/.test(e)&&(e+="px"),a.styles[d]=e)}delete a.attributes[c]},lengthToAttribute:function(a,c,d){d=d||c;if(!(d in a.attributes)){var e=a.styles[c],f=e&&e.match(/^(\d+)(?:\.\d*)?px$/);f?a.attributes[d]=f[1]:"cke-test"==e&&(a.attributes[d]="cke-test")}delete a.styles[c]},alignmentToStyle:function(a){if(!("float"in +language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};(function(){function b(a,c,d,f,e){var b,g;a=[];for(b in c){g=c[b];g="boolean"== +typeof g?{}:"function"==typeof g?{match:g}:I(g);"$"!=b.charAt(0)&&(g.elements=b);d&&(g.featureName=d.toLowerCase());var h=g;h.elements=l(h.elements,/\s+/)||null;h.propertiesOnly=h.propertiesOnly||!0===h.elements;var n=/\s*,\s*/,k=void 0;for(k in M){h[k]=l(h[k],n)||null;var u=h,q=H[k],m=l(h[H[k]],n),D=h[k],O=[],r=!0,w=void 0;m?r=!1:m={};for(w in D)"!"==w.charAt(0)&&(w=w.slice(1),O.push(w),m[w]=!0,r=!1);for(;w=O.pop();)D[w]=D["!"+w],delete D["!"+w];u[q]=(r?!1:m)||null}h.match=h.match||null;f.push(g); +a.push(g)}c=e.elements;e=e.generic;var t;d=0;for(f=a.length;d<f;++d){b=I(a[d]);g=!0===b.classes||!0===b.styles||!0===b.attributes;h=b;k=q=n=void 0;for(n in M)h[n]=x(h[n]);u=!0;for(k in H){n=H[k];q=h[n];m=[];D=void 0;for(D in q)-1<D.indexOf("*")?m.push(new RegExp("^"+D.replace(/\*/g,".*")+"$")):m.push(D);q=m;q.length&&(h[n]=q,u=!1)}h.nothingRequired=u;h.noProperties=!(h.attributes||h.classes||h.styles);if(!0===b.elements||null===b.elements)e[g?"unshift":"push"](b);else for(t in h=b.elements,delete b.elements, +h)if(c[t])c[t][g?"unshift":"push"](b);else c[t]=[b]}}function h(a,c,d,f){if(!a.match||a.match(c))if(f||k(a,c))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=g(a.attributes,c.attributes,d.validAttributes)),d.allStyles||(d.allStyles=g(a.styles,c.styles,d.validStyles)),!d.allClasses){a=a.classes;c=c.classes;f=d.validClasses;if(a)if(!0===a)a=!0;else{for(var e=0,b=c.length,h;e<b;++e)h=c[e],f[h]||(f[h]=a(h));a=!1}else a=!1;d.allClasses=a}}function g(a,c,d){if(!a)return!1;if(!0===a)return!0; +for(var f in c)d[f]||(d[f]=a(f));return!1}function e(c,d,f){if(!c.match||c.match(d)){if(c.noProperties)return!1;f.hadInvalidAttribute=a(c.attributes,d.attributes)||f.hadInvalidAttribute;f.hadInvalidStyle=a(c.styles,d.styles)||f.hadInvalidStyle;c=c.classes;d=d.classes;if(c){for(var e=!1,b=!0===c,g=d.length;g--;)if(b||c(d[g]))d.splice(g,1),e=!0;c=e}else c=!1;f.hadInvalidClass=c||f.hadInvalidClass}}function a(a,c){if(!a)return!1;var d=!1,f=!0===a,e;for(e in c)if(f||a(e))delete c[e],d=!0;return d}function m(a, +c,d){if(a.disabled||a.customConfig&&!d||!c)return!1;a._.cachedChecks={};return!0}function l(a,c){if(!a)return!1;if(!0===a)return a;if("string"==typeof a)return a=L(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(c));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var d={},f=0,e;for(e in a)d[e]=a[e],f++;return f?d:!1}function k(a,d){if(a.nothingRequired)return!0;var f,e,b,g;if(b=a.requiredClasses)for(g=d.classes,f=0;f<b.length;++f)if(e=b[f],"string"== +typeof e){if(-1==CKEDITOR.tools.indexOf(g,e))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(g,e))return!1;return c(d.styles,a.requiredStyles)&&c(d.attributes,a.requiredAttributes)}function c(a,c){if(!c)return!0;for(var d=0,f;d<c.length;++d)if(f=c[d],"string"==typeof f){if(!(f in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,f))return!1;return!0}function f(a){if(!a)return{};a=a.split(/\s*,\s*/).sort();for(var c={};a.length;)c[a.shift()]="cke-test";return c}function d(a){var c, +d,f,e,b={},g=1;for(a=L(a);c=a.match(J);)(d=c[2])?(f=n(d,"styles"),e=n(d,"attrs"),d=n(d,"classes")):f=e=d=null,b["$"+g++]={elements:c[1],classes:d,styles:f,attributes:e},a=a.slice(c[0].length);return b}function n(a,c){var d=a.match(D[c]);return d?L(d[1]):null}function w(a){var c=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(c||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function v(a,c,d,f){var b=0,g;f.toHtml&&(c.name=c.name.replace(K, +"$1"));if(f.doCallbacks&&a.elementCallbacks){a:{g=a.elementCallbacks;for(var l=0,n=g.length,k;l<n;++l)if(k=g[l](c)){g=k;break a}g=void 0}if(g)return g}if(f.doTransform&&(g=a._.transformations[c.name])){w(c);for(l=0;l<g.length;++l)u(a,c,g[l]);r(c)}if(f.doFilter){a:{l=c.name;n=a._;a=n.allowedRules.elements[l];g=n.allowedRules.generic;l=n.disallowedRules.elements[l];n=n.disallowedRules.generic;k=f.skipRequired;var m={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1, +allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},D,x;if(a||g){w(c);if(l)for(D=0,x=l.length;D<x;++D)if(!1===e(l[D],c,m)){a=null;break a}if(n)for(D=0,x=n.length;D<x;++D)e(n[D],c,m);if(a)for(D=0,x=a.length;D<x;++D)h(a[D],c,m,k);if(g)for(D=0,x=g.length;D<x;++D)h(g[D],c,m,k);a=m}else a=null}if(!a||!a.valid)return d.push(c),1;x=a.validAttributes;var t=a.validStyles;g=a.validClasses;var l=c.attributes,B=c.styles,n=c.classes;k=c.classBackup;var Q=c.styleBackup,P,G,L=[],m=[],A=/^data-cke-/; +D=!1;delete l.style;delete l["class"];delete c.classBackup;delete c.styleBackup;if(!a.allAttributes)for(P in l)x[P]||(A.test(P)?P==(G=P.replace(/^data-cke-saved-/,""))||x[G]||(delete l[P],D=!0):(delete l[P],D=!0));if(!a.allStyles||a.hadInvalidStyle){for(P in B)a.allStyles||t[P]?L.push(P+":"+B[P]):D=!0;L.length&&(l.style=L.sort().join("; "))}else Q&&(l.style=Q);if(!a.allClasses||a.hadInvalidClass){for(P=0;P<n.length;++P)(a.allClasses||g[n[P]])&&m.push(n[P]);m.length&&(l["class"]=m.sort().join(" ")); +k&&m.length<k.split(/\s+/).length&&(D=!0)}else k&&(l["class"]=k);D&&(b=1);if(!f.skipFinalValidation&&!q(c))return d.push(c),1}f.toHtml&&(c.name=c.name.replace(O,"cke:$1"));return b}function p(a){var c=[],d;for(d in a)-1<d.indexOf("*")&&c.push(d.replace(/\*/g,".*"));return c.length?new RegExp("^(?:"+c.join("|")+")$"):null}function r(a){var c=a.attributes,d;delete c.style;delete c["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))c.style=d;a.classes.length&&(c["class"]=a.classes.sort().join(" "))} +function q(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function x(a){if(!a)return!1;if(!0===a)return!0;var c=p(a);return function(d){return d in a||c&&d.match(c)}}function t(){return new CKEDITOR.htmlParser.element("br")}function z(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||G.$block[a.name])}function y(a,c,d){var f=a.name;if(G.$empty[f]||!a.children.length)"hr"==f&&"br"==c?a.replaceWith(t()): +(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(G.$block[f]||"tr"==f)if("br"==c)a.previous&&!z(a.previous)&&(c=t(),c.insertBefore(a)),a.next&&!z(a.next)&&(c=t(),c.insertAfter(a)),a.replaceWithChildren();else{var f=a.children,e;b:{e=G[c];for(var b=0,g=f.length,h;b<g;++b)if(h=f[b],h.type==CKEDITOR.NODE_ELEMENT&&!e[h.name]){e=!1;break b}e=!0}if(e)a.name=c,a.attributes={},d.push({check:"parent-down",el:a});else{e=a.parent;for(var b=e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||"body"==e.name, +l,n,g=f.length;0<g;)h=f[--g],b&&(h.type==CKEDITOR.NODE_TEXT||h.type==CKEDITOR.NODE_ELEMENT&&G.$inline[h.name])?(l||(l=new CKEDITOR.htmlParser.element(c),l.insertAfter(a),d.push({check:"parent-down",el:l})),l.add(h,0)):(l=null,n=G[e.name]||G.span,h.insertAfter(a),e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||h.type!=CKEDITOR.NODE_ELEMENT||n[h.name]||d.push({check:"el-up",el:h}));a.remove()}}else f in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function u(a, +c,d){var f,e;for(f=0;f<d.length;++f)if(e=d[f],!(e.check&&!a.check(e.check,!1)||e.left&&!e.left(c))){e.right(c,N);break}}function B(a,c){var d=c.getDefinition(),f=d.attributes,e=d.styles,b,g,h,l;if(a.name!=d.element)return!1;for(b in f)if("class"==b)for(d=f[b].split(/\s+/),h=a.classes.join("|");l=d.pop();){if(-1==h.indexOf(l))return!1}else if(a.attributes[b]!=f[b])return!1;for(g in e)if(a.styles[g]!=e[g])return!1;return!0}function C(a,c){var d,f;"string"==typeof a?d=a:a instanceof CKEDITOR.style?f= +a:(d=a[0],f=a[1]);return[{element:d,left:f,right:function(a,d){d.transform(a,c)}}]}function A(a){return function(c){return B(c,a)}}function E(a){return function(c,d){d[a](c)}}var G=CKEDITOR.dtd,I=CKEDITOR.tools.copy,L=CKEDITOR.tools.trim,F=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a,c){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{}, +generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{},cachedChecks:{}};CKEDITOR.filter.instances[this.id]=this;var d=this.editor=a instanceof CKEDITOR.editor?a:null;if(d&&!c){this.customConfig=!0;var f=d.config.allowedContent;!0===f?this.disabled=!0:(f||(this.customConfig=!1),this.allow(f,"config",1),this.allow(d.config.extraAllowedContent,"extra",1),this.allow(F[d.enterMode]+" "+F[d.shiftEnterMode],"default",1),this.disallow(d.config.disallowedContent))}else this.customConfig= +!1,this.allow(c||a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(a,c,f){if(!m(this,a,f))return!1;var e,g;if("string"==typeof a)a=d(a);else if(a instanceof CKEDITOR.style){if(a.toAllowedContentRules)return this.allow(a.toAllowedContentRules(this.editor),c,f);e=a.getDefinition();a={};f=e.attributes;a[e.element]=e={styles:e.styles,requiredStyles:e.styles&&CKEDITOR.tools.object.keys(e.styles)};f&&(f=I(f),e.classes=f["class"]?f["class"].split(/\s+/):null,e.requiredClasses= +e.classes,delete f["class"],e.attributes=f,e.requiredAttributes=f&&CKEDITOR.tools.object.keys(f))}else if(CKEDITOR.tools.isArray(a)){for(e=0;e<a.length;++e)g=this.allow(a[e],c,f);return g}b(this,a,c,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,c,d,f){if(this.disabled)return!1;var e=this,b=[],g=this.editor&&this.editor.config.protectedSource,h,l=!1,n={doFilter:!d,doTransform:!0,doCallbacks:!0,toHtml:c};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1; +if(!c||"span"!=a.name||!~CKEDITOR.tools.object.keys(a.attributes).join("|").indexOf("data-cke-"))if(h=v(e,a,b,n),h&1)l=!0;else if(h&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var f=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var k,u,q;if(g)for(u=0;u<g.length;++u)if((q=f.match(g[u]))&&q[0].length==f.length){d=!0;break a}f=CKEDITOR.htmlParser.fragment.fromHtml(f);1==f.children.length&&(k=f.children[0]).type==CKEDITOR.NODE_ELEMENT&& +v(e,k,d,n);d=!d.length}d||b.push(a)}},null,!0);b.length&&(l=!0);var k;a=[];f=F[f||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var u;d=b.pop();)d.type==CKEDITOR.NODE_ELEMENT?y(d,f,a):d.remove();for(;k=a.pop();)if(d=k.el,d.parent)switch(u=G[d.parent.name]||G.span,k.check){case "it":G.$removeEmpty[d.name]&&!d.children.length?y(d,f,a):q(d)||y(d,f,a);break;case "el-up":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||u[d.name]||y(d,f,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT|| +u[d.name]||y(d.parent,f,a)}return l},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(a){if(!m(this,a,!0))return!1;"string"==typeof a&&(a=d(a));b(this,a,null,this.disallowedContent,this._.disallowedRules);return!0},addContentForms:function(a){if(!this.disabled&&a){var c,d,f=[],e;for(c=0;c<a.length&&!e;++c)d=a[c],("string"==typeof d||d instanceof +CKEDITOR.style)&&this.check(d)&&(e=d);if(e){for(c=0;c<a.length;++c)f.push(C(a[c],e));this.addTransformations(f)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)? +this.check(a.requiredContent):!0},addTransformations:function(a){var c,d;if(!this.disabled&&a){var f=this._.transformations,e;for(e=0;e<a.length;++e){c=a[e];var b=void 0,g=void 0,h=void 0,l=void 0,n=void 0,k=void 0;d=[];for(g=0;g<c.length;++g)h=c[g],"string"==typeof h?(h=h.split(/\s*:\s*/),l=h[0],n=null,k=h[1]):(l=h.check,n=h.left,k=h.right),b||(b=h,b=b.element?b.element:l?l.match(/^([a-z0-9]+)/i)[0]:b.left.getDefinition().element),n instanceof CKEDITOR.style&&(n=A(n)),d.push({check:l==b?null:l,left:n, +right:"string"==typeof k?E(k):k});c=b;f[c]||(f[c]=[]);f[c].push(d)}}},check:function(a,c,e){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var b=a.length;b--;)if(this.check(a[b],c,e))return!0;return!1}var g,h;if("string"==typeof a){h=a+"\x3c"+(!1===c?"0":"1")+(e?"1":"0")+"\x3e";if(h in this._.cachedChecks)return this._.cachedChecks[h];g=d(a).$1;var l=g.styles,b=g.classes;g.name=g.elements;g.classes=b=b?b.split(/\s*,\s*/):[];g.styles=f(l);g.attributes=f(g.attributes);g.children=[];b.length&& +(g.attributes["class"]=b.join(" "));l&&(g.attributes.style=CKEDITOR.tools.writeCssText(g.styles))}else g=a.getDefinition(),l=g.styles,b=g.attributes||{},l&&!CKEDITOR.tools.isEmpty(l)?(l=I(l),b.style=CKEDITOR.tools.writeCssText(l,!0)):l={},g={name:g.element,attributes:b,classes:b["class"]?b["class"].split(/\s+/):[],styles:l,children:[]};var l=CKEDITOR.tools.clone(g),n=[],k;if(!1!==c&&(k=this._.transformations[g.name])){for(b=0;b<k.length;++b)u(this,g,k[b]);r(g)}v(this,l,n,{doFilter:!0,doTransform:!1!== +c,skipRequired:!e,skipFinalValidation:!e});0<n.length?e=!1:((c=g.attributes["class"])&&(g.attributes["class"]=g.attributes["class"].split(" ").sort().join(" ")),e=CKEDITOR.tools.objectCompare(g.attributes,l.attributes,!0),c&&(g.attributes["class"]=c));"string"==typeof a&&(this._.cachedChecks[h]=e);return e},getAllowedEnterMode:function(){var a=["p","div","br"],c={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,f){var e=a.slice(),b;if(this.check(F[d]))return d;for(f|| +(e=e.reverse());b=e.pop();)if(this.check(b))return c[b];return CKEDITOR.ENTER_BR}}(),clone:function(){var a=new CKEDITOR.filter,c=CKEDITOR.tools.clone;a.allowedContent=c(this.allowedContent);a._.allowedRules=c(this._.allowedRules);a.disallowedContent=c(this.disallowedContent);a._.disallowedRules=c(this._.disallowedRules);a._.transformations=c(this._.transformations);a.disabled=this.disabled;a.editor=this.editor;return a},destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; +delete this.disallowedContent}};var M={styles:1,attributes:1,classes:1},H={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},J=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,D={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},K=/^cke:(object|embed|param)$/,O=/^(object|embed|param)$/,N;N=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, +"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,c,d){d=d||c;if(!(d in a.styles)){var f=a.attributes[c];f&&(/^\d+$/.test(f)&&(f+="px"),a.styles[d]=f)}delete a.attributes[c]},lengthToAttribute:function(a,c,d){d=d||c;if(!(d in a.attributes)){var f=a.styles[c],e=f&&f.match(/^(\d+)(?:\.\d*)?px$/);e?a.attributes[d]=e[1]:"cke-test"==f&&(a.attributes[d]="cke-test")}delete a.styles[c]},alignmentToStyle:function(a){if(!("float"in a.styles)){var c=a.attributes.align;if("left"==c||"right"==c)a.styles["float"]=c}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var c=a.styles["float"];if("left"==c||"right"==c)a.attributes.align=c}delete a.styles["float"]},splitBorderShorthand:function(a){if(a.styles.border){var c=CKEDITOR.tools.style.parse.border(a.styles.border);c.color&&(a.styles["border-color"]=c.color);c.style&&(a.styles["border-style"]=c.style);c.width&&(a.styles["border-width"]=c.width); -delete a.styles.border}},listTypeToStyle:function(a){if(a.attributes.type)switch(a.attributes.type){case "a":a.styles["list-style-type"]="lower-alpha";break;case "A":a.styles["list-style-type"]="upper-alpha";break;case "i":a.styles["list-style-type"]="lower-roman";break;case "I":a.styles["list-style-type"]="upper-roman";break;case "1":a.styles["list-style-type"]="decimal";break;default:a.styles["list-style-type"]=a.attributes.type}},splitMarginShorthand:function(a){function c(e){a.styles["margin-top"]= -d[e[0]];a.styles["margin-right"]=d[e[1]];a.styles["margin-bottom"]=d[e[2]];a.styles["margin-left"]=d[e[3]]}if(a.styles.margin){var d=a.styles.margin.match(/(\-?[\.\d]+\w+)/g)||["0px"];switch(d.length){case 1:c([0,0,0,0]);break;case 2:c([0,1,0,1]);break;case 3:c([0,1,2,1]);break;case 4:c([0,1,2,3])}delete a.styles.margin}},matchesStyle:B,transform:function(a,c){if("string"==typeof c)a.name=c;else{var d=c.getDefinition(),e=d.styles,f=d.attributes,b,g,h,k;a.name=d.element;for(b in f)if("class"==b)for(d= -a.classes.join("|"),h=f[b].split(/\s+/);k=h.pop();)-1==d.indexOf(k)&&a.classes.push(k);else a.attributes[b]=f[b];for(g in e)a.styles[g]=e[g]}}}})();(function(){CKEDITOR.focusManager=function(b){if(b.focusManager)return b.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:b};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(b){this._.timer&&clearTimeout(this._.timer);b&&(this.currentActive=b);this.hasFocus||this._.locked||((b=CKEDITOR.currentInstance)&& -b.focusManager.blur(1),this.hasFocus=!0,(b=this._.editor.container)&&b.addClass("cke_focus"),this._.editor.fire("focus"))},lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(b){function h(){if(this.hasFocus){this.hasFocus=!1;var f=this._.editor.container;f&&f.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var g=CKEDITOR.focusManager._.blurDelay;b||!g?h.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer; -h.call(this)},g,this)}},add:function(b,h){var g=b.getCustomData("focusmanager");if(!g||g!=this){g&&g.remove(b);var g="focus",f="blur";h&&(CKEDITOR.env.ie?(g="focusin",f="focusout"):CKEDITOR.event.useCapture=1);var a={blur:function(){b.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(b)}};b.on(g,a.focus,this);b.on(f,a.blur,this);h&&(CKEDITOR.event.useCapture=0);b.setCustomData("focusmanager",this);b.setCustomData("focusmanager_handlers",a)}},remove:function(b){b.removeCustomData("focusmanager"); -var h=b.removeCustomData("focusmanager_handlers");b.removeListener("blur",h.blur);b.removeListener("focus",h.focus)}}})();CKEDITOR.keystrokeHandler=function(b){if(b.keystrokeHandler)return b.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:b};return this};(function(){var b,h=function(f){f=f.data;var a=f.getKeystroke(),g=this.keystrokes[a],h=this._.editor;b=!1===h.fire("key",{keyCode:a,domEvent:f});b||(g&&(b=!1!==h.execCommand(g,{from:"keystrokeHandler"})),b||(b=!!this.blockedKeystrokes[a])); -b&&f.preventDefault(!0);return!b},g=function(f){b&&(b=!1,f.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(f){f.on("keydown",h,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)f.on("keypress",g,this)}}})();(function(){CKEDITOR.lang={languages:{af:1,ar:1,az:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1, -ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,oc:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(b,h,g){b&&CKEDITOR.lang.languages[b]||(b=this.detect(h,b));var f=this;h=function(){f[b].dir=f.rtl[b]?"rtl":"ltr";g(b,f[b])};this[b]?h():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+b+".js"),h,this)},detect:function(b,h){var g=this.languages;h=h||navigator.userLanguage||navigator.language|| -b;var f=h.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),a=f[1],f=f[2];g[a+"-"+f]?a=a+"-"+f:g[a]||(a=null);CKEDITOR.lang.detect=a?function(){return a}:function(a){return a};return a||b}}})();CKEDITOR.scriptLoader=function(){var b={},h={};return{load:function(g,f,a,m){var k="string"==typeof g;k&&(g=[g]);a||(a=CKEDITOR);var l=g.length,d=[],e=[],c=function(c){f&&(k?f.call(a,c):f.call(a,d,e))};if(0===l)c(!0);else{var n=function(a,f){(f?d:e).push(a);0>=--l&&(m&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"), -c(f))},w=function(a,c){b[a]=1;var d=h[a];delete h[a];for(var e=0;e<d.length;e++)d[e](a,c)},z=function(a){if(b[a])n(a,!0);else{var c=h[a]||(h[a]=[]);c.push(n);if(!(1<c.length)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:a});f&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?d.$.onreadystatechange=function(){if("loaded"==d.$.readyState||"complete"==d.$.readyState)d.$.onreadystatechange=null,w(a,!0)}:(d.$.onload=function(){setTimeout(function(){d.$.onload= -null;d.$.onerror=null;w(a,!0)},0)},d.$.onerror=function(){d.$.onload=null;d.$.onerror=null;w(a,!1)}));d.appendTo(CKEDITOR.document.getHead())}}};m&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var r=0;r<l;r++)z(g[r])}},queue:function(){function b(){var a;(a=f[0])&&this.load(a.scriptUrl,a.callback,CKEDITOR,0)}var f=[];return function(a,h){var k=this;f.push({scriptUrl:a,callback:function(){h&&h.apply(this,arguments);f.shift();b.call(k)}});1==f.length&&b.call(this)}}()}}();CKEDITOR.resourceManager= +delete a.styles.border}},listTypeToStyle:function(a){if(a.attributes.type)switch(a.attributes.type){case "a":a.styles["list-style-type"]="lower-alpha";break;case "A":a.styles["list-style-type"]="upper-alpha";break;case "i":a.styles["list-style-type"]="lower-roman";break;case "I":a.styles["list-style-type"]="upper-roman";break;case "1":a.styles["list-style-type"]="decimal";break;default:a.styles["list-style-type"]=a.attributes.type}},splitMarginShorthand:function(a){function c(f){a.styles["margin-top"]= +d[f[0]];a.styles["margin-right"]=d[f[1]];a.styles["margin-bottom"]=d[f[2]];a.styles["margin-left"]=d[f[3]]}if(a.styles.margin){var d=a.styles.margin.match(/(\-?[\.\d]+\w+)/g)||["0px"];switch(d.length){case 1:c([0,0,0,0]);break;case 2:c([0,1,0,1]);break;case 3:c([0,1,2,1]);break;case 4:c([0,1,2,3])}delete a.styles.margin}},matchesStyle:B,transform:function(a,c){if("string"==typeof c)a.name=c;else{var d=c.getDefinition(),f=d.styles,e=d.attributes,b,g,h,l;a.name=d.element;for(b in e)if("class"==b)for(d= +a.classes.join("|"),h=e[b].split(/\s+/);l=h.pop();)-1==d.indexOf(l)&&a.classes.push(l);else a.attributes[b]=e[b];for(g in f)a.styles[g]=f[g]}}}})();(function(){CKEDITOR.focusManager=function(b){if(b.focusManager)return b.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:b};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(b){this._.timer&&clearTimeout(this._.timer);b&&(this.currentActive=b);this.hasFocus||this._.locked||((b=CKEDITOR.currentInstance)&& +b.focusManager.blur(1),this.hasFocus=!0,(b=this._.editor.container)&&b.addClass("cke_focus"),this._.editor.fire("focus"))},lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(b){function h(){if(this.hasFocus){this.hasFocus=!1;var e=this._.editor.container;e&&e.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var g=CKEDITOR.focusManager._.blurDelay;b||!g?h.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer; +h.call(this)},g,this)}},add:function(b,h){var g=b.getCustomData("focusmanager");if(!g||g!=this){g&&g.remove(b);var g="focus",e="blur";h&&(CKEDITOR.env.ie?(g="focusin",e="focusout"):CKEDITOR.event.useCapture=1);var a={blur:function(){b.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(b)}};b.on(g,a.focus,this);b.on(e,a.blur,this);h&&(CKEDITOR.event.useCapture=0);b.setCustomData("focusmanager",this);b.setCustomData("focusmanager_handlers",a)}},remove:function(b){b.removeCustomData("focusmanager"); +var h=b.removeCustomData("focusmanager_handlers");b.removeListener("blur",h.blur);b.removeListener("focus",h.focus)}}})();CKEDITOR.keystrokeHandler=function(b){if(b.keystrokeHandler)return b.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:b};return this};(function(){var b,h=function(e){e=e.data;var a=e.getKeystroke(),g=this.keystrokes[a],h=this._.editor;b=!1===h.fire("key",{keyCode:a,domEvent:e});b||(g&&(b=!1!==h.execCommand(g,{from:"keystrokeHandler"})),b||(b=!!this.blockedKeystrokes[a])); +b&&e.preventDefault(!0);return!b},g=function(e){b&&(b=!1,e.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(e){e.on("keydown",h,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)e.on("keypress",g,this)}}})();(function(){CKEDITOR.lang={languages:{af:1,ar:1,az:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1, +ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,oc:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(b,h,g){b&&CKEDITOR.lang.languages[b]||(b=this.detect(h,b));var e=this;h=function(){e[b].dir=e.rtl[b]?"rtl":"ltr";g(b,e[b])};this[b]?h():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+b+".js"),h,this)},detect:function(b,h){var g=this.languages;h=h||navigator.userLanguage||navigator.language|| +b;var e=h.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),a=e[1],e=e[2];g[a+"-"+e]?a=a+"-"+e:g[a]||(a=null);CKEDITOR.lang.detect=a?function(){return a}:function(a){return a};return a||b}}})();CKEDITOR.scriptLoader=function(){var b={},h={};return{load:function(g,e,a,m){var l="string"==typeof g;l&&(g=[g]);a||(a=CKEDITOR);var k=g.length,c=[],f=[],d=function(d){e&&(l?e.call(a,d):e.call(a,c,f))};if(0===k)d(!0);else{var n=function(a,e){(e?c:f).push(a);0>=--k&&(m&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"), +d(e))},w=function(a,c){b[a]=1;var d=h[a];delete h[a];for(var f=0;f<d.length;f++)d[f](a,c)},v=function(a){if(b[a])n(a,!0);else{var c=h[a]||(h[a]=[]);c.push(n);if(!(1<c.length)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:a});e&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?d.$.onreadystatechange=function(){if("loaded"==d.$.readyState||"complete"==d.$.readyState)d.$.onreadystatechange=null,w(a,!0)}:(d.$.onload=function(){setTimeout(function(){d.$.onload= +null;d.$.onerror=null;w(a,!0)},0)},d.$.onerror=function(){d.$.onload=null;d.$.onerror=null;w(a,!1)}));d.appendTo(CKEDITOR.document.getHead())}}};m&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var p=0;p<k;p++)v(g[p])}},queue:function(){function b(){var a;(a=e[0])&&this.load(a.scriptUrl,a.callback,CKEDITOR,0)}var e=[];return function(a,h){var l=this;e.push({scriptUrl:a,callback:function(){h&&h.apply(this,arguments);e.shift();b.call(l)}});1==e.length&&b.call(this)}}()}}();CKEDITOR.resourceManager= function(b,h){this.basePath=b;this.fileName=h;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}};CKEDITOR.resourceManager.prototype={add:function(b,h){if(this.registered[b])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+b+'" is already registered.');var g=this.registered[b]=h||{};g.name=b;g.path=this.getPath(b);CKEDITOR.fire(b+CKEDITOR.tools.capitalize(this.fileName)+"Ready",g);return this.get(b)},get:function(b){return this.registered[b]||null},getPath:function(b){var h= -this.externals[b];return CKEDITOR.getUrl(h&&h.dir||this.basePath+b+"/")},getFilePath:function(b){var h=this.externals[b];return CKEDITOR.getUrl(this.getPath(b)+(h?h.file:this.fileName+".js"))},addExternal:function(b,h,g){g||(h=h.replace(/[^\/]+$/,function(a){g=a;return""}));g=g||this.fileName+".js";b=b.split(",");for(var f=0;f<b.length;f++)this.externals[b[f]]={dir:h,file:g}},load:function(b,h,g){CKEDITOR.tools.isArray(b)||(b=b?[b]:[]);for(var f=this.loaded,a=this.registered,m=[],k={},l={},d=0;d< -b.length;d++){var e=b[d];if(e)if(f[e]||a[e])l[e]=this.get(e);else{var c=this.getFilePath(e);m.push(c);c in k||(k[c]=[]);k[c].push(e)}}CKEDITOR.scriptLoader.load(m,function(a,c){if(c.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+k[c[0]].join(",")+'" was not found at "'+c[0]+'".');for(var d=0;d<a.length;d++)for(var e=k[a[d]],b=0;b<e.length;b++){var q=e[b];l[q]=this.get(q);f[q]=1}h.call(g,l)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin");CKEDITOR.plugins.load= -CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var h={};return function(g,f,a){var m={},k=function(g){b.call(this,g,function(d){CKEDITOR.tools.extend(m,d);var e=[],c;for(c in d){var b=d[c],g=b&&b.requires;if(!h[c]){if(b.icons)for(var l=b.icons.split(","),r=l.length;r--;)CKEDITOR.skin.addIcon(l[r],b.path+"icons/"+(CKEDITOR.env.hidpi&&b.hidpi?"hidpi/":"")+l[r]+".png");b.isSupportedEnvironment=b.isSupportedEnvironment||function(){return!0};h[c]=1}if(g)for(g.split&&(g=g.split(",")),b=0;b<g.length;b++)m[g[b]]|| -e.push(g[b])}if(e.length)k.call(this,e);else{for(c in m)b=m[c],b.onLoad&&!b.onLoad._called&&(!1===b.onLoad()&&delete m[c],b.onLoad._called=1);f&&f.call(a||window,m)}},this)};k.call(this,g)}});CKEDITOR.plugins.setLang=function(b,h,g){var f=this.get(b);b=f.langEntries||(f.langEntries={});f=f.lang||(f.lang=[]);f.split&&(f=f.split(","));-1==CKEDITOR.tools.indexOf(f,h)&&f.push(h);b[h]=g};CKEDITOR.ui=function(b){if(b.ui)return b.ui;this.items={};this.instances={};this.editor=b;this._={handlers:{}};return this}; -CKEDITOR.ui.prototype={add:function(b,h,g){g.name=b.toLowerCase();var f=this.items[b]={type:h,command:g.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(f,g)},get:function(b){return this.instances[b]},create:function(b){var h=this.items[b],g=h&&this._.handlers[h.type],f=h&&h.command&&this.editor.getCommand(h.command),g=g&&g.create.apply(this,h.args);this.instances[b]=g;f&&f.uiItems.push(g);g&&!g.type&&(g.type=h.type);return g},addHandler:function(b,h){this._.handlers[b]= +this.externals[b];return CKEDITOR.getUrl(h&&h.dir||this.basePath+b+"/")},getFilePath:function(b){var h=this.externals[b];return CKEDITOR.getUrl(this.getPath(b)+(h?h.file:this.fileName+".js"))},addExternal:function(b,h,g){g||(h=h.replace(/[^\/]+$/,function(a){g=a;return""}));g=g||this.fileName+".js";b=b.split(",");for(var e=0;e<b.length;e++)this.externals[b[e]]={dir:h,file:g}},load:function(b,h,g){CKEDITOR.tools.isArray(b)||(b=b?[b]:[]);for(var e=this.loaded,a=this.registered,m=[],l={},k={},c=0;c< +b.length;c++){var f=b[c];if(f)if(e[f]||a[f])k[f]=this.get(f);else{var d=this.getFilePath(f);m.push(d);d in l||(l[d]=[]);l[d].push(f)}}CKEDITOR.scriptLoader.load(m,function(a,c){if(c.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+l[c[0]].join(",")+'" was not found at "'+c[0]+'".');for(var d=0;d<a.length;d++)for(var f=l[a[d]],b=0;b<f.length;b++){var q=f[b];k[q]=this.get(q);e[q]=1}h.call(g,k)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin");CKEDITOR.plugins.load= +CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var h={};return function(g,e,a){var m={},l=function(g){b.call(this,g,function(c){CKEDITOR.tools.extend(m,c);var f=[],d;for(d in c){var b=c[d],g=b&&b.requires;if(!h[d]){if(b.icons)for(var k=b.icons.split(","),p=k.length;p--;)CKEDITOR.skin.addIcon(k[p],b.path+"icons/"+(CKEDITOR.env.hidpi&&b.hidpi?"hidpi/":"")+k[p]+".png");b.isSupportedEnvironment=b.isSupportedEnvironment||function(){return!0};h[d]=1}if(g)for(g.split&&(g=g.split(",")),b=0;b<g.length;b++)m[g[b]]|| +f.push(g[b])}if(f.length)l.call(this,f);else{for(d in m)b=m[d],b.onLoad&&!b.onLoad._called&&(!1===b.onLoad()&&delete m[d],b.onLoad._called=1);e&&e.call(a||window,m)}},this)};l.call(this,g)}});CKEDITOR.plugins.setLang=function(b,h,g){var e=this.get(b);b=e.langEntries||(e.langEntries={});e=e.lang||(e.lang=[]);e.split&&(e=e.split(","));-1==CKEDITOR.tools.indexOf(e,h)&&e.push(h);b[h]=g};CKEDITOR.ui=function(b){if(b.ui)return b.ui;this.items={};this.instances={};this.editor=b;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(b,h,g){g.name=b.toLowerCase();var e=this.items[b]={type:h,command:g.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(e,g)},get:function(b){return this.instances[b]},create:function(b){var h=this.items[b],g=h&&this._.handlers[h.type],e=h&&h.command&&this.editor.getCommand(h.command),g=g&&g.create.apply(this,h.args);this.instances[b]=g;e&&e.uiItems.push(g);g&&!g.type&&(g.type=h.type);return g},addHandler:function(b,h){this._.handlers[b]= h},space:function(b){return CKEDITOR.document.getById(this.spaceId(b))},spaceId:function(b){return this.editor.id+"_"+b}};CKEDITOR.event.implementOn(CKEDITOR.ui);(function(){function b(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(void 0!==c){if(!(c instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");if(!d)throw Error("One of the element modes must be specified.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks."); if(!g(c,d))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||h();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);this.focusManager= -new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",f);this.on("selectionChange",function(a){m(this,a.data.path)});this.on("activeFilterChange",function(){m(this,this.elementPath(),!0)});this.on("mode",f);CKEDITOR.dom.selection.setupEditorOptimization(this);this.on("instanceReady",function(){if(this.config.startupFocus){if("end"===this.config.startupFocus){var a=this.createRange();a.selectNodeContents(this.editable());a.shrink(CKEDITOR.SHRINK_ELEMENT, -!0);a.collapse();this.getSelection().selectRanges([a])}this.focus()}});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){this.isDestroyed()||this.isDetached()||l(this,a)},0,this)}function h(){do var a="editor"+ ++r;while(CKEDITOR.instances[a]);return a}function g(a,c){return c==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):c==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function f(){var c=this.commands, -d;for(d in c)a(this,c[d])}function a(a,c){c[c.startDisabled?"disable":a.readOnly&&!c.readOnly?"disable":c.modes[a.mode]?"enable":"disable"]()}function m(a,c,d){if(c){var e,f,b=a.commands;for(f in b)e=b[f],(d||e.contextSensitive)&&e.refresh(a,c)}}function k(a){var c=a.config.customConfig;if(!c)return!1;var c=CKEDITOR.getUrl(c),d=p[c]||(p[c]={});d.fn?(d.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=c&&k(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(c,function(){d.fn= -CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};k(a)});return!0}function l(a,c){a.on("customConfigLoaded",function(){if(c){if(c.on)for(var e in c.on)a.on(e,c.on[e]);CKEDITOR.tools.extend(a.config,c,!0);delete a.config.on}e=a.config;a.readOnly=e.readOnly?!0:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute("disabled")|| -a.element.hasAttribute("readonly"):!1;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):!1;a.tabIndex=e.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:e.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:e.shiftEnterMode;e.skin&&(CKEDITOR.skinName=e.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a); -a.filter=a.activeFilter=new CKEDITOR.filter(a);d(a)});c&&null!=c.customConfig&&(a.config.customConfig=c.customConfig);k(a)||a.fireOnce("customConfigLoaded")}function d(a){CKEDITOR.skin.loadPart("editor",function(){e(a)})}function e(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(d,e){var f=a.config.title;a.langCode=d;a.lang=CKEDITOR.tools.prototypedCopy(e);a.title="string"==typeof f||!1===f?f:[a.lang.editor,a.name].join(", ");a.config.contentsLangDirection||(a.config.contentsLangDirection= -a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire("langLoaded");c(a)})}function c(a){a.getStylesSet(function(c){a.once("loaded",function(){a.fire("stylesSet",{styles:c})},null,null,1);n(a)})}function n(a){function c(a){if(!a)return"";CKEDITOR.tools.isArray(a)&&(a=a.join(","));return a.replace(/\s/g,"")}var d=a.config,e=c(d.plugins),f=c(d.extraPlugins),b=c(d.removePlugins);if(f)var g=new RegExp("(?:^|,)(?:"+f.replace(/,/g,"|")+")(?\x3d,|$)","g"),e=e.replace(g, -""),e=e+(","+f);if(b)var h=new RegExp("(?:^|,)(?:"+b.replace(/,/g,"|")+")(?\x3d,|$)","g"),e=e.replace(h,"");CKEDITOR.env.air&&(e+=",adobeair");CKEDITOR.plugins.load(e.split(","),function(c){var e=[],f=[],b=[];a.plugins=CKEDITOR.tools.extend({},a.plugins,c);for(var g in c){var k=c[g],l=k.lang,n=null,m=k.requires,x;CKEDITOR.tools.isArray(m)&&(m=m.join(","));if(m&&(x=m.match(h)))for(;m=x.pop();)CKEDITOR.error("editor-plugin-required",{plugin:m.replace(",",""),requiredBy:g});l&&!a.lang[g]&&(l.split&& -(l=l.split(",")),0<=CKEDITOR.tools.indexOf(l,a.langCode)?n=a.langCode:(n=a.langCode.replace(/-.*/,""),n=n!=a.langCode&&0<=CKEDITOR.tools.indexOf(l,n)?n:0<=CKEDITOR.tools.indexOf(l,"en")?"en":l[0]),k.langEntries&&k.langEntries[n]?(a.lang[g]=k.langEntries[n],n=null):b.push(CKEDITOR.getUrl(k.path+"lang/"+n+".js")));f.push(n);e.push(k)}CKEDITOR.scriptLoader.load(b,function(){if(!a.isDestroyed()&&!a.isDetached()){for(var c=["beforeInit","init","afterInit"],b=0;b<c.length;b++)for(var g=0;g<e.length;g++){var h= -e[g];0===b&&f[g]&&h.lang&&h.langEntries&&(a.lang[h.name]=h.langEntries[f[g]]);if(h[c[b]])h[c[b]](a)}a.fireOnce("pluginsLoaded");d.keystrokes&&a.setKeystroke(a.config.keystrokes);for(g=0;g<a.config.blockedKeystrokes.length;g++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[g]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)}})})}function w(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var c=this.getData();this.config.htmlEncodeOutput&& -(c=CKEDITOR.tools.htmlEncode(c));a.is("textarea")?a.setValue(c):a.setHtml(c);return!0}return!1}function z(a,c){function d(a){var c=a.startContainer,e=a.endContainer;return c.is&&(c.is("tr")||c.is("td")&&c.equals(e)&&a.endOffset===c.getChildCount())?!0:!1}function e(a){var c=a.startContainer;return c.is("tr")?a.cloneContents():c.clone(!0)}for(var f=new CKEDITOR.dom.documentFragment,b,g,h,k=0;k<a.length;k++){var l=a[k],n=l.startContainer.getAscendant("tr",!0);d(l)?(b||(b=n.getAscendant("table").clone(), -b.append(n.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),f.append(b),b=b.findOne("thead, tbody, tfoot")),g&&g.equals(n)||(g=n,h=n.clone(),b.append(h)),h.append(e(l))):f.append(l.cloneContents())}return b?f:c.getHtmlFromRange(a[0])}b.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=b;var r=0,p={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{plugins:{detectConflict:function(a,c){for(var d=0;d<c.length;d++){var e=c[d];if(this[e])return CKEDITOR.warn("editor-plugin-conflict",{plugin:a,replacedWith:e}), -!0}return!1}},addCommand:function(c,d){d.name=c.toLowerCase();var e=d instanceof CKEDITOR.command?d:new CKEDITOR.command(this,d);this.mode&&a(this,e);return this.commands[c]=e},_attachToForm:function(){function a(c){d.updateElement();d._.required&&!e.getValue()&&!1===d.fire("required")&&c.data.preventDefault()}function c(a){return!!(a&&a.call&&a.apply)}var d=this,e=d.element,f=new CKEDITOR.dom.element(e.$.form);e.is("textarea")&&f&&(f.on("submit",a),c(f.$.submit)&&(f.$.submit=CKEDITOR.tools.override(f.$.submit, -function(c){return function(){a();c.apply?c.apply(this):c()}})),d.on("destroy",function(){f.removeListener("submit",a)}))},destroy:function(a){var c=CKEDITOR.filter.instances,d=this;this.fire("beforeDestroy");!a&&w.call(this);this.editable(null);this.filter&&delete this.filter;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(c),function(a){a=c[a];d===a.editor&&a.destroy()});delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this); -CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,c){var d=this.getCommand(a),e={name:a,commandData:c||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&!1!==this.fire("beforeCommandExec",e)&&(e.returnValue=d.exec(e.commandData), -!d.async&&!1!==this.fire("afterCommandExec",e))?e.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var c=this._.data;"string"!=typeof c&&(c=(c=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?c.is("textarea")?c.getValue():c.getHtml():"");c={dataValue:c};!a&&this.fire("getData",c);return c.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");"string"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE? -a.is("textarea")?a.getValue():a.getHtml():"");return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,c,d){var e=!0,f=c;c&&"object"==typeof c&&(d=c.internal,f=c.callback,e=!c.noSnapshot);!d&&e&&this.fire("saveSnapshot");if(f||!d)this.once("dataReady",function(a){!d&&e&&this.fire("saveSnapshot");f&&f.call(a.editor)});a={dataValue:a};!d&&this.fire("setData",a);this._.data=a.dataValue;!d&&this.fire("afterSetData",a)},setReadOnly:function(a){a=null==a||a;this.readOnly!=a&&(this.readOnly= -a,this.keystrokeHandler.blockedKeystrokes[8]=+a,this.editable().setReadOnly(a),this.fire("readOnly"))},insertHtml:function(a,c,d){this.fire("insertHtml",{dataValue:a,mode:c,range:d})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var c=this.editable(),d=this.getSelection(),d=d&&d.getRanges();if(!c||!d||0===d.length)return null;c=z(d,c);return a?c.getHtml():c},extractSelectedHtml:function(a,c){var d=this.editable(), -e=this.getSelection().getRanges(),f=new CKEDITOR.dom.documentFragment,b;if(!d||0===e.length)return null;for(b=0;b<e.length;b++)f.append(d.extractHtmlFromRange(e[b],c));c||this.getSelection().selectRanges([e[0]]);return a?f.getHtml():f},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==this.status&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return w.call(this)},setKeystroke:function(){for(var a= -this.keystrokeHandler.keystrokes,c=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,e,f=c.length;f--;)d=c[f],e=0,CKEDITOR.tools.isArray(d)&&(e=d[1],d=d[0]),e?a[d]=e:delete a[d]},getCommandKeystroke:function(a,c){var d="string"===typeof a?this.getCommand(a):a,e=[];if(d){var f=CKEDITOR.tools.object.findKey(this.commands,d),b=this.keystrokeHandler.keystrokes;if(d.fakeKeystroke)e.push(d.fakeKeystroke);else for(var g in b)b[g]===f&&e.push(g)}return c?e:e[0]||null},addFeature:function(a){return this.filter.addFeature(a)}, +new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",e);this.on("selectionChange",function(a){m(this,a.data.path)});this.on("activeFilterChange",function(){m(this,this.elementPath(),!0)});this.on("mode",e);CKEDITOR.dom.selection.setupEditorOptimization(this);this.on("instanceReady",function(){if(this.config.startupFocus){if("end"===this.config.startupFocus){var a=this.createRange();a.selectNodeContents(this.editable());a.shrink(CKEDITOR.SHRINK_ELEMENT, +!0);a.collapse();this.getSelection().selectRanges([a])}this.focus()}});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){this.isDestroyed()||this.isDetached()||k(this,a)},0,this)}function h(){do var a="editor"+ ++p;while(CKEDITOR.instances[a]);return a}function g(a,c){return c==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):c==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function e(){var c=this.commands, +d;for(d in c)a(this,c[d])}function a(a,c){c[c.startDisabled?"disable":a.readOnly&&!c.readOnly?"disable":c.modes[a.mode]?"enable":"disable"]()}function m(a,c,d){if(c){var f,e,b=a.commands;for(e in b)f=b[e],(d||f.contextSensitive)&&f.refresh(a,c)}}function l(a){var c=a.config.customConfig;if(!c)return!1;var c=CKEDITOR.getUrl(c),d=r[c]||(r[c]={});d.fn?(d.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=c&&l(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(c,function(){d.fn= +CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};l(a)});return!0}function k(a,d){a.on("customConfigLoaded",function(){if(d){if(d.on)for(var f in d.on)a.on(f,d.on[f]);CKEDITOR.tools.extend(a.config,d,!0);delete a.config.on}f=a.config;a.readOnly=f.readOnly?!0:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute("disabled")|| +a.element.hasAttribute("readonly"):!1;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):!1;a.tabIndex=f.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:f.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:f.shiftEnterMode;f.skin&&(CKEDITOR.skinName=f.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a); +a.filter=a.activeFilter=new CKEDITOR.filter(a);c(a)});d&&null!=d.customConfig&&(a.config.customConfig=d.customConfig);l(a)||a.fireOnce("customConfigLoaded")}function c(a){CKEDITOR.skin.loadPart("editor",function(){f(a)})}function f(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(c,f){var e=a.config.title;a.langCode=c;a.lang=CKEDITOR.tools.prototypedCopy(f);a.title="string"==typeof e||!1===e?e:[a.lang.editor,a.name].join(", ");a.config.contentsLangDirection||(a.config.contentsLangDirection= +a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire("langLoaded");d(a)})}function d(a){a.getStylesSet(function(c){a.once("loaded",function(){a.fire("stylesSet",{styles:c})},null,null,1);n(a)})}function n(a){function c(a){if(!a)return"";CKEDITOR.tools.isArray(a)&&(a=a.join(","));return a.replace(/\s/g,"")}var d=a.config,f=c(d.plugins),e=c(d.extraPlugins),b=c(d.removePlugins);if(e)var g=new RegExp("(?:^|,)(?:"+e.replace(/,/g,"|")+")(?\x3d,|$)","g"),f=f.replace(g, +""),f=f+(","+e);if(b)var h=new RegExp("(?:^|,)(?:"+b.replace(/,/g,"|")+")(?\x3d,|$)","g"),f=f.replace(h,"");CKEDITOR.env.air&&(f+=",adobeair");CKEDITOR.plugins.load(f.split(","),function(c){var f=[],e=[],b=[];a.plugins=CKEDITOR.tools.extend({},a.plugins,c);for(var g in c){var l=c[g],n=l.lang,k=null,u=l.requires,m;CKEDITOR.tools.isArray(u)&&(u=u.join(","));if(u&&(m=u.match(h)))for(;u=m.pop();)CKEDITOR.error("editor-plugin-required",{plugin:u.replace(",",""),requiredBy:g});n&&!a.lang[g]&&(n.split&& +(n=n.split(",")),0<=CKEDITOR.tools.indexOf(n,a.langCode)?k=a.langCode:(k=a.langCode.replace(/-.*/,""),k=k!=a.langCode&&0<=CKEDITOR.tools.indexOf(n,k)?k:0<=CKEDITOR.tools.indexOf(n,"en")?"en":n[0]),l.langEntries&&l.langEntries[k]?(a.lang[g]=l.langEntries[k],k=null):b.push(CKEDITOR.getUrl(l.path+"lang/"+k+".js")));e.push(k);f.push(l)}CKEDITOR.scriptLoader.load(b,function(){if(!a.isDestroyed()&&!a.isDetached()){for(var c=["beforeInit","init","afterInit"],b=0;b<c.length;b++)for(var g=0;g<f.length;g++){var h= +f[g];0===b&&e[g]&&h.lang&&h.langEntries&&(a.lang[h.name]=h.langEntries[e[g]]);if(h[c[b]])h[c[b]](a)}a.fireOnce("pluginsLoaded");d.keystrokes&&a.setKeystroke(a.config.keystrokes);for(g=0;g<a.config.blockedKeystrokes.length;g++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[g]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)}})})}function w(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var c=this.getData();this.config.htmlEncodeOutput&& +(c=CKEDITOR.tools.htmlEncode(c));a.is("textarea")?a.setValue(c):a.setHtml(c);return!0}return!1}function v(a,c){function d(a){var c=a.startContainer,f=a.endContainer;return c.is&&(c.is("tr")||c.is("td")&&c.equals(f)&&a.endOffset===c.getChildCount())?!0:!1}function f(a){var c=a.startContainer;return c.is("tr")?a.cloneContents():c.clone(!0)}for(var e=new CKEDITOR.dom.documentFragment,b,g,h,l=0;l<a.length;l++){var n=a[l],k=n.startContainer.getAscendant("tr",!0);d(n)?(b||(b=k.getAscendant("table").clone(), +b.append(k.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),e.append(b),b=b.findOne("thead, tbody, tfoot")),g&&g.equals(k)||(g=k,h=k.clone(),b.append(h)),h.append(f(n))):e.append(n.cloneContents())}return b?e:c.getHtmlFromRange(a[0])}b.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=b;var p=0,r={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{plugins:{detectConflict:function(a,c){for(var d=0;d<c.length;d++){var f=c[d];if(this[f])return CKEDITOR.warn("editor-plugin-conflict",{plugin:a,replacedWith:f}), +!0}return!1}},addCommand:function(c,d){d.name=c.toLowerCase();var f=d instanceof CKEDITOR.command?d:new CKEDITOR.command(this,d);this.mode&&a(this,f);return this.commands[c]=f},_attachToForm:function(){function a(c){d.updateElement();d._.required&&!f.getValue()&&!1===d.fire("required")&&c.data.preventDefault()}function c(a){return!!(a&&a.call&&a.apply)}var d=this,f=d.element,e=new CKEDITOR.dom.element(f.$.form);f.is("textarea")&&e&&(e.on("submit",a),c(e.$.submit)&&(e.$.submit=CKEDITOR.tools.override(e.$.submit, +function(c){return function(){a();c.apply?c.apply(this):c()}})),d.on("destroy",function(){e.removeListener("submit",a)}))},destroy:function(a){var c=CKEDITOR.filter.instances,d=this;this.fire("beforeDestroy");!a&&w.call(this);this.editable(null);this.filter&&delete this.filter;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(c),function(a){a=c[a];d===a.editor&&a.destroy()});delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this); +CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,c){var d=this.getCommand(a),f={name:a,commandData:c||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&!1!==this.fire("beforeCommandExec",f)&&(f.returnValue=d.exec(f.commandData), +!d.async&&!1!==this.fire("afterCommandExec",f))?f.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var c=this._.data;"string"!=typeof c&&(c=(c=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?c.is("textarea")?c.getValue():c.getHtml():"");c={dataValue:c};!a&&this.fire("getData",c);return c.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");"string"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE? +a.is("textarea")?a.getValue():a.getHtml():"");return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,c,d){var f=!0,e=c;c&&"object"==typeof c&&(d=c.internal,e=c.callback,f=!c.noSnapshot);!d&&f&&this.fire("saveSnapshot");if(e||!d)this.once("dataReady",function(a){!d&&f&&this.fire("saveSnapshot");e&&e.call(a.editor)});a={dataValue:a};!d&&this.fire("setData",a);this._.data=a.dataValue;!d&&this.fire("afterSetData",a)},setReadOnly:function(a){a=null==a||a;this.readOnly!=a&&(this.readOnly= +a,this.keystrokeHandler.blockedKeystrokes[8]=+a,this.editable().setReadOnly(a),this.fire("readOnly"))},insertHtml:function(a,c,d){this.fire("insertHtml",{dataValue:a,mode:c,range:d})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var c=this.editable(),d=this.getSelection(),d=d&&d.getRanges();if(!c||!d||0===d.length)return null;c=v(d,c);return a?c.getHtml():c},extractSelectedHtml:function(a,c){var d=this.editable(), +f=this.getSelection().getRanges(),e=new CKEDITOR.dom.documentFragment,b;if(!d||0===f.length)return null;for(b=0;b<f.length;b++)e.append(d.extractHtmlFromRange(f[b],c));c||this.getSelection().selectRanges([f[0]]);return a?e.getHtml():e},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==this.status&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return w.call(this)},setKeystroke:function(){for(var a= +this.keystrokeHandler.keystrokes,c=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,f,e=c.length;e--;)d=c[e],f=0,CKEDITOR.tools.isArray(d)&&(f=d[1],d=d[0]),f?a[d]=f:delete a[d]},getCommandKeystroke:function(a,c){var d="string"===typeof a?this.getCommand(a):a,f=[];if(d){var e=CKEDITOR.tools.object.findKey(this.commands,d),b=this.keystrokeHandler.keystrokes;if(d.fakeKeystroke)f.push(d.fakeKeystroke);else for(var g in b)b[g]===e&&f.push(g)}return c?f:f[0]||null},addFeature:function(a){return this.filter.addFeature(a)}, setActiveFilter:function(a){a||(a=this.filter);this.activeFilter!==a&&(this.activeFilter=a,this.fire("activeFilterChange"),a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,!0)))},setActiveEnterMode:function(a,c){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;c=c?this.blockless?CKEDITOR.ENTER_BR:c:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=c)this.activeEnterMode= a,this.activeShiftEnterMode=c,this.fire("activeEnterModeChange")},showNotification:function(a){alert(a)},isDetached:function(){return!!this.container&&this.container.isDetached()},isDestroyed:function(){return"destroyed"===this.status}});CKEDITOR.editor._getEditorElement=function(a){if(!CKEDITOR.env.isCompatible)return null;var c=CKEDITOR.dom.element.get(a);return c?c.getEditor()?(CKEDITOR.error("editor-element-conflict",{editorName:c.getEditor().name}),null):c:(CKEDITOR.error("editor-incorrect-element", {element:a}),null)}})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}};(function(){var b=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,h={checked:1,compact:1,declare:1,defer:1,disabled:1, -ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(g){for(var f,a,m=0,k;f=this._.htmlPartsRegex.exec(g);){a=f.index;if(a>m)if(m=g.substring(m,a),k)k.push(m);else this.onText(m);m=this._.htmlPartsRegex.lastIndex;if(a=f[1])if(a=a.toLowerCase(),k&&CKEDITOR.dtd.$cdata[a]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(a); -continue}if(k)k.push(f[0]);else if(a=f[3]){if(a=a.toLowerCase(),!/="/.test(a)){var l={},d,e=f[4];f=!!f[5];if(e)for(;d=b.exec(e);){var c=d[1].toLowerCase();d=d[2]||d[3]||d[4]||"";l[c]=!d&&h[c]?c:CKEDITOR.tools.htmlDecodeAttr(d)}this.onTagOpen(a,l,f);!k&&CKEDITOR.dtd.$cdata[a]&&(k=[])}}else if(a=f[2])this.onComment(a)}if(g.length>m)this.onText(g.substring(m,g.length))}}})();CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(b){this._.output.push("\x3c", +ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(g){for(var e,a,m=0,l;e=this._.htmlPartsRegex.exec(g);){a=e.index;if(a>m)if(m=g.substring(m,a),l)l.push(m);else this.onText(m);m=this._.htmlPartsRegex.lastIndex;if(a=e[1])if(a=a.toLowerCase(),l&&CKEDITOR.dtd.$cdata[a]&&(this.onCDATA(l.join("")),l=null),!l){this.onTagClose(a); +continue}if(l)l.push(e[0]);else if(a=e[3]){if(a=a.toLowerCase(),!/="/.test(a)){var k={},c,f=e[4];e=!!e[5];if(f)for(;c=b.exec(f);){var d=c[1].toLowerCase();c=c[2]||c[3]||c[4]||"";k[d]=!c&&h[d]?d:CKEDITOR.tools.htmlDecodeAttr(c)}this.onTagOpen(a,k,e);!l&&CKEDITOR.dtd.$cdata[a]&&(l=[])}}else if(a=e[2])this.onComment(a)}if(g.length>m)this.onText(g.substring(m,g.length))}}})();CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(b){this._.output.push("\x3c", b)},openTagClose:function(b,h){h?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(b,h){"string"==typeof h&&(h=CKEDITOR.tools.htmlEncodeAttr(h));this._.output.push(" ",b,'\x3d"',h,'"')},closeTag:function(b){this._.output.push("\x3c/",b,"\x3e")},text:function(b){this._.output.push(b)},comment:function(b){this._.output.push("\x3c!--",b,"--\x3e")},write:function(b){this._.output.push(b)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(b){var h=this._.output.join(""); -b&&this.reset();return h}}});"use strict";(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var b=this.parent.children,h=CKEDITOR.tools.indexOf(b,this),g=this.previous,f=this.next;g&&(g.next=f);f&&(f.previous=g);b.splice(h,1);this.parent=null},replaceWith:function(b){var h=this.parent.children,g=CKEDITOR.tools.indexOf(h,this),f=b.previous=this.previous,a=b.next=this.next;f&&(f.next=b);a&&(a.previous=b);h[g]=b;b.parent=this.parent;this.parent=null}, -insertAfter:function(b){var h=b.parent.children,g=CKEDITOR.tools.indexOf(h,b),f=b.next;h.splice(g+1,0,this);this.next=b.next;this.previous=b;b.next=this;f&&(f.previous=this);this.parent=b.parent},insertBefore:function(b){var h=b.parent.children,g=CKEDITOR.tools.indexOf(h,b);h.splice(g,0,this);this.next=b;(this.previous=b.previous)&&(b.previous.next=this);b.previous=this;this.parent=b.parent},getAscendant:function(b){var h="function"==typeof b?b:"string"==typeof b?function(f){return f.name==b}:function(f){return f.name in +b&&this.reset();return h}}});"use strict";(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var b=this.parent.children,h=CKEDITOR.tools.indexOf(b,this),g=this.previous,e=this.next;g&&(g.next=e);e&&(e.previous=g);b.splice(h,1);this.parent=null},replaceWith:function(b){var h=this.parent.children,g=CKEDITOR.tools.indexOf(h,this),e=b.previous=this.previous,a=b.next=this.next;e&&(e.next=b);a&&(a.previous=b);h[g]=b;b.parent=this.parent;this.parent=null}, +insertAfter:function(b){var h=b.parent.children,g=CKEDITOR.tools.indexOf(h,b),e=b.next;h.splice(g+1,0,this);this.next=b.next;this.previous=b;b.next=this;e&&(e.previous=this);this.parent=b.parent},insertBefore:function(b){var h=b.parent.children,g=CKEDITOR.tools.indexOf(h,b);h.splice(g,0,this);this.next=b;(this.previous=b.previous)&&(b.previous.next=this);b.previous=this;this.parent=b.parent},getAscendant:function(b){var h="function"==typeof b?b:"string"==typeof b?function(e){return e.name==b}:function(e){return e.name in b},g=this.parent;for(;g&&g.type==CKEDITOR.NODE_ELEMENT;){if(h(g))return g;g=g.parent}return null},wrapWith:function(b){this.replaceWith(b);b.add(this);return b},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(b){return b||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(b){this.value=b;this._={isBlockLike:!1}};CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(b, h){var g=this.value;if(!(g=b.onComment(h,g,this)))return this.remove(),!1;if("string"!=typeof g)return this.replaceWith(g),!1;this.value=g;return!0},writeHtml:function(b,h){h&&this.filter(h);b.comment(this.value)}});"use strict";(function(){CKEDITOR.htmlParser.text=function(b){this.value=b;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(b,h){if(!(this.value=b.onText(h,this.value,this)))return this.remove(), !1},writeHtml:function(b,h){h&&this.filter(h);b.text(this.value)}})})();"use strict";(function(){CKEDITOR.htmlParser.cdata=function(b){this.value=b};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(b){b.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}};(function(){function b(a){return a.attributes["data-cke-survive"]? -!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var h=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),g={ol:1,ul:1},f=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),a={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(m,k,l){function d(a){var c;if(0<q.length)for(var d=0;d<q.length;d++){var f= -q[d],b=f.name,g=CKEDITOR.dtd[b],h=t.name&&CKEDITOR.dtd[t.name];h&&!h[b]||a&&g&&!g[a]&&CKEDITOR.dtd[a]?b==t.name&&(n(t,t.parent,1),d--):(c||(e(),c=1),f=f.clone(),f.parent=t,t=f,q.splice(d,1),d--)}}function e(){for(;u.length;)n(u.shift(),t)}function c(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var c=a.children.length,d=a.children[c-1],e;d&&d.type==CKEDITOR.NODE_TEXT&&((e=CKEDITOR.tools.rtrim(d.value))?d.value=e:a.children.length=c-1)}}function n(a,d,e){d=d||t||p;var f=t;void 0===a.previous&& -(w(d,a)&&(t=d,r.onTagOpen(l,{}),a.returnPoint=d=t),c(a),b(a)&&!a.children.length||d.add(a),"pre"==a.name&&(v=!1),"textarea"==a.name&&(y=!1));a.returnPoint?(t=a.returnPoint,delete a.returnPoint):t=e?d:f}function w(a,c){if((a==p||"body"==a.name)&&l&&(!a.name||CKEDITOR.dtd[a.name][l])){var d,e;return(d=c.attributes&&(e=c.attributes["data-cke-real-element-type"])?e:c.name)&&d in CKEDITOR.dtd.$inline&&!(d in CKEDITOR.dtd.head)&&!c.isOrphan||c.type==CKEDITOR.NODE_TEXT}}function z(a,c){return a in CKEDITOR.dtd.$listItem|| -a in CKEDITOR.dtd.$tableContent?a==c||"dt"==a&&"dd"==c||"dd"==a&&"dt"==c:!1}var r=new CKEDITOR.htmlParser,p=k instanceof CKEDITOR.htmlParser.element?k:"string"==typeof k?new CKEDITOR.htmlParser.element(k):new CKEDITOR.htmlParser.fragment,q=[],u=[],t=p,y="textarea"==p.name,v="pre"==p.name;r.onTagOpen=function(a,c,k,l){c=new CKEDITOR.htmlParser.element(a,c);c.isUnknown&&k&&(c.isEmpty=!0);c.isOptionalClose=l;if(b(c))q.push(c);else{if("pre"==a)v=!0;else{if("br"==a&&v){t.add(new CKEDITOR.htmlParser.text("\n")); -return}"textarea"==a&&(y=!0)}if("br"==a)u.push(c);else{for(;!(l=(k=t.name)?CKEDITOR.dtd[k]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f,c.isUnknown||t.isUnknown||l[a]);)if(t.isOptionalClose)r.onTagClose(k);else if(a in g&&k in g)k=t.children,(k=k[k.length-1])&&"li"==k.name||n(k=new CKEDITOR.htmlParser.element("li"),t),!c.returnPoint&&(c.returnPoint=t),t=k;else if(a in CKEDITOR.dtd.$listItem&&!z(a,k))r.onTagOpen("li"==a?"ul":"dl",{},0,1);else if(k in h&&!z(a,k))!c.returnPoint&&(c.returnPoint= -t),t=t.parent;else if(k in CKEDITOR.dtd.$inline&&q.unshift(t),t.parent)n(t,t.parent,1);else{c.isOrphan=1;break}d(a);e();c.parent=t;c.isEmpty?n(c):t=c}}};r.onTagClose=function(a){for(var c=q.length-1;0<=c;c--)if(a==q[c].name){q.splice(c,1);return}for(var d=[],f=[],b=t;b!=p&&b.name!=a;)b._.isBlockLike||f.unshift(b),d.push(b),b=b.returnPoint||b.parent;if(b!=p){for(c=0;c<d.length;c++){var g=d[c];n(g,g.parent)}t=b;b._.isBlockLike&&e();n(b,b.parent);b==t&&(t=t.parent);q=q.concat(f)}"body"==a&&(l=!1)};r.onText= -function(c){if(!(t._.hasInlineStarted&&!u.length||v||y)&&(c=CKEDITOR.tools.ltrim(c),0===c.length))return;var b=t.name,g=b?CKEDITOR.dtd[b]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!y&&!g["#"]&&b in h)r.onTagOpen(a[b]||""),r.onText(c);else{e();d();v||y||(c=c.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));c=new CKEDITOR.htmlParser.text(c);if(w(t,c))this.onTagOpen(l,{},0,1);t.add(c)}};r.onCDATA=function(a){t.add(new CKEDITOR.htmlParser.cdata(a))};r.onComment=function(a){e();d();t.add(new CKEDITOR.htmlParser.comment(a))}; -r.parse(m);for(e();t!=p;)n(t,t.parent,1);c(p);return p};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,f){isNaN(f)&&(f=this.children.length);var b=0<f?this.children[f-1]:null;if(b){if(a._.isBlockLike&&b.type==CKEDITOR.NODE_TEXT&&(b.value=CKEDITOR.tools.rtrim(b.value),0===b.value.length)){this.children.pop();this.add(a);return}b.next=a}a.previous=b;a.parent=this;this.children.splice(f,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT|| -a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,f){f=this.getFilterContext(f);a.onRoot(f,this);this.filterChildren(a,!1,f)},filterChildren:function(a,f,b){if(this.childrenFilteredBy!=a.id){b=this.getFilterContext(b);if(f&&!this.parent)a.onRoot(b,this);this.childrenFilteredBy=a.id;for(f=0;f<this.children.length;f++)!1===this.children[f].filter(a,b)&&f--}},writeHtml:function(a,f){f&&this.filter(f);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,f,b){var d=this.getFilterContext(); -if(b&&!this.parent&&f)f.onRoot(d,this);f&&this.filterChildren(f,!1,d);f=0;b=this.children;for(d=b.length;f<d;f++)b[f].writeHtml(a)},forEach:function(a,f,b){if(!(b||f&&this.type!=f))var d=a(this);if(!1!==d){b=this.children;for(var e=0;e<b.length;e++)d=b[e],d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,f):f&&d.type!=f||a(d)}},getFilterContext:function(a){return a||{}}}})();"use strict";(function(){function b(){this.rules=[]}function h(g,f,a,h){var k,l;for(k in f)(l=g[k])||(l=g[k]=new b),l.add(f[k],a,h)} -CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(g){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new b;this.attributeNameRules=new b;this.elementsRules={};this.attributesRules={};this.textRules=new b;this.commentRules=new b;this.rootRules=new b;g&&this.addRules(g,10)},proto:{addRules:function(b,f){var a;"number"==typeof f?a=f:f&&"priority"in f&&(a=f.priority);"number"!=typeof a&&(a=10);"object"!=typeof f&&(f={});b.elementNames&&this.elementNameRules.addMany(b.elementNames, -a,f);b.attributeNames&&this.attributeNameRules.addMany(b.attributeNames,a,f);b.elements&&h(this.elementsRules,b.elements,a,f);b.attributes&&h(this.attributesRules,b.attributes,a,f);b.text&&this.textRules.add(b.text,a,f);b.comment&&this.commentRules.add(b.comment,a,f);b.root&&this.rootRules.add(b.root,a,f)},applyTo:function(b){b.filter(this)},onElementName:function(b,f){return this.elementNameRules.execOnName(b,f)},onAttributeName:function(b,f){return this.attributeNameRules.execOnName(b,f)},onText:function(b, -f,a){return this.textRules.exec(b,f,a)},onComment:function(b,f,a){return this.commentRules.exec(b,f,a)},onRoot:function(b,f){return this.rootRules.exec(b,f)},onElement:function(b,f){for(var a=[this.elementsRules["^"],this.elementsRules[f.name],this.elementsRules.$],h,k=0;3>k;k++)if(h=a[k]){h=h.exec(b,f,this);if(!1===h)return null;if(h&&h!=f)return this.onNode(b,h);if(f.parent&&!f.name)break}return f},onNode:function(b,f){var a=f.type;return a==CKEDITOR.NODE_ELEMENT?this.onElement(b,f):a==CKEDITOR.NODE_TEXT? -new CKEDITOR.htmlParser.text(this.onText(b,f.value)):a==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(b,f.value)):null},onAttribute:function(b,f,a,h){return(a=this.attributesRules[a])?a.exec(b,h,f,this):h}}});CKEDITOR.htmlParser.filterRulesGroup=b;b.prototype={add:function(b,f,a){this.rules.splice(this.findIndex(f),0,{value:b,priority:f,options:a})},addMany:function(b,f,a){for(var h=[this.findIndex(f),0],k=0,l=b.length;k<l;k++)h.push({value:b[k],priority:f,options:a});this.rules.splice.apply(this.rules, -h)},findIndex:function(b){for(var f=this.rules,a=f.length-1;0<=a&&b<f[a].priority;)a--;return a+1},exec:function(b,f){var a=f instanceof CKEDITOR.htmlParser.node||f instanceof CKEDITOR.htmlParser.fragment,h=Array.prototype.slice.call(arguments,1),k=this.rules,l=k.length,d,e,c,n;for(n=0;n<l;n++)if(a&&(d=f.type,e=f.name),c=k[n],!(b.nonEditable&&!c.options.applyToAll||b.nestedEditable&&c.options.excludeNestedEditable)){c=c.value.apply(null,h);if(!1===c||a&&c&&(c.name!=e||c.type!=d))return c;null!=c&& -(h[0]=f=c)}return f},execOnName:function(b,f){for(var a=0,h=this.rules,k=h.length,l;f&&a<k;a++)l=h[a],b.nonEditable&&!l.options.applyToAll||b.nestedEditable&&l.options.excludeNestedEditable||(f=f.replace(l.value[0],l.value[1]));return f}}})();(function(){function b(c,d){function e(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function b(a,c){return function(d){if(d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var b= -[],k=g(d),n,E;if(k)for(h(k,1)&&b.push(k);k;)m(k)&&(n=f(k))&&h(n)&&((E=f(n))&&!m(E)?b.push(n):(e(l).insertAfter(n),n.remove())),k=k.previous;for(k=0;k<b.length;k++)b[k].remove();if(b=!a||!1!==("function"==typeof c?c(d):c))l||CKEDITOR.env.needsBrFiller||d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?l||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||d.name in CKEDITOR.dtd.tr||d.name in CKEDITOR.dtd.$listItem)?(b=g(d),b=!b||"form"==d.name&&"input"==b.name):b=!1:b=!1;b&&d.add(e(a))}}}function h(a,c){if((!l|| -CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var d;return a.type==CKEDITOR.NODE_TEXT&&(d=a.value.match(t))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&l&&(!c||a.parent.name in E)||!l&&((d=a.previous)&&"br"==d.name||!d||m(d)))?!0:!1}var n={elements:{}},l="html"==d,E=CKEDITOR.tools.extend({},B),x;for(x in E)"#"in v[x]||delete E[x];for(x in E)n.elements[x]= -b(l,c.config.fillEmptyBlocks);n.root=b(l,!1);n.elements.br=function(c){return function(d){if(d.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var b=d.attributes;if("data-cke-bogus"in b||"data-cke-eol"in b)delete b["data-cke-bogus"];else{for(b=d.next;b&&a(b);)b=b.next;var g=f(d);!b&&m(d.parent)?k(d.parent,e(c)):m(b)&&g&&!m(g)&&e(c).insertBefore(b)}}}}(l);return n}function h(a,c){return a!=CKEDITOR.ENTER_BR&&!1!==c?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function g(c){for(c=c.children[c.children.length-1];c&& -a(c);)c=c.previous;return c}function f(c){for(c=c.previous;c&&a(c);)c=c.previous;return c}function a(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function m(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in B||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function k(a,c){var d=a.children[a.children.length-1];a.children.push(c);c.parent=a;d&&(d.next=c,c.previous=d)}function l(a){a=a.attributes;"false"!=a.contenteditable&& -(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function d(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function e(a){return a.replace(I,function(a,c,d){return"\x3c"+c+d.replace(J,function(a,c){return F.test(c)&&-1==d.indexOf("data-cke-saved-"+c)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function c(a,c){return a.replace(c,function(a,c,d){0===a.indexOf("\x3ctextarea")&& -(a=c+p(d).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function n(a){return a.replace(E,function(a,c){return decodeURIComponent(c)})}function w(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,function(a){return"\x3c!--"+y+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function z(a){return CKEDITOR.tools.array.reduce(a.split(""),function(a,c){var d=c.toLowerCase(),e=c.toUpperCase(), -b=r(d);d!==e&&(b+="|"+r(e));return a+("("+b+")")},"")}function r(a){var c;c=a.charCodeAt(0);var d=c.toString(16);c={htmlCode:"\x26#"+c+";?",hex:"\x26#x0*"+d+";?",entity:{"\x3c":"\x26lt;","\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var e in c)c[e]&&(a+="|"+c[e]);return a}function p(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)})}function q(a,c){var d=c._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a, -c){return decodeURIComponent(c)}).replace(/\{cke_protected_(\d+)\}/g,function(a,c){return d&&d[c]||""})}function u(a,c){var d=[],e=c.config.protectedSource,b=c._.dataStore||(c._.dataStore={id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,e=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(e);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(d.push(a)-1)+"--\x3e"});for(var g=0;g<e.length;g++)a=a.replace(e[g],function(a){a= -a.replace(f,function(a,c,e){return d[e]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(d.push(a)-1)+"--\x3e"});a=a.replace(f,function(a,c,e){return"\x3c!--"+y+(c?"{C}":"")+encodeURIComponent(d[e]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,c){b[b.id]=decodeURIComponent(c);return"{cke_protected_"+b.id++ +"}"})});return a= -a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,e,b){return"\x3c"+d+e+"\x3e"+q(p(b),c)+"\x3c/"+d+"\x3e"})}CKEDITOR.htmlDataProcessor=function(a){var d,f,g=this;this.editor=a;this.dataFilter=d=new CKEDITOR.htmlParser.filter;this.htmlFilter=f=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;d.addRules(D);d.addRules(A,{applyToAll:!0});d.addRules(b(a,"data"),{applyToAll:!0});f.addRules(G);f.addRules(C,{applyToAll:!0});f.addRules(b(a,"html"),{applyToAll:!0}); -a.on("toHtml",function(d){d=d.data;var b=d.dataValue,f,b=b.replace(Q,""),b=u(b,a),b=c(b,H),b=e(b),b=c(b,M),b=b.replace(O,"$1cke:$2"),b=b.replace(K,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),b=b.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),b=b.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");f=d.context||a.editable().getName();var g;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==f&&(f="div",b="\x3cpre\x3e"+b+"\x3c/pre\x3e",g=1);f=a.document.createElement(f);f.setHtml("a"+b);b=f.getHtml().substr(1); -b=b.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");g&&(b=b.replace(/^<pre>|<\/pre>$/gi,""));b=b.replace(P,"$1$2");b=n(b);b=p(b);f=!1===d.fixForBody?!1:h(d.enterMode,a.config.autoParagraph);b=CKEDITOR.htmlParser.fragment.fromHtml(b,d.context,f);f&&(g=b,!g.children.length&&CKEDITOR.dtd[g.name][f]&&(f=new CKEDITOR.htmlParser.element(f),g.add(f)));d.dataValue=b},null,null,5);a.on("toHtml",function(c){c.data.filter.applyTo(c.data.dataValue,!0,c.data.dontFilter,c.data.enterMode)&&a.fire("dataFiltered")}, -null,null,6);a.on("toHtml",function(a){a.data.dataValue.filterChildren(g.dataFilter,!0)},null,null,10);a.on("toHtml",function(a){a=a.data;var c=a.dataValue,d=new CKEDITOR.htmlParser.basicWriter;c.writeChildrenHtml(d);c=d.getHtml(!0);a.dataValue=w(c)},null,null,15);a.on("toDataFormat",function(c){var d=c.data.dataValue;c.data.enterMode!=CKEDITOR.ENTER_BR&&(d=d.replace(/^<br *\/?>/i,""));c.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(d,c.data.context,h(c.data.enterMode,a.config.autoParagraph))}, -null,null,5);a.on("toDataFormat",function(a){a.data.dataValue.filterChildren(g.htmlFilter,!0)},null,null,10);a.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,!1,!0)},null,null,11);a.on("toDataFormat",function(c){var d=c.data.dataValue,e=g.writer;e.reset();d.writeChildrenHtml(e);d=e.getHtml(!0);d=p(d);d=q(d,a);c.data.dataValue=d},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,c,d,e){var b=this.editor,f,g,h,k;c&&"object"==typeof c?(f=c.context,d=c.fixForBody, -e=c.dontFilter,g=c.filter,h=c.enterMode,k=c.protectedWhitespaces):f=c;f||null===f||(f=b.editable().getName());return b.fire("toHtml",{dataValue:a,context:f,fixForBody:d,dontFilter:e,filter:g||b.filter,enterMode:h||b.enterMode,protectedWhitespaces:k}).dataValue},toDataFormat:function(a,c){var d,e,b;c&&(d=c.context,e=c.filter,b=c.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:e||this.editor.filter,context:d,enterMode:b||this.editor.enterMode}).dataValue}}; -var t=/(?: |\xa0)$/,y="{cke_protected}",v=CKEDITOR.dtd,x="caption colgroup col thead tfoot tbody".split(" "),B=CKEDITOR.tools.extend({},v.$blockLimit,v.$block),D={elements:{input:l,textarea:l}},A={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var c=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===c.indexOf("javascript")||0===c.indexOf("data"))a.attributes["data-cke-pa-src"]= -a.attributes.src,delete a.attributes.src}}}},G={elements:{embed:function(a){var c=a.parent;if(c&&"object"==c.name){var d=c.attributes.width,c=c.attributes.height;d&&(a.attributes.width=d);c&&(a.attributes.height=c)}},a:function(a){var c=a.attributes;if(!(a.children.length||c.name||c.id||a.attributes["data-cke-saved-name"]))return!1}}},C={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var c= -a.attributes;if(c){if(c["data-cke-temp"])return!1;for(var d=["name","href","src"],e,b=0;b<d.length;b++)e="data-cke-saved-"+d[b],e in c&&delete c[d[b]]}return a},table:function(a){a.children.slice(0).sort(function(a,c){var d,e;a.type==CKEDITOR.NODE_ELEMENT&&c.type==a.type&&(d=CKEDITOR.tools.indexOf(x,a.name),e=CKEDITOR.tools.indexOf(x,c.name));-1<d&&-1<e&&d!=e||(d=a.parent?a.getIndex():-1,e=c.parent?c.getIndex():-1);return d>e?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"== -a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var c=a.children[0];c&&c.value&&(c.value=CKEDITOR.tools.trim(c.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var c=a.children[0];!c&&k(a,c=new CKEDITOR.htmlParser.text);c.value=a.attributes["data-cke-title"]||""},input:d,textarea:d},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, -""))||!1}}};CKEDITOR.env.ie&&(C.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var I=/<(a|area|img|input|source)\b([^>]*)>/gi,J=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,M=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,H=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,E=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,Q=new RegExp("("+z("\x3ccke:encoded\x3e")+"(.*?)"+z("\x3c/cke:encoded\x3e")+ -")|("+z("\x3c")+z("/")+"?"+z("cke:encoded\x3e")+")","gi"),O=/(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi,P=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,K=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict";CKEDITOR.htmlParser.element=function(b,h){this.name=b;this.attributes=h||{};this.children=[];var g=b||"",f=g.match(/^cke:(.*)/);f&&(g=f[1]);g=!!(CKEDITOR.dtd.$nonBodyContent[g]||CKEDITOR.dtd.$block[g]||CKEDITOR.dtd.$listItem[g]||CKEDITOR.dtd.$tableContent[g]|| -CKEDITOR.dtd.$nonEditable[g]||"br"==g);this.isEmpty=!!CKEDITOR.dtd.$empty[b];this.isUnknown=!CKEDITOR.dtd[b];this._={isBlockLike:g,hasInlineStarted:this.isEmpty||!g}};CKEDITOR.htmlParser.cssStyle=function(b){var h={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,f,a){"font-family"==f&&(a=a.replace(/["']/g,""));h[f.toLowerCase()]=a});return{rules:h,populate:function(b){var f=this.toString();f&& -(b instanceof CKEDITOR.dom.element?b.setAttribute("style",f):b instanceof CKEDITOR.htmlParser.element?b.attributes.style=f:b.style=f)},toString:function(){var b=[],f;for(f in h)h[f]&&b.push(f,":",h[f],";");return b.join("")}}};(function(){function b(b){return function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof b?a.name==b:a.name in b)}}var h=function(b,a){b=b[0];a=a[0];return b<a?-1:b>a?1:0},g=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, -{type:CKEDITOR.NODE_ELEMENT,add:g.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(b,a){var g=this,h,l;a=g.getFilterContext(a);if(!g.parent)b.onRoot(a,g);for(;;){h=g.name;if(!(l=b.onElementName(a,h)))return this.remove(),!1;g.name=l;if(!(g=b.onElement(a,g)))return this.remove(),!1;if(g!==this)return this.replaceWith(g),!1;if(g.name==h)break;if(g.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(g),!1;if(!g.name)return this.replaceWithChildren(), -!1}h=g.attributes;var d,e;for(d in h){for(l=h[d];;)if(e=b.onAttributeName(a,d))if(e!=d)delete h[d],d=e;else break;else{delete h[d];break}e&&(!1===(l=b.onAttribute(a,g,e,l))?delete h[e]:h[e]=l)}g.isEmpty||this.filterChildren(b,!1,a);return!0},filterChildren:g.filterChildren,writeHtml:function(b,a){a&&this.filter(a);var g=this.name,k=[],l=this.attributes,d,e;b.openTag(g,l);for(d in l)k.push([d,l[d]]);b.sortAttributes&&k.sort(h);d=0;for(e=k.length;d<e;d++)l=k[d],b.attribute(l[0],l[1]);b.openTagClose(g, -this.isEmpty);this.writeChildrenHtml(b);this.isEmpty||b.closeTag(g)},writeChildrenHtml:g.writeChildrenHtml,replaceWithChildren:function(){for(var b=this.children,a=b.length;a;)b[--a].insertAfter(this);this.remove()},forEach:g.forEach,getFirst:function(f){if(!f)return this.children.length?this.children[0]:null;"function"!=typeof f&&(f=b(f));for(var a=0,g=this.children.length;a<g;++a)if(f(this.children[a]))return this.children[a];return null},getHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter; -this.writeChildrenHtml(b);return b.getHtml()},setHtml:function(b){b=this.children=CKEDITOR.htmlParser.fragment.fromHtml(b).children;for(var a=0,g=b.length;a<g;++a)b[a].parent=this},getOuterHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(b);return b.getHtml()},split:function(b){for(var a=this.children.splice(b,this.children.length-b),g=this.clone(),h=0;h<a.length;++h)a[h].parent=g;g.children=a;a[0]&&(a[0].previous=null);0<b&&(this.children[b-1].next=null);this.parent.add(g, -this.getIndex()+1);return g},find:function(b,a){void 0===a&&(a=!1);var g=[],h;for(h=0;h<this.children.length;h++){var l=this.children[h];"function"==typeof b&&b(l)?g.push(l):"string"==typeof b&&l.name===b&&g.push(l);a&&l.find&&(g=g.concat(l.find(b,a)))}return g},findOne:function(b,a){var g=null,h=CKEDITOR.tools.array.find(this.children,function(h){var d="function"===typeof b?b(h):h.name===b;if(d||!a)return d;h.children&&h.findOne&&(g=h.findOne(b,!0));return!!g});return g||h||null},addClass:function(b){if(!this.hasClass(b)){var a= -this.attributes["class"]||"";this.attributes["class"]=a+(a?" ":"")+b}},removeClass:function(b){var a=this.attributes["class"];a&&((a=CKEDITOR.tools.trim(a.replace(new RegExp("(?:\\s+|^)"+b+"(?:\\s+|$)")," ")))?this.attributes["class"]=a:delete this.attributes["class"])},hasClass:function(b){var a=this.attributes["class"];return a?(new RegExp("(?:^|\\s)"+b+"(?\x3d\\s|$)")).test(a):!1},getFilterContext:function(b){var a=[];b||(b={nonEditable:!1,nestedEditable:!1});b.nonEditable||"false"!=this.attributes.contenteditable? -b.nonEditable&&!b.nestedEditable&&"true"==this.attributes.contenteditable&&a.push("nestedEditable",!0):a.push("nonEditable",!0);if(a.length){b=CKEDITOR.tools.copy(b);for(var g=0;g<a.length;g+=2)b[a[g]]=a[g+1]}return b}},!0)})();(function(){var b=/{([^}]+)}/g;CKEDITOR.template=function(b){this.source="function"===typeof b?b:String(b)};CKEDITOR.template.prototype.output=function(h,g){var f=("function"===typeof this.source?this.source(h):this.source).replace(b,function(a,b){return void 0!==h[b]?h[b]: -a});return g?g.push(f):f}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);CKEDITOR.add=function(b){function h(){CKEDITOR.currentInstance==b&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))}CKEDITOR.instances[b.name]=b;b.on("focus",function(){CKEDITOR.currentInstance!=b&&(CKEDITOR.currentInstance=b,CKEDITOR.fire("currentInstance"))});b.on("blur",h);b.on("destroy",h);CKEDITOR.fire("instance",null,b)};CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name]}; -(function(){var b={};CKEDITOR.addTemplate=function(h,g){var f=b[h];if(f)return f;f={name:h,source:g};CKEDITOR.fire("template",f);return b[h]=new CKEDITOR.template(f.source)};CKEDITOR.getTemplate=function(h){return b[h]}})();(function(){var b=[];CKEDITOR.addCss=function(h){b.push(h)};CKEDITOR.getCss=function(){return b.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;CKEDITOR.TRISTATE_DISABLED= -0;(function(){CKEDITOR.inline=function(b,h){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;var g=new CKEDITOR.editor(h,b,CKEDITOR.ELEMENT_MODE_INLINE),f=b.is("textarea")?b:null;f?(g.setData(f.getValue(),null,!0),b=CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"'+!!g.readOnly+'" class\x3d"cke_textarea_inline"\x3e'+f.getValue()+"\x3c/div\x3e",CKEDITOR.document),b.insertAfter(f),f.hide(),f.$.form&&g._attachToForm()):g.setData(b.getHtml(),null,!0);g.on("loaded",function(){g.fire("uiReady"); -g.editable(b);g.container=b;g.ui.contentsElement=b;g.setData(g.getData(1));g.resetDirty();g.fire("contentDom");g.mode="wysiwyg";g.fire("mode");g.status="ready";g.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,g)},null,null,1E4);g.on("destroy",function(){var a=g.container;f&&a&&(a.clearCustomData(),a.remove());f&&f.show();g.element.clearCustomData();delete g.element});return g};CKEDITOR.inlineAll=function(){var b,h,g;for(g in CKEDITOR.dtd.$editable)for(var f=CKEDITOR.document.getElementsByTag(g), -a=0,m=f.count();a<m;a++)b=f.getItem(a),"true"==b.getAttribute("contenteditable")&&(h={element:b,config:{}},!1!==CKEDITOR.fire("inline",h)&&CKEDITOR.inline(b,h.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor";(function(){function b(b,a,m,k){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;var l=new CKEDITOR.editor(a,b,k);k==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.setStyle("visibility","hidden"),l._.required=b.hasAttribute("required"), -b.removeAttribute("required"));m&&l.setData(m,null,!0);l.on("loaded",function(){l.isDestroyed()||l.isDetached()||(g(l),k==CKEDITOR.ELEMENT_MODE_REPLACE&&l.config.autoUpdateElement&&b.$.form&&l._attachToForm(),l.setMode(l.config.startupMode,function(){l.resetDirty();l.status="ready";l.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,l)}))});l.on("destroy",h);return l}function h(){var b=this.container,a=this.element;b&&(b.clearCustomData(),b.remove());a&&(a.clearCustomData(),this.elementMode== -CKEDITOR.ELEMENT_MODE_REPLACE&&(a.show(),this._.required&&a.setAttribute("required","required")),delete this.element)}function g(b){var a=b.name,g=b.element,h=b.elementMode,l=b.fire("uiSpace",{space:"top",html:""}).html,d=b.fire("uiSpace",{space:"bottom",html:""}).html,e=new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"': -"")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':"")+'\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'),a=CKEDITOR.dom.element.createFromHtml(e.output({id:b.id,name:a,langDir:b.lang.dir,langCode:b.langCode,voiceLabel:b.title,topHtml:l?'\x3cspan id\x3d"'+ -b.ui.spaceId("top")+'" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e'+l+"\x3c/span\x3e":"",contentId:b.ui.spaceId("contents"),bottomHtml:d?'\x3cspan id\x3d"'+b.ui.spaceId("bottom")+'" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e'+d+"\x3c/span\x3e":"",outerEl:CKEDITOR.env.ie?"span":"div"}));h==CKEDITOR.ELEMENT_MODE_REPLACE?(g.hide(),a.insertAfter(g)):g.append(a);b.container=a;b.ui.contentsElement=b.ui.space("contents");l&&b.ui.space("top").unselectable(); -d&&b.ui.space("bottom").unselectable();g=b.config.width;h=b.config.height;g&&a.setStyle("width",CKEDITOR.tools.cssLength(g));h&&b.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(h));a.disableContextMenu();CKEDITOR.env.webkit&&a.on("focus",function(){b.focus()});b.fireOnce("uiReady")}CKEDITOR.replace=function(f,a){return b(f,a,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(f,a,g){return b(f,a,g,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var b= -document.getElementsByTagName("textarea"),a=0;a<b.length;a++){var g=null,h=b[a];if(h.name||h.id){if("string"==typeof arguments[0]){if(!(new RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)")).test(h.className))continue}else if("function"==typeof arguments[0]&&(g={},!1===arguments[0](h,g)))continue;this.replace(h,g)}}};CKEDITOR.editor.prototype.addMode=function(b,a){(this._.modes||(this._.modes={}))[b]=a};CKEDITOR.editor.prototype.setMode=function(b,a){var g=this,h=this._.modes;if(b!=g.mode&&h&&h[b]){g.fire("beforeSetMode", -b);if(g.mode){var l=g.checkDirty(),h=g._.previousModeData,d,e=0;g.fire("beforeModeUnload");g.editable(0);g._.previousMode=g.mode;g._.previousModeData=d=g.getData(1);"source"==g.mode&&h==d&&(g.fire("lockSnapshot",{forceUpdate:!0}),e=1);g.ui.space("contents").setHtml("");g.mode=""}else g._.previousModeData=g.getData(1);this._.modes[b](function(){g.mode=b;void 0!==l&&!l&&g.resetDirty();e?g.fire("unlockSnapshot"):"wysiwyg"==b&&g.fire("saveSnapshot");setTimeout(function(){g.isDestroyed()||g.isDetached()|| -(g.fire("mode"),a&&a.call(g))},0)})}};CKEDITOR.editor.prototype.resize=function(b,a,g,h){var l=this.container,d=this.ui.space("contents"),e=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement;h=h?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):l;h.setSize("width",b,!0);e&&(e.style.width="1%");var c=(h.$.offsetHeight||0)-(d.$.clientHeight||0),l=Math.max(a-(g?0:c),0);a=g?a+c:a;d.setStyle("height",l+"px");e&&(e.style.width= -"100%");this.fire("resize",{outerHeight:a,contentsHeight:l,outerWidth:b||h.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(b){return b?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg";(function(){function b(a){var c=a.editor,d=a.data.path,b=d.blockLimit,e=a.data.selection,g=e.getRanges()[0],n;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(e= -h(e,d))e.appendBogus(),n=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.edge&&c._.previousActive;k(c,d.block,b)&&g.collapsed&&!g.getCommonAncestor().isReadOnly()&&(d=g.clone(),d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),b=new CKEDITOR.dom.walker(d),b.guard=function(a){return!f(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!b.checkForward()||d.checkStartOfBlock()&&d.checkEndOfBlock())&&(c=g.fixBlock(!0,c.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p"),CKEDITOR.env.needsBrFiller||(c=c.getFirst(f))&& -c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?: |\xa0)$/)&&c.remove(),n=1,a.cancel());n&&g.select()}function h(a,c){if(a.isFake)return 0;var d=c.block||c.blockLimit,b=d&&d.getLast(f);if(!(!d||!d.isBlockBoundary()||b&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||d.is("pre")||d.getBogus()))return d}function g(a){var c=a.data.getTarget();c.is("input")&&(c=c.getAttribute("type"),"submit"!=c&&"reset"!=c||a.data.preventDefault())}function f(a){return n(a)&&w(a)}function a(a, -c){return function(d){var b=d.data.$.toElement||d.data.$.fromElement||d.data.$.relatedTarget;(b=b&&b.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(b):null)&&(c.equals(b)||c.contains(b))||a.call(this,d)}}function m(a){function c(a){return function(c,b){b&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(e)&&(d=c);if(!(b||!f(c)||a&&r(c)))return!1}}var d,b=a.getRanges()[0];a=a.root;var e={table:1,ul:1,ol:1,dl:1};if(b.startPath().contains(e)){var g=b.clone();g.collapse(1);g.setStartAt(a,CKEDITOR.POSITION_AFTER_START); -a=new CKEDITOR.dom.walker(g);a.guard=c();a.checkBackward();if(d)return g=b.clone(),g.collapse(),g.setEndAt(d,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(g),a.guard=c(!0),d=!1,a.checkForward(),d}return null}function k(a,c,d){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(d)&&!c||c&&"true"==c.getAttribute("contenteditable"))}function l(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?a.activeEnterMode==CKEDITOR.ENTER_DIV? -"div":"p":!1}function d(a){a&&a.isEmptyInlineRemoveable()&&a.remove()}function e(a){var c=a.editor;c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot")},0)}function c(a,c,d){var b=a.getCommonAncestor(c);for(c=a=d?c:a;(a=a.getParent())&&!b.equals(a)&&1==a.getChildCount();)c=a;c.remove()}var n,w,z,r,p,q,u,t,y,v;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,c){this.base(c.$||c);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()}, -proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}CKEDITOR.env.edge&&14<CKEDITOR.env.version&&!this.hasFocus&&this.getDocument().equals(CKEDITOR.document)&&(this.editor._.previousScrollTop=this.$.scrollTop);try{if(!CKEDITOR.env.ie||CKEDITOR.env.edge&&14<CKEDITOR.env.version||!this.getDocument().equals(CKEDITOR.document))if(CKEDITOR.env.chrome){var c=this.$.scrollTop;this.$.focus(); -this.$.scrollTop=c}else this.$.focus();else this.$.setActive()}catch(d){if(!CKEDITOR.env.ie)throw d;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(c,d){var b=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(c)&&(c="focus"==c?"focusin":"focusout",d=a(d,this),b[0]=c,b[1]=d);return CKEDITOR.dom.element.prototype.on.apply(this,b)},attachListener:function(a){!this._.listeners&& +!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var h=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),g={ol:1,ul:1},e=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),a={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(m,l,k){function c(a){var c;if(0<q.length)for(var d=0;d<q.length;d++){var e= +q[d],b=e.name,g=CKEDITOR.dtd[b],h=t.name&&CKEDITOR.dtd[t.name];h&&!h[b]||a&&g&&!g[a]&&CKEDITOR.dtd[a]?b==t.name&&(n(t,t.parent,1),d--):(c||(f(),c=1),e=e.clone(),e.parent=t,t=e,q.splice(d,1),d--)}}function f(){for(;x.length;)n(x.shift(),t)}function d(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var c=a.children.length,d=a.children[c-1],f;d&&d.type==CKEDITOR.NODE_TEXT&&((f=CKEDITOR.tools.rtrim(d.value))?d.value=f:a.children.length=c-1)}}function n(a,c,f){c=c||t||r;var e=t;void 0===a.previous&& +(w(c,a)&&(t=c,p.onTagOpen(k,{}),a.returnPoint=c=t),d(a),b(a)&&!a.children.length||c.add(a),"pre"==a.name&&(y=!1),"textarea"==a.name&&(z=!1));a.returnPoint?(t=a.returnPoint,delete a.returnPoint):t=f?c:e}function w(a,c){if((a==r||"body"==a.name)&&k&&(!a.name||CKEDITOR.dtd[a.name][k])){var d,f;return(d=c.attributes&&(f=c.attributes["data-cke-real-element-type"])?f:c.name)&&d in CKEDITOR.dtd.$inline&&!(d in CKEDITOR.dtd.head)&&!c.isOrphan||c.type==CKEDITOR.NODE_TEXT}}function v(a,c){return a in CKEDITOR.dtd.$listItem|| +a in CKEDITOR.dtd.$tableContent?a==c||"dt"==a&&"dd"==c||"dd"==a&&"dt"==c:!1}var p=new CKEDITOR.htmlParser,r=l instanceof CKEDITOR.htmlParser.element?l:"string"==typeof l?new CKEDITOR.htmlParser.element(l):new CKEDITOR.htmlParser.fragment,q=[],x=[],t=r,z="textarea"==r.name,y="pre"==r.name;p.onTagOpen=function(a,d,l,k){d=new CKEDITOR.htmlParser.element(a,d);d.isUnknown&&l&&(d.isEmpty=!0);d.isOptionalClose=k;if(b(d))q.push(d);else{if("pre"==a)y=!0;else{if("br"==a&&y){t.add(new CKEDITOR.htmlParser.text("\n")); +return}"textarea"==a&&(z=!0)}if("br"==a)x.push(d);else{for(;!(k=(l=t.name)?CKEDITOR.dtd[l]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):e,d.isUnknown||t.isUnknown||k[a]);)if(t.isOptionalClose)p.onTagClose(l);else if(a in g&&l in g)l=t.children,(l=l[l.length-1])&&"li"==l.name||n(l=new CKEDITOR.htmlParser.element("li"),t),!d.returnPoint&&(d.returnPoint=t),t=l;else if(a in CKEDITOR.dtd.$listItem&&!v(a,l))p.onTagOpen("li"==a?"ul":"dl",{},0,1);else if(l in h&&!v(a,l))!d.returnPoint&&(d.returnPoint= +t),t=t.parent;else if(l in CKEDITOR.dtd.$inline&&q.unshift(t),t.parent)n(t,t.parent,1);else{d.isOrphan=1;break}c(a);f();d.parent=t;d.isEmpty?n(d):t=d}}};p.onTagClose=function(a){for(var c=q.length-1;0<=c;c--)if(a==q[c].name){q.splice(c,1);return}for(var d=[],e=[],b=t;b!=r&&b.name!=a;)b._.isBlockLike||e.unshift(b),d.push(b),b=b.returnPoint||b.parent;if(b!=r){for(c=0;c<d.length;c++){var g=d[c];n(g,g.parent)}t=b;b._.isBlockLike&&f();n(b,b.parent);b==t&&(t=t.parent);q=q.concat(e)}"body"==a&&(k=!1)};p.onText= +function(d){if(!(t._.hasInlineStarted&&!x.length||y||z)&&(d=CKEDITOR.tools.ltrim(d),0===d.length))return;var b=t.name,g=b?CKEDITOR.dtd[b]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):e;if(!z&&!g["#"]&&b in h)p.onTagOpen(a[b]||""),p.onText(d);else{f();c();y||z||(d=d.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));d=new CKEDITOR.htmlParser.text(d);if(w(t,d))this.onTagOpen(k,{},0,1);t.add(d)}};p.onCDATA=function(a){t.add(new CKEDITOR.htmlParser.cdata(a))};p.onComment=function(a){f();c();t.add(new CKEDITOR.htmlParser.comment(a))}; +p.parse(m);for(f();t!=r;)n(t,t.parent,1);d(r);return r};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,e){isNaN(e)&&(e=this.children.length);var b=0<e?this.children[e-1]:null;if(b){if(a._.isBlockLike&&b.type==CKEDITOR.NODE_TEXT&&(b.value=CKEDITOR.tools.rtrim(b.value),0===b.value.length)){this.children.pop();this.add(a);return}b.next=a}a.previous=b;a.parent=this;this.children.splice(e,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT|| +a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,e){e=this.getFilterContext(e);a.onRoot(e,this);this.filterChildren(a,!1,e)},filterChildren:function(a,e,b){if(this.childrenFilteredBy!=a.id){b=this.getFilterContext(b);if(e&&!this.parent)a.onRoot(b,this);this.childrenFilteredBy=a.id;for(e=0;e<this.children.length;e++)!1===this.children[e].filter(a,b)&&e--}},writeHtml:function(a,e){e&&this.filter(e);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,e,b){var c=this.getFilterContext(); +if(b&&!this.parent&&e)e.onRoot(c,this);e&&this.filterChildren(e,!1,c);e=0;b=this.children;for(c=b.length;e<c;e++)b[e].writeHtml(a)},forEach:function(a,e,b){if(!(b||e&&this.type!=e))var c=a(this);if(!1!==c){b=this.children;for(var f=0;f<b.length;f++)c=b[f],c.type==CKEDITOR.NODE_ELEMENT?c.forEach(a,e):e&&c.type!=e||a(c)}},getFilterContext:function(a){return a||{}}}})();"use strict";(function(){function b(){this.rules=[]}function h(g,e,a,h){var l,k;for(l in e)(k=g[l])||(k=g[l]=new b),k.add(e[l],a,h)} +CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(g){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new b;this.attributeNameRules=new b;this.elementsRules={};this.attributesRules={};this.textRules=new b;this.commentRules=new b;this.rootRules=new b;g&&this.addRules(g,10)},proto:{addRules:function(b,e){var a;"number"==typeof e?a=e:e&&"priority"in e&&(a=e.priority);"number"!=typeof a&&(a=10);"object"!=typeof e&&(e={});b.elementNames&&this.elementNameRules.addMany(b.elementNames, +a,e);b.attributeNames&&this.attributeNameRules.addMany(b.attributeNames,a,e);b.elements&&h(this.elementsRules,b.elements,a,e);b.attributes&&h(this.attributesRules,b.attributes,a,e);b.text&&this.textRules.add(b.text,a,e);b.comment&&this.commentRules.add(b.comment,a,e);b.root&&this.rootRules.add(b.root,a,e)},applyTo:function(b){b.filter(this)},onElementName:function(b,e){return this.elementNameRules.execOnName(b,e)},onAttributeName:function(b,e){return this.attributeNameRules.execOnName(b,e)},onText:function(b, +e,a){return this.textRules.exec(b,e,a)},onComment:function(b,e,a){return this.commentRules.exec(b,e,a)},onRoot:function(b,e){return this.rootRules.exec(b,e)},onElement:function(b,e){for(var a=[this.elementsRules["^"],this.elementsRules[e.name],this.elementsRules.$],h,l=0;3>l;l++)if(h=a[l]){h=h.exec(b,e,this);if(!1===h)return null;if(h&&h!=e)return this.onNode(b,h);if(e.parent&&!e.name)break}return e},onNode:function(b,e){var a=e.type;return a==CKEDITOR.NODE_ELEMENT?this.onElement(b,e):a==CKEDITOR.NODE_TEXT? +new CKEDITOR.htmlParser.text(this.onText(b,e.value,e)):a==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(b,e.value,e)):null},onAttribute:function(b,e,a,h){return(a=this.attributesRules[a])?a.exec(b,h,e,this):h}}});CKEDITOR.htmlParser.filterRulesGroup=b;b.prototype={add:function(b,e,a){this.rules.splice(this.findIndex(e),0,{value:b,priority:e,options:a})},addMany:function(b,e,a){for(var h=[this.findIndex(e),0],l=0,k=b.length;l<k;l++)h.push({value:b[l],priority:e,options:a});this.rules.splice.apply(this.rules, +h)},findIndex:function(b){for(var e=this.rules,a=e.length-1;0<=a&&b<e[a].priority;)a--;return a+1},exec:function(b,e){var a=e instanceof CKEDITOR.htmlParser.node||e instanceof CKEDITOR.htmlParser.fragment,h=Array.prototype.slice.call(arguments,1),l=this.rules,k=l.length,c,f,d,n;for(n=0;n<k;n++)if(a&&(c=e.type,f=e.name),d=l[n],!(b.nonEditable&&!d.options.applyToAll||b.nestedEditable&&d.options.excludeNestedEditable)){d=d.value.apply(null,h);if(!1===d||a&&d&&(d.name!=f||d.type!=c))return d;null!=d&& +(h[0]=e=d)}return e},execOnName:function(b,e){for(var a=0,h=this.rules,l=h.length,k;e&&a<l;a++)k=h[a],b.nonEditable&&!k.options.applyToAll||b.nestedEditable&&k.options.excludeNestedEditable||(e=e.replace(k.value[0],k.value[1]));return e}}})();(function(){function b(c,d){function f(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function b(a,c){return function(d){if(d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var b= +[],l=g(d),n,u;if(l)for(h(l,1)&&b.push(l);l;)m(l)&&(n=e(l))&&h(n)&&((u=e(n))&&!m(u)?b.push(n):(f(k).insertAfter(n),n.remove())),l=l.previous;for(l=0;l<b.length;l++)b[l].remove();if(b=!a||!1!==("function"==typeof c?c(d):c))k||CKEDITOR.env.needsBrFiller||d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?k||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||d.name in CKEDITOR.dtd.tr||d.name in CKEDITOR.dtd.$listItem)?(b=g(d),b=!b||"form"==d.name&&"input"==b.name):b=!1:b=!1;b&&d.add(f(a))}}}function h(a,c){if((!k|| +CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var d;return a.type==CKEDITOR.NODE_TEXT&&(d=a.value.match(x))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&k&&(!c||a.parent.name in D)||!k&&((d=a.previous)&&"br"==d.name||!d||m(d)))?!0:!1}var n={elements:{}},k="html"==d,D=CKEDITOR.tools.extend({},u),q;for(q in D)"#"in z[q]||delete D[q];for(q in D)n.elements[q]= +b(k,c.config.fillEmptyBlocks);n.root=b(k,!1);n.elements.br=function(c){return function(d){if(d.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var b=d.attributes;if("data-cke-bogus"in b||"data-cke-eol"in b)delete b["data-cke-bogus"];else{for(b=d.next;b&&a(b);)b=b.next;var g=e(d);!b&&m(d.parent)?l(d.parent,f(c)):m(b)&&g&&!m(g)&&f(c).insertBefore(b)}}}}(k);return n}function h(a,c){return a!=CKEDITOR.ENTER_BR&&!1!==c?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function g(c){for(c=c.children[c.children.length-1];c&& +a(c);)c=c.previous;return c}function e(c){for(c=c.previous;c&&a(c);)c=c.previous;return c}function a(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function m(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in u||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function l(a,c){var d=a.children[a.children.length-1];a.children.push(c);c.parent=a;d&&(d.next=c,c.previous=d)}function k(a){a=a.attributes;"false"!=a.contenteditable&& +(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function c(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function f(a){return a.replace(G,function(a,c,d){return"\x3c"+c+d.replace(I,function(a,c){return L.test(c)&&-1==d.indexOf("data-cke-saved-"+c)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function d(a,c){return a.replace(c,function(a,c,d){0===a.indexOf("\x3ctextarea")&& +(a=c+v(d).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function n(a){return a.replace(H,function(a,c){return decodeURIComponent(c)})}function w(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,function(a){return"\x3c!--"+t+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function v(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)})} +function p(a,c){var d=c._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)}).replace(/\{cke_protected_(\d+)\}/g,function(a,c){return d&&d[c]||""})}function r(a,c){var d=[],f=c.config.protectedSource,b=c._.dataStore||(c._.dataStore={id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,f=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(f);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+ +(d.push(a)-1)+"--\x3e"});for(var g=0;g<f.length;g++)a=a.replace(f[g],function(a){a=a.replace(e,function(a,c,f){return d[f]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(d.push(a)-1)+"--\x3e"});a=a.replace(e,function(a,c,f){return"\x3c!--"+t+(c?"{C}":"")+encodeURIComponent(d[f]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a, +c){b[b.id]=decodeURIComponent(c);return"{cke_protected_"+b.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,f,b){return"\x3c"+d+f+"\x3e"+p(v(b),c)+"\x3c/"+d+"\x3e"})}var q;CKEDITOR.htmlDataProcessor=function(a){var c,e,g=this;this.editor=a;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(B);c.addRules(C,{applyToAll:!0});c.addRules(b(a,"data"), +{applyToAll:!0});e.addRules(A);e.addRules(E,{applyToAll:!0});e.addRules(b(a,"html"),{applyToAll:!0});a.on("toHtml",function(c){c=c.data;var b=c.dataValue,e,b=q(b),b=r(b,a),b=d(b,M),b=f(b),b=d(b,F),b=b.replace(J,"$1cke:$2"),b=b.replace(K,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),b=b.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),b=b.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");e=c.context||a.editable().getName();var g;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==e&&(e="div", +b="\x3cpre\x3e"+b+"\x3c/pre\x3e",g=1);e=a.document.createElement(e);e.setHtml("a"+b);b=e.getHtml().substr(1);b=b.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");g&&(b=b.replace(/^<pre>|<\/pre>$/gi,""));b=b.replace(D,"$1$2");b=n(b);b=v(b);e=!1===c.fixForBody?!1:h(c.enterMode,a.config.autoParagraph);b=CKEDITOR.htmlParser.fragment.fromHtml(b,c.context,e);e&&(g=b,!g.children.length&&CKEDITOR.dtd[g.name][e]&&(e=new CKEDITOR.htmlParser.element(e),g.add(e)));c.dataValue=b},null,null,5);a.on("toHtml", +function(c){c.data.filter.applyTo(c.data.dataValue,!0,c.data.dontFilter,c.data.enterMode)&&a.fire("dataFiltered")},null,null,6);a.on("toHtml",function(a){a.data.dataValue.filterChildren(g.dataFilter,!0)},null,null,10);a.on("toHtml",function(a){a=a.data;var c=a.dataValue,d=new CKEDITOR.htmlParser.basicWriter;c.writeChildrenHtml(d);c=d.getHtml(!0);a.dataValue=w(c)},null,null,15);a.on("toDataFormat",function(c){var d=c.data.dataValue;c.data.enterMode!=CKEDITOR.ENTER_BR&&(d=d.replace(/^<br *\/?>/i,"")); +c.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(d,c.data.context,h(c.data.enterMode,a.config.autoParagraph))},null,null,5);a.on("toDataFormat",function(a){a.data.dataValue.filterChildren(g.htmlFilter,!0)},null,null,10);a.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,!1,!0)},null,null,11);a.on("toDataFormat",function(c){var d=c.data.dataValue,f=g.writer;f.reset();d.writeChildrenHtml(f);d=f.getHtml(!0);d=v(d);d=p(d,a);c.data.dataValue=d},null,null,15)};CKEDITOR.htmlDataProcessor.prototype= +{toHtml:function(a,c,d,f){var b=this.editor,e,g,h,l;c&&"object"==typeof c?(e=c.context,d=c.fixForBody,f=c.dontFilter,g=c.filter,h=c.enterMode,l=c.protectedWhitespaces):e=c;e||null===e||(e=b.editable().getName());return b.fire("toHtml",{dataValue:a,context:e,fixForBody:d,dontFilter:f,filter:g||b.filter,enterMode:h||b.enterMode,protectedWhitespaces:l}).dataValue},toDataFormat:function(a,c){var d,f,b;c&&(d=c.context,f=c.filter,b=c.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat", +{dataValue:a,filter:f||this.editor.filter,context:d,enterMode:b||this.editor.enterMode}).dataValue}};var x=/(?: |\xa0)$/,t="{cke_protected}",z=CKEDITOR.dtd,y="caption colgroup col thead tfoot tbody".split(" "),u=CKEDITOR.tools.extend({},z.$blockLimit,z.$block),B={elements:{input:k,textarea:k}},C={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var c=a.attributes.src.toLowerCase().replace(/[^a-z]/gi, +"");if(0===c.indexOf("javascript")||0===c.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},A={elements:{embed:function(a){var c=a.parent;if(c&&"object"==c.name){var d=c.attributes.width,c=c.attributes.height;d&&(a.attributes.width=d);c&&(a.attributes.height=c)}},a:function(a){var c=a.attributes;if(!(a.children.length||c.name||c.id||a.attributes["data-cke-saved-name"]))return!1}}},E={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/, +""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var c=a.attributes;if(c){if(c["data-cke-temp"])return!1;for(var d=["name","href","src"],f,b=0;b<d.length;b++)f="data-cke-saved-"+d[b],f in c&&delete c[d[b]]}return a},table:function(a){a.children.slice(0).sort(function(a,c){var d,f;a.type==CKEDITOR.NODE_ELEMENT&&c.type==a.type&&(d=CKEDITOR.tools.indexOf(y,a.name),f=CKEDITOR.tools.indexOf(y,c.name));-1<d&&-1<f&&d!=f||(d=a.parent?a.getIndex():-1,f=c.parent?c.getIndex():-1);return d>f? +1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var c=a.children[0];c&&c.value&&(c.value=CKEDITOR.tools.trim(c.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var c=a.children[0];!c&&l(a,c=new CKEDITOR.htmlParser.text); +c.value=a.attributes["data-cke-title"]||""},input:c,textarea:c},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(E.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var G=/<(a|area|img|input|source)\b([^>]*)>/gi,I=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,L=/^(href|src|name)$/i,F=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, +M=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,H=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,J=/(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi,D=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,K=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;q=function(){function a(d){return CKEDITOR.tools.array.reduce(d.split(""),function(a,d){var f=d.toLowerCase(),b=d.toUpperCase(),e=c(f);f!==b&&(e+="|"+c(b));return a+("("+e+")")},"")}function c(a){var d;d=a.charCodeAt(0);var f=d.toString(16); +d={htmlCode:"\x26#"+d+";?",hex:"\x26#x0*"+f+";?",entity:{"\x3c":"\x26lt;","\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var b in d)d[b]&&(a+="|"+d[b]);return a}var d=new RegExp("("+a("\x3ccke:encoded\x3e")+"(.*?)"+a("\x3c/cke:encoded\x3e")+")|("+a("\x3c")+a("/")+"?"+a("cke:encoded\x3e")+")","gi"),f=new RegExp("(("+a("{cke_protected")+")(_[0-9]*)?"+a("}")+")","gi");return function(a){return a.replace(d,"").replace(f,"")}}()})();"use strict";CKEDITOR.htmlParser.element=function(b,h){this.name=b;this.attributes= +h||{};this.children=[];var g=b||"",e=g.match(/^cke:(.*)/);e&&(g=e[1]);g=!!(CKEDITOR.dtd.$nonBodyContent[g]||CKEDITOR.dtd.$block[g]||CKEDITOR.dtd.$listItem[g]||CKEDITOR.dtd.$tableContent[g]||CKEDITOR.dtd.$nonEditable[g]||"br"==g);this.isEmpty=!!CKEDITOR.dtd.$empty[b];this.isUnknown=!CKEDITOR.dtd[b];this._={isBlockLike:g,hasInlineStarted:this.isEmpty||!g}};CKEDITOR.htmlParser.cssStyle=function(b){var h={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, +function(b,e,a){"font-family"==e&&(a=a.replace(/["']/g,""));h[e.toLowerCase()]=a});return{rules:h,populate:function(b){var e=this.toString();e&&(b instanceof CKEDITOR.dom.element?b.setAttribute("style",e):b instanceof CKEDITOR.htmlParser.element?b.attributes.style=e:b.style=e)},toString:function(){var b=[],e;for(e in h)h[e]&&b.push(e,":",h[e],";");return b.join("")}}};(function(){function b(b){return function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof b?a.name==b:a.name in b)}}var h= +function(b,a){b=b[0];a=a[0];return b<a?-1:b>a?1:0},g=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:g.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(b,a){var g=this,h,k;a=g.getFilterContext(a);if(!g.parent)b.onRoot(a,g);for(;;){h=g.name;if(!(k=b.onElementName(a,h)))return this.remove(),!1;g.name=k;if(!(g=b.onElement(a,g)))return this.remove(), +!1;if(g!==this)return this.replaceWith(g),!1;if(g.name==h)break;if(g.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(g),!1;if(!g.name)return this.replaceWithChildren(),!1}h=g.attributes;var c,f;for(c in h){for(k=h[c];;)if(f=b.onAttributeName(a,c))if(f!=c)delete h[c],c=f;else break;else{delete h[c];break}f&&(!1===(k=b.onAttribute(a,g,f,k))?delete h[f]:h[f]=k)}g.isEmpty||this.filterChildren(b,!1,a);return!0},filterChildren:g.filterChildren,writeHtml:function(b,a){a&&this.filter(a);var g=this.name, +l=[],k=this.attributes,c,f;b.openTag(g,k);for(c in k)l.push([c,k[c]]);b.sortAttributes&&l.sort(h);c=0;for(f=l.length;c<f;c++)k=l[c],b.attribute(k[0],k[1]);b.openTagClose(g,this.isEmpty);this.writeChildrenHtml(b);this.isEmpty||b.closeTag(g)},writeChildrenHtml:g.writeChildrenHtml,replaceWithChildren:function(){for(var b=this.children,a=b.length;a;)b[--a].insertAfter(this);this.remove()},forEach:g.forEach,getFirst:function(e){if(!e)return this.children.length?this.children[0]:null;"function"!=typeof e&& +(e=b(e));for(var a=0,g=this.children.length;a<g;++a)if(e(this.children[a]))return this.children[a];return null},getHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(b);return b.getHtml()},setHtml:function(b){b=this.children=CKEDITOR.htmlParser.fragment.fromHtml(b).children;for(var a=0,g=b.length;a<g;++a)b[a].parent=this},getOuterHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(b);return b.getHtml()},split:function(b){for(var a=this.children.splice(b, +this.children.length-b),g=this.clone(),h=0;h<a.length;++h)a[h].parent=g;g.children=a;a[0]&&(a[0].previous=null);0<b&&(this.children[b-1].next=null);this.parent.add(g,this.getIndex()+1);return g},find:function(b,a){void 0===a&&(a=!1);var g=[],h;for(h=0;h<this.children.length;h++){var k=this.children[h];"function"==typeof b&&b(k)?g.push(k):"string"==typeof b&&k.name===b&&g.push(k);a&&k.find&&(g=g.concat(k.find(b,a)))}return g},findOne:function(b,a){var g=null,h=CKEDITOR.tools.array.find(this.children, +function(h){var c="function"===typeof b?b(h):h.name===b;if(c||!a)return c;h.children&&h.findOne&&(g=h.findOne(b,!0));return!!g});return g||h||null},addClass:function(b){if(!this.hasClass(b)){var a=this.attributes["class"]||"";this.attributes["class"]=a+(a?" ":"")+b}},removeClass:function(b){var a=this.attributes["class"];a&&((a=CKEDITOR.tools.trim(a.replace(new RegExp("(?:\\s+|^)"+b+"(?:\\s+|$)")," ")))?this.attributes["class"]=a:delete this.attributes["class"])},hasClass:function(b){var a=this.attributes["class"]; +return a?(new RegExp("(?:^|\\s)"+b+"(?\x3d\\s|$)")).test(a):!1},getFilterContext:function(b){var a=[];b||(b={nonEditable:!1,nestedEditable:!1});b.nonEditable||"false"!=this.attributes.contenteditable?b.nonEditable&&!b.nestedEditable&&"true"==this.attributes.contenteditable&&a.push("nestedEditable",!0):a.push("nonEditable",!0);if(a.length){b=CKEDITOR.tools.copy(b);for(var g=0;g<a.length;g+=2)b[a[g]]=a[g+1]}return b}},!0)})();(function(){var b=/{([^}]+)}/g;CKEDITOR.template=function(b){this.source= +"function"===typeof b?b:String(b)};CKEDITOR.template.prototype.output=function(h,g){var e=("function"===typeof this.source?this.source(h):this.source).replace(b,function(a,b){return void 0!==h[b]?h[b]:a});return g?g.push(e):e}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);CKEDITOR.add=function(b){function h(){CKEDITOR.currentInstance==b&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))}CKEDITOR.instances[b.name]=b;b.on("focus", +function(){CKEDITOR.currentInstance!=b&&(CKEDITOR.currentInstance=b,CKEDITOR.fire("currentInstance"))});b.on("blur",h);b.on("destroy",h);CKEDITOR.fire("instance",null,b)};CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name]};(function(){var b={};CKEDITOR.addTemplate=function(h,g){var e=b[h];if(e)return e;e={name:h,source:g};CKEDITOR.fire("template",e);return b[h]=new CKEDITOR.template(e.source)};CKEDITOR.getTemplate=function(h){return b[h]}})();(function(){var b=[];CKEDITOR.addCss=function(h){b.push(h)}; +CKEDITOR.getCss=function(){return b.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;CKEDITOR.TRISTATE_DISABLED=0;(function(){CKEDITOR.inline=function(b,h){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;var g=new CKEDITOR.editor(h,b,CKEDITOR.ELEMENT_MODE_INLINE),e=b.is("textarea")?b:null;e?(g.setData(e.getValue(),null,!0),b=CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"'+ +!!g.readOnly+'" class\x3d"cke_textarea_inline"\x3e'+e.getValue()+"\x3c/div\x3e",CKEDITOR.document),b.insertAfter(e),e.hide(),e.$.form&&g._attachToForm()):g.setData(b.getHtml(),null,!0);g.on("loaded",function(){g.fire("uiReady");g.editable(b);g.container=b;g.ui.contentsElement=b;g.setData(g.getData(1));g.resetDirty();g.fire("contentDom");g.mode="wysiwyg";g.fire("mode");g.status="ready";g.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,g)},null,null,1E4);g.on("destroy",function(){var a= +g.container;e&&a&&(a.clearCustomData(),a.remove());e&&e.show();g.element.clearCustomData();delete g.element});return g};CKEDITOR.inlineAll=function(){var b,h,g;for(g in CKEDITOR.dtd.$editable)for(var e=CKEDITOR.document.getElementsByTag(g),a=0,m=e.count();a<m;a++)b=e.getItem(a),"true"==b.getAttribute("contenteditable")&&(h={element:b,config:{}},!1!==CKEDITOR.fire("inline",h)&&CKEDITOR.inline(b,h.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass= +"ckeditor";(function(){function b(b,a,m,l){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;var k=new CKEDITOR.editor(a,b,l);l==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.setStyle("visibility","hidden"),k._.required=b.hasAttribute("required"),b.removeAttribute("required"));m&&k.setData(m,null,!0);k.on("loaded",function(){k.isDestroyed()||k.isDetached()||(g(k),l==CKEDITOR.ELEMENT_MODE_REPLACE&&k.config.autoUpdateElement&&b.$.form&&k._attachToForm(),k.setMode(k.config.startupMode,function(){k.resetDirty(); +k.status="ready";k.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,k)}))});k.on("destroy",h);return k}function h(){var b=this.container,a=this.element;b&&(b.clearCustomData(),b.remove());a&&(a.clearCustomData(),this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.show(),this._.required&&a.setAttribute("required","required")),delete this.element)}function g(b){var a=b.name,g=b.element,h=b.elementMode,k=b.fire("uiSpace",{space:"top",html:""}).html,c=b.fire("uiSpace",{space:"bottom",html:""}).html, +f=new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':"")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':"")+'\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'), +a=CKEDITOR.dom.element.createFromHtml(f.output({id:b.id,name:a,langDir:b.lang.dir,langCode:b.langCode,voiceLabel:b.title,topHtml:k?'\x3cspan id\x3d"'+b.ui.spaceId("top")+'" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e'+k+"\x3c/span\x3e":"",contentId:b.ui.spaceId("contents"),bottomHtml:c?'\x3cspan id\x3d"'+b.ui.spaceId("bottom")+'" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e'+c+"\x3c/span\x3e":"",outerEl:CKEDITOR.env.ie?"span":"div"}));h==CKEDITOR.ELEMENT_MODE_REPLACE? +(g.hide(),a.insertAfter(g)):g.append(a);b.container=a;b.ui.contentsElement=b.ui.space("contents");k&&b.ui.space("top").unselectable();c&&b.ui.space("bottom").unselectable();g=b.config.width;h=b.config.height;g&&a.setStyle("width",CKEDITOR.tools.cssLength(g));h&&b.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(h));a.disableContextMenu();CKEDITOR.env.webkit&&a.on("focus",function(){b.focus()});b.fireOnce("uiReady")}CKEDITOR.replace=function(e,a){return b(e,a,null,CKEDITOR.ELEMENT_MODE_REPLACE)}; +CKEDITOR.appendTo=function(e,a,g){return b(e,a,g,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var b=document.getElementsByTagName("textarea"),a=0;a<b.length;a++){var g=null,h=b[a];if(h.name||h.id){if("string"==typeof arguments[0]){if(!(new RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)")).test(h.className))continue}else if("function"==typeof arguments[0]&&(g={},!1===arguments[0](h,g)))continue;this.replace(h,g)}}};CKEDITOR.editor.prototype.addMode=function(b,a){(this._.modes||(this._.modes= +{}))[b]=a};CKEDITOR.editor.prototype.setMode=function(b,a){var g=this,h=this._.modes;if(b!=g.mode&&h&&h[b]){g.fire("beforeSetMode",b);if(g.mode){var k=g.checkDirty(),h=g._.previousModeData,c,f=0;g.fire("beforeModeUnload");g.editable(0);g._.previousMode=g.mode;g._.previousModeData=c=g.getData(1);"source"==g.mode&&h==c&&(g.fire("lockSnapshot",{forceUpdate:!0}),f=1);g.ui.space("contents").setHtml("");g.mode=""}else g._.previousModeData=g.getData(1);this._.modes[b](function(){g.mode=b;void 0!==k&&!k&& +g.resetDirty();f?g.fire("unlockSnapshot"):"wysiwyg"==b&&g.fire("saveSnapshot");setTimeout(function(){g.isDestroyed()||g.isDetached()||(g.fire("mode"),a&&a.call(g))},0)})}};CKEDITOR.editor.prototype.resize=function(b,a,g,h){var k=this.container,c=this.ui.space("contents"),f=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement;h=h?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):k;h.setSize("width",b,!0);f&&(f.style.width="1%"); +var d=(h.$.offsetHeight||0)-(c.$.clientHeight||0),k=Math.max(a-(g?0:d),0);a=g?a+d:a;c.setStyle("height",k+"px");f&&(f.style.width="100%");this.fire("resize",{outerHeight:a,contentsHeight:k,outerWidth:b||h.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(b){return b?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg";(function(){function b(a){var c=a.editor, +d=a.data.path,b=d.blockLimit,f=a.data.selection,g=f.getRanges()[0],n;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(f=h(f,d))f.appendBogus(),n=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.edge&&c._.previousActive;l(c,d.block,b)&&g.collapsed&&!g.getCommonAncestor().isReadOnly()&&(d=g.clone(),d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),b=new CKEDITOR.dom.walker(d),b.guard=function(a){return!e(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!b.checkForward()||d.checkStartOfBlock()&& +d.checkEndOfBlock())&&(c=g.fixBlock(!0,c.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p"),CKEDITOR.env.needsBrFiller||(c=c.getFirst(e))&&c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?: |\xa0)$/)&&c.remove(),n=1,a.cancel());n&&g.select()}function h(a,c){if(a.isFake)return 0;var d=c.block||c.blockLimit,b=d&&d.getLast(e);if(!(!d||!d.isBlockBoundary()||b&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||d.is("pre")||d.getBogus()))return d}function g(a){var c=a.data.getTarget(); +c.is("input")&&(c=c.getAttribute("type"),"submit"!=c&&"reset"!=c||a.data.preventDefault())}function e(a){return n(a)&&w(a)}function a(a,c){return function(d){var b=d.data.$.toElement||d.data.$.fromElement||d.data.$.relatedTarget;(b=b&&b.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(b):null)&&(c.equals(b)||c.contains(b))||a.call(this,d)}}function m(a){function c(a){return function(c,b){b&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(f)&&(d=c);if(!(b||!e(c)||a&&p(c)))return!1}}var d,b=a.getRanges()[0]; +a=a.root;var f={table:1,ul:1,ol:1,dl:1};if(b.startPath().contains(f)){var g=b.clone();g.collapse(1);g.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(g);a.guard=c();a.checkBackward();if(d)return g=b.clone(),g.collapse(),g.setEndAt(d,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(g),a.guard=c(!0),d=!1,a.checkForward(),d}return null}function l(a,c,d){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(d)&&!c||c&&"true"==c.getAttribute("contenteditable"))} +function k(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function c(a){a&&a.isEmptyInlineRemoveable()&&a.remove()}function f(a){var c=a.editor;c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot")},0)}function d(a,c,d){var b=a.getCommonAncestor(c);for(c=a=d?c:a;(a=a.getParent())&&!b.equals(a)&&1==a.getChildCount();)c=a;c.remove()}var n,w,v,p,r,q,x,t,z,y;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element, +$:function(a,c){this.base(c.$||c);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}CKEDITOR.env.edge&&14<CKEDITOR.env.version&&!this.hasFocus&&this.getDocument().equals(CKEDITOR.document)&&(this.editor._.previousScrollTop=this.$.scrollTop);try{if(!CKEDITOR.env.ie||CKEDITOR.env.edge&&14<CKEDITOR.env.version||!this.getDocument().equals(CKEDITOR.document))if(CKEDITOR.env.chrome){var c= +this.$.scrollTop;this.$.focus();this.$.scrollTop=c}else this.$.focus();else this.$.setActive()}catch(d){if(!CKEDITOR.env.ie)throw d;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(c,d){var b=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(c)&&(c="focus"==c?"focusin":"focusout",d=a(d,this),b[0]=c,b[1]=d);return CKEDITOR.dom.element.prototype.on.apply(this,b)},attachListener:function(a){!this._.listeners&& (this._.listeners=[]);var c=Array.prototype.slice.call(arguments,1),c=a.on.apply(a,c);this._.listeners.push(c);return c},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(c){}},restoreAttrs:function(){var a=this._.attrChanges,c,d;for(d in a)a.hasOwnProperty(d)&&(c=a[d],null!==c?this.setAttribute(d,c):this.removeAttribute(d))},attachClass:function(a){var c=this.getCustomData("classes");this.hasClass(a)||(!c&&(c=[]),c.push(a),this.setCustomData("classes", c),this.addClass(a))},changeAttr:function(a,c){var d=this.getAttribute(a);c!==d&&(!this._.attrChanges&&(this._.attrChanges={}),a in this._.attrChanges||(this._.attrChanges[a]=d),this.setAttribute(a,c))},insertText:function(a){this.editor.focus();this.insertHtml(this.transformPlainTextToHtml(a),"text")},transformPlainTextToHtml:function(a){var c=this.editor.getSelection().getStartElement().hasAscendant("pre",!0)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a, -c)},insertHtml:function(a,c,d){var b=this.editor;b.focus();b.fire("saveSnapshot");d||(d=b.getSelection().getRanges()[0]);q(this,c||"html",a,d);d.select();e(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,c,d){q(this,d||"html",a,c);this.editor.fire("afterInsertHtml",{intoRange:c})},insertElement:function(a,c){var d=this.editor;d.focus();d.fire("saveSnapshot");var b=d.activeEnterMode,d=d.getSelection(),g=a.getName(),g=CKEDITOR.dtd.$block[g];c||(c=d.getRanges()[0]);this.insertElementIntoRange(a, -c)&&(c.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),g&&((g=a.getNext(function(a){return f(a)&&!r(a)}))&&g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.$block)?g.getDtd()["#"]?c.moveToElementEditStart(g):c.moveToElementEditEnd(a):g||b==CKEDITOR.ENTER_BR||(g=c.fixBlock(!0,b==CKEDITOR.ENTER_DIV?"div":"p"),c.moveToElementEditStart(g))));d.selectRanges([c]);e(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,c){var b=this.editor,e=b.config.enterMode, -f=a.getName(),g=CKEDITOR.dtd.$block[f];if(c.checkReadOnly())return!1;c.deleteContents(1);c.startContainer.type==CKEDITOR.NODE_ELEMENT&&(c.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?u(c):c.startContainer.is(CKEDITOR.dtd.$list)&&t(c));var h,n;if(g)for(;(h=c.getCommonAncestor(0,1))&&(n=CKEDITOR.dtd[h.getName()])&&(!n||!n[f]);)if(h.getName()in CKEDITOR.dtd.span){var g=c.splitElement(h),k=c.createBookmark();d(h);d(g);c.moveToBookmark(k)}else c.checkStartOfBlock()&&c.checkEndOfBlock()?(c.setStartBefore(h), -c.collapse(!0),h.remove()):c.splitBlock(e==CKEDITOR.ENTER_DIV?"div":"p",b.editable());c.insertNode(a);return!0},setData:function(a,c){c||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},getData:function(a){var c=this.getHtml();a||(c=this.editor.dataProcessor.toDataFormat(c));return c},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.status="detached"; -this.editor.setData(this.editor.getData(),{internal:!0});this.clearListeners();try{this._.cleanCustomData()}catch(a){if(!CKEDITOR.env.ie||-2146828218!==a.number)throw a;}this.editor.fire("contentDomUnload");delete this.editor.document;delete this.editor.window;delete this.editor},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var c=d.getDocument().$,b=c.getSelection(),e;a:if(b.anchorNode&&b.anchorNode==d.$)e=!0;else{if(CKEDITOR.env.webkit&& -(e=d.getDocument().getActive())&&e.equals(d)&&!b.anchorNode){e=!0;break a}e=void 0}e&&(e=new CKEDITOR.dom.range(d),e.moveToElementEditStart(d),c=c.createRange(),c.setStart(e.startContainer.$,e.startOffset),c.collapse(!0),b.removeAllRanges(),b.addRange(c))}function c(){var a=d.getDocument().$,b=a.selection,e=d.getDocument().getActive();"None"==b.type&&e.equals(d)&&(b=new CKEDITOR.dom.range(d),a=a.body.createTextRange(),b.moveToElementEditStart(d),b=b.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b= -b.getParent()),a.moveToElementText(b.$),a.collapse(!0),a.select())}var d=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),c());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};y.eol.detect(a,this);y.bogus.exclude(a);y.cell.shrink(a);a.fragment=a.range.cloneContents(); -y.tree.rebuild(a,this);y.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,c){var d=v,b={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);d.table.detectPurge(b);b.bookmark=a.createBookmark();delete b.range;var f=this.editor.createRange();f.moveToPosition(b.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);b.targetBookmark=f.createBookmark();d.list.detectMerge(b,this); +c)},insertHtml:function(a,c,d){var b=this.editor;b.focus();b.fire("saveSnapshot");d||(d=b.getSelection().getRanges()[0]);q(this,c||"html",a,d);d.select();f(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,c,d){q(this,d||"html",a,c);this.editor.fire("afterInsertHtml",{intoRange:c})},insertElement:function(a,c){var d=this.editor;d.focus();d.fire("saveSnapshot");var b=d.activeEnterMode,d=d.getSelection(),g=a.getName(),g=CKEDITOR.dtd.$block[g];c||(c=d.getRanges()[0]);this.insertElementIntoRange(a, +c)&&(c.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),g&&((g=a.getNext(function(a){return e(a)&&!p(a)}))&&g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.$block)?g.getDtd()["#"]?c.moveToElementEditStart(g):c.moveToElementEditEnd(a):g||b==CKEDITOR.ENTER_BR||(g=c.fixBlock(!0,b==CKEDITOR.ENTER_DIV?"div":"p"),c.moveToElementEditStart(g))));d.selectRanges([c]);f(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,d){var b=this.editor,f=b.config.enterMode, +e=a.getName(),g=CKEDITOR.dtd.$block[e];if(d.checkReadOnly())return!1;d.deleteContents(1);d.startContainer.type==CKEDITOR.NODE_ELEMENT&&(d.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?x(d):d.startContainer.is(CKEDITOR.dtd.$list)&&t(d));var h,n;if(g)for(;(h=d.getCommonAncestor(0,1))&&(n=CKEDITOR.dtd[h.getName()])&&(!n||!n[e]);)if(h.getName()in CKEDITOR.dtd.span){var g=d.splitElement(h),l=d.createBookmark();c(h);c(g);d.moveToBookmark(l)}else d.checkStartOfBlock()&&d.checkEndOfBlock()?(d.setStartBefore(h), +d.collapse(!0),h.remove()):d.splitBlock(f==CKEDITOR.ENTER_DIV?"div":"p",b.editable());d.insertNode(a);return!0},setData:function(a,c){c||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},getData:function(a){var c=this.getHtml();a||(c=this.editor.dataProcessor.toDataFormat(c));return c},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.status="detached"; +this.editor.setData(this.editor.getData(),{internal:!0});this.clearListeners();try{this._.cleanCustomData()}catch(a){if(!CKEDITOR.env.ie||-2146828218!==a.number)throw a;}this.editor.fire("contentDomUnload");delete this.editor.document;delete this.editor.window;delete this.editor},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var c=d.getDocument().$,b=c.getSelection(),f;a:if(b.anchorNode&&b.anchorNode==d.$)f=!0;else{if(CKEDITOR.env.webkit&& +(f=d.getDocument().getActive())&&f.equals(d)&&!b.anchorNode){f=!0;break a}f=void 0}f&&(f=new CKEDITOR.dom.range(d),f.moveToElementEditStart(d),c=c.createRange(),c.setStart(f.startContainer.$,f.startOffset),c.collapse(!0),b.removeAllRanges(),b.addRange(c))}function c(){var a=d.getDocument().$,b=a.selection,f=d.getDocument().getActive();"None"==b.type&&f.equals(d)&&(b=new CKEDITOR.dom.range(d),a=a.body.createTextRange(),b.moveToElementEditStart(d),b=b.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b= +b.getParent()),a.moveToElementText(b.$),a.collapse(!0),a.select())}var d=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),c());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};z.eol.detect(a,this);z.bogus.exclude(a);z.cell.shrink(a);a.fragment=a.range.cloneContents(); +z.tree.rebuild(a,this);z.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,c){var d=y,b={range:a,doc:a.document},f=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),f;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);d.table.detectPurge(b);b.bookmark=a.createBookmark();delete b.range;var e=this.editor.createRange();e.moveToPosition(b.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);b.targetBookmark=e.createBookmark();d.list.detectMerge(b,this); d.table.detectRanges(b,this);d.block.detectMerge(b,this);b.tableContentsRanges?(d.table.deleteRanges(b),a.moveToBookmark(b.bookmark),b.range=a):(a.moveToBookmark(b.bookmark),b.range=a,a.extractContents(d.detectExtractMerge(b)));a.moveToBookmark(b.targetBookmark);a.optimize();d.fixUneditableRangePosition(a);d.list.merge(b,this);d.table.purge(b,this);d.block.merge(b,this);if(c){d=a.startPath();if(b=a.checkStartOfBlock()&&a.checkEndOfBlock()&&d.block&&!a.root.equals(d.block)){a:{var b=d.block.getElementsByTag("span"), -f=0,g;if(b)for(;g=b.getItem(f++);)if(!w(g)){b=!0;break a}b=!1}b=!b}b&&(a.moveToPosition(d.block,CKEDITOR.POSITION_BEFORE_START),d.block.remove())}else d.autoParagraph(this.editor,a),z(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var c=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(c=c.replace(p,function(a,c){return c}));a.setData(c,null,1)}, +e=0,g;if(b)for(;g=b.getItem(e++);)if(!w(g)){b=!0;break a}b=!1}b=!b}b&&(a.moveToPosition(d.block,CKEDITOR.POSITION_BEFORE_START),d.block.remove())}else d.autoParagraph(this.editor,a),v(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return f},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var c=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(c=c.replace(r,function(a,c){return c}));a.setData(c,null,1)}, this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var c=a.getSelection();(c=c&&c.getNative())&&"Control"==c.type||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a, "insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]= -+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null,null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var d=function(){var c=a.editable();null!=a._.previousScrollTop&&c.getDocument().equals(CKEDITOR.document)&&(c.$.scrollTop=a._.previousScrollTop,a._.previousScrollTop=null,this.removeListener("scroll", -d))};this.on("scroll",d)}a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once("contentDom",function(){a.focusManager.focus(this)},this));this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var b=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var e=a.config.contentsLangDirection;this.getDirection(1)!=e&&this.changeAttr("dir",e);var h=CKEDITOR.getCss(); -if(h){var e=b.getHead(),k=e.getCustomData("stylesheet");k?h!=k.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?k.$.styleSheet.cssText=h:k.setText(h)):(h=b.appendStyleText(h),h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement),e.setCustomData("stylesheet",h),h.data("cke-temp",1))}e=b.getCustomData("stylesheet_ref")||0;b.setCustomData("stylesheet_ref",e+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var c= -(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");c&&2!=a.$.button&&c.isReadOnly()&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var d=c.data.domEvent.getKey(),b;c=a.getSelection();if(0!==c.getRanges().length){if(d in l){var e,f=c.getRanges()[0],g=f.startPath(),h,k,q,d=8==d;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(e=c.getSelectedElement())||(e=m(c))?(a.fire("saveSnapshot"),f.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(), -f.select(),a.fire("saveSnapshot"),b=1):f.collapsed&&((h=g.block)&&(q=h[d?"getPrevious":"getNext"](n))&&q.type==CKEDITOR.NODE_ELEMENT&&q.is("table")&&f[d?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),f[d?"checkEndOfBlock":"checkStartOfBlock"]()&&h.remove(),f["moveToElementEdit"+(d?"End":"Start")](q),f.select(),a.fire("saveSnapshot"),b=1):g.blockLimit&&g.blockLimit.is("td")&&(k=g.blockLimit.getAscendant("table"))&&f.checkBoundaryOfElement(k,d?CKEDITOR.START:CKEDITOR.END)&&(q=k[d? -"getPrevious":"getNext"](n))?(a.fire("saveSnapshot"),f["moveToElementEdit"+(d?"End":"Start")](q),f.checkStartOfBlock()&&f.checkEndOfBlock()?q.remove():f.select(),a.fire("saveSnapshot"),b=1):(k=g.contains(["td","th","caption"]))&&f.checkBoundaryOfElement(k,d?CKEDITOR.START:CKEDITOR.END)&&(b=1))}return!b}});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(c){c.data.getKeystroke()in l&&!this.getFirst(f)&&(this.appendBogus(),c=a.createRange(),c.moveToPosition(this, ++a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null,null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var c=function(){var d=a.editable();null!=a._.previousScrollTop&&d.getDocument().equals(CKEDITOR.document)&&(d.$.scrollTop=a._.previousScrollTop,a._.previousScrollTop=null,this.removeListener("scroll", +c))};this.on("scroll",c)}a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once("contentDom",function(){a.focusManager.focus(this)},this));this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var b=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var f=a.config.contentsLangDirection;this.getDirection(1)!=f&&this.changeAttr("dir",f);var h=CKEDITOR.getCss(); +if(h){var f=b.getHead(),l=f.getCustomData("stylesheet");l?h!=l.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?l.$.styleSheet.cssText=h:l.setText(h)):(h=b.appendStyleText(h),h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement),f.setCustomData("stylesheet",h),h.data("cke-temp",1))}f=b.getCustomData("stylesheet_ref")||0;b.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var c= +(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");c&&2!=a.$.button&&c.isReadOnly()&&a.preventDefault()});var k={8:1,46:1};this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var d=c.data.domEvent.getKey(),b;c=a.getSelection();if(0!==c.getRanges().length){if(d in k){var f,e=c.getRanges()[0],g=e.startPath(),h,l,q,d=8==d;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(f=c.getSelectedElement())||(f=m(c))?(a.fire("saveSnapshot"),e.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f.remove(), +e.select(),a.fire("saveSnapshot"),b=1):e.collapsed&&((h=g.block)&&(q=h[d?"getPrevious":"getNext"](n))&&q.type==CKEDITOR.NODE_ELEMENT&&q.is("table")&&e[d?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),e[d?"checkEndOfBlock":"checkStartOfBlock"]()&&h.remove(),e["moveToElementEdit"+(d?"End":"Start")](q),e.select(),a.fire("saveSnapshot"),b=1):g.blockLimit&&g.blockLimit.is("td")&&(l=g.blockLimit.getAscendant("table"))&&e.checkBoundaryOfElement(l,d?CKEDITOR.START:CKEDITOR.END)&&(q=l[d? +"getPrevious":"getNext"](n))?(a.fire("saveSnapshot"),e["moveToElementEdit"+(d?"End":"Start")](q),e.checkStartOfBlock()&&e.checkEndOfBlock()?q.remove():e.select(),a.fire("saveSnapshot"),b=1):(l=g.contains(["td","th","caption"]))&&e.checkBoundaryOfElement(l,d?CKEDITOR.START:CKEDITOR.END)&&(b=1))}return!b}});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(c){c.data.getKeystroke()in k&&!this.getFirst(e)&&(this.appendBogus(),c=a.createRange(),c.moveToPosition(this, CKEDITOR.POSITION_AFTER_START),c.select())});this.attachListener(this,"dblclick",function(c){if(a.readOnly)return!1;c={element:c.data.getTarget()};a.fire("doubleclick",c)});CKEDITOR.env.ie&&this.attachListener(this,"click",g);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown",function(c){var d=c.data.getTarget();d.is("img","hr","input","textarea","select")&&!d.isReadOnly()&&(a.getSelection().selectElement(d),d.is("input","textarea","select")&&c.data.preventDefault())});CKEDITOR.env.edge&& -this.attachListener(this,"mouseup",function(c){(c=c.data.getTarget())&&c.is("img")&&!c.isReadOnly()&&a.getSelection().selectElement(c)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(c){if(2==c.data.$.button&&(c=c.data.getTarget(),!c.getAscendant("table")&&!c.getOuterHtml().replace(p,""))){var d=a.createRange();d.moveToElementEditStart(c);d.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}), -this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(d){if(a.readOnly)return!0;var b=d.data.domEvent.getKey();if(b in l&&(d=a.getSelection(),0!==d.getRanges().length)){var b=8==b,e=d.getRanges()[0];d=e.startPath();if(e.collapsed)a:{var f=d.block;if(f&&e[b?"checkStartOfBlock":"checkEndOfBlock"]()&&e.moveToClosestEditablePosition(f,!b)&&e.collapsed){if(e.startContainer.type==CKEDITOR.NODE_ELEMENT){var g= -e.startContainer.getChild(e.startOffset-(b?1:0));if(g&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("hr")){a.fire("saveSnapshot");g.remove();d=!0;break a}}e=e.startPath().block;if(!e||e&&e.contains(f))d=void 0;else{a.fire("saveSnapshot");var h;(h=(b?e:f).getBogus())&&h.remove();h=a.getSelection();g=h.createBookmarks();(b?f:e).moveChildren(b?e:f,!1);d.lastElement.mergeSiblings();c(f,e,!b);h.selectBookmarks(g);d=!0}}else d=!1}else b=e,h=d.block,e=b.endPath().block,h&&e&&!h.equals(e)?(a.fire("saveSnapshot"), -(f=h.getBogus())&&f.remove(),b.enlarge(CKEDITOR.ENLARGE_INLINE),b.deleteContents(),e.getParent()&&(e.moveChildren(h,!1),d.lastElement.mergeSiblings(),c(h,e,!0)),b=a.getSelection().getRanges()[0],b.collapse(1),b.optimize(),""===b.startContainer.getHtml()&&b.startContainer.appendBogus(),b.select(),d=!0):d=!1;if(!d)return;a.getSelection().scrollIntoView();a.fire("saveSnapshot");return!1}},this,null,100)}},getUniqueId:function(){var a;try{this._.expandoNumber=a=CKEDITOR.dom.domObject.prototype.getUniqueId.call(this)}catch(c){a= +this.attachListener(this,"mouseup",function(c){(c=c.data.getTarget())&&c.is("img")&&!c.isReadOnly()&&a.getSelection().selectElement(c)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(c){if(2==c.data.$.button&&(c=c.data.getTarget(),!c.getAscendant("table")&&!c.getOuterHtml().replace(r,""))){var d=a.createRange();d.moveToElementEditStart(c);d.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}), +this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var b=c.data.domEvent.getKey();if(b in k&&(c=a.getSelection(),0!==c.getRanges().length)){var b=8==b,f=c.getRanges()[0];c=f.startPath();if(f.collapsed)a:{var e=c.block;if(e&&f[b?"checkStartOfBlock":"checkEndOfBlock"]()&&f.moveToClosestEditablePosition(e,!b)&&f.collapsed){if(f.startContainer.type==CKEDITOR.NODE_ELEMENT){var g= +f.startContainer.getChild(f.startOffset-(b?1:0));if(g&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("hr")){a.fire("saveSnapshot");g.remove();c=!0;break a}}f=f.startPath().block;if(!f||f&&f.contains(e))c=void 0;else{a.fire("saveSnapshot");var h;(h=(b?f:e).getBogus())&&h.remove();h=a.getSelection();g=h.createBookmarks();(b?e:f).moveChildren(b?f:e,!1);c.lastElement.mergeSiblings();d(e,f,!b);h.selectBookmarks(g);c=!0}}else c=!1}else b=f,h=c.block,f=b.endPath().block,h&&f&&!h.equals(f)?(a.fire("saveSnapshot"), +(e=h.getBogus())&&e.remove(),b.enlarge(CKEDITOR.ENLARGE_INLINE),b.deleteContents(),f.getParent()&&(f.moveChildren(h,!1),c.lastElement.mergeSiblings(),d(h,f,!0)),b=a.getSelection().getRanges()[0],b.collapse(1),b.optimize(),""===b.startContainer.getHtml()&&b.startContainer.appendBogus(),b.select(),c=!0):c=!1;if(!c)return;a.getSelection().scrollIntoView();a.fire("saveSnapshot");return!1}},this,null,100)}},getUniqueId:function(){var a;try{this._.expandoNumber=a=CKEDITOR.dom.domObject.prototype.getUniqueId.call(this)}catch(c){a= this._&&this._.expandoNumber}return a}},_:{cleanCustomData:function(){this.removeClass("cke_editable");this.restoreAttrs();for(var a=this.removeCustomData("classes");a&&a.length;)this.removeClass(a.pop());if(!this.is("textarea")){var a=this.getDocument(),c=a.getHead();if(c.getCustomData("stylesheet")){var d=a.getCustomData("stylesheet_ref");--d?a.setCustomData("stylesheet_ref",d):(a.removeCustomData("stylesheet_ref"),c.removeCustomData("stylesheet").remove())}}}}});CKEDITOR.editor.prototype.editable= function(a){var c=this._.editable;if(c&&a)return 0;if(!arguments.length)return c;a?c=a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(c&&c.detach(),c=null);return this._.editable=c};CKEDITOR.on("instanceLoaded",function(a){var c=a.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1"),a.setAttribute("contentEditable", !1))});c.on("selectionChange",function(a){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),b(a),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var c=a.editor;c.on("mode",function(){var a=c.editable();if(a&&a.isInline()){var d=c.title;a.changeAttr("role","textbox");a.changeAttr("aria-multiline","true");a.changeAttr("aria-label",d);d&&a.changeAttr("title",d);var b=c.fire("ariaEditorHelpLabel",{}).label;if(b&& -(d=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var e=CKEDITOR.tools.getNextId(),b=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+e+'" class\x3d"cke_voice_label"\x3e'+b+"\x3c/span\x3e");d.append(b);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");n=CKEDITOR.dom.walker.whitespaces(!0);w=CKEDITOR.dom.walker.bookmark(!1,!0);z=CKEDITOR.dom.walker.empty(); -r=CKEDITOR.dom.walker.bogus();p=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;q=function(){function a(c){return c.type==CKEDITOR.NODE_ELEMENT}function c(d,b){var e,f,g,h,n=[],k=b.range.startContainer;e=b.range.startPath();for(var k=m[k.getName()],l=0,q=d.getChildren(),w=q.count(),p=-1,t=-1,C=0,r=e.contains(m.$list);l<w;++l)e=q.getItem(l),a(e)?(g=e.getName(),r&&g in CKEDITOR.dtd.$list?n=n.concat(c(e,b)):(h=!!k[g], -"br"!=g||!e.data("cke-eol")||l&&l!=w-1||(C=(f=l?n[l-1].node:q.getItem(l+1))&&(!a(f)||!f.is("br")),f=f&&a(f)&&m.$block[f.getName()]),-1!=p||h||(p=l),h||(t=l),n.push({isElement:1,isLineBreak:C,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:g,allowed:h}),f=C=0)):n.push({isElement:0,node:e,allowed:1});-1<p&&(n[p].firstNotAllowed=1);-1<t&&(n[t].lastNotAllowed=1);return n}function b(c,d){var e=[],f=c.getChildren(),g=f.count(),h,n=0,k=m[d],l=!c.is(m.$inline)||c.is("br");for(l&&e.push(" ");n<g;n++)h= -f.getItem(n),a(h)&&!h.is(k)?e=e.concat(b(h,d)):e.push(h);l&&e.push(" ");return e}function e(c){return a(c.startContainer)&&c.startContainer.getChild(c.startOffset-1)}function g(c){return c&&a(c)&&(c.is(m.$removeEmpty)||c.is("a")&&!c.isBlockBoundary())}function h(c,d,b,e){var f=c.clone(),g,n;f.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);(g=(new CKEDITOR.dom.walker(f)).next())&&a(g)&&q[g.getName()]&&(n=g.getPrevious())&&a(n)&&!n.getParent().equals(c.startContainer)&&b.contains(n)&&e.contains(g)&&g.isIdentical(n)&& -(g.moveChildren(n),g.remove(),h(c,d,b,e))}function n(c,d){function b(c,d){if(d.isBlock&&d.isElement&&!d.node.is("br")&&a(c)&&c.is("br"))return c.remove(),1}var e=d.endContainer.getChild(d.endOffset),f=d.endContainer.getChild(d.endOffset-1);e&&b(e,c[c.length-1]);f&&b(f,c[0])&&(d.setEnd(d.endContainer,d.endOffset-1),d.collapse())}var m=CKEDITOR.dtd,q={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},w={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},p=CKEDITOR.tools.extend({}, -m.$inline);delete p.br;return function(E,q,t,r){var v=E.editor,u=!1;"unfiltered_html"==q&&(q="html",u=!0);if(!r.checkReadOnly()){var z=(new CKEDITOR.dom.elementPath(r.startContainer,r.root)).blockLimit||r.root;q={type:q,dontFilter:u,editable:E,editor:v,range:r,blockLimit:z,mergeCandidates:[],zombies:[]};var u=q.range,z=q.mergeCandidates,y="html"===q.type,F,L,T,Z,ca,aa;"text"==q.type&&u.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(L=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e", -u.document),u.insertNode(L),u.setStartAfter(L));T=new CKEDITOR.dom.elementPath(u.startContainer);q.endPath=Z=new CKEDITOR.dom.elementPath(u.endContainer);if(!u.collapsed){F=Z.block||Z.blockLimit;var da=u.getCommonAncestor();F&&!F.equals(da)&&!F.contains(da)&&u.checkEndOfBlock()&&q.zombies.push(F);u.deleteContents()}for(;(ca=e(u))&&a(ca)&&ca.isBlockBoundary()&&T.contains(ca);)u.moveToPosition(ca,CKEDITOR.POSITION_BEFORE_END);h(u,q.blockLimit,T,Z);L&&(u.setEndBefore(L),u.collapse(),L.remove());L=u.startPath(); -if(F=L.contains(g,!1,1))aa=u.splitElement(F),q.inlineStylesRoot=F,q.inlineStylesPeak=L.lastElement;L=u.createBookmark();y&&(d(F),d(aa));(F=L.startNode.getPrevious(f))&&a(F)&&g(F)&&z.push(F);(F=L.startNode.getNext(f))&&a(F)&&g(F)&&z.push(F);for(F=L.startNode;(F=F.getParent())&&g(F);)z.push(F);u.moveToBookmark(L);v.enterMode===CKEDITOR.ENTER_DIV&&""===v.getData(!0)&&((v=E.getFirst())&&v.remove(),r.setStartAt(E,CKEDITOR.POSITION_AFTER_START),r.collapse(!0));if(E=t){E=q.range;if("text"==q.type&&q.inlineStylesRoot){r= -q.inlineStylesPeak;v=r.getDocument().createText("{cke-peak}");for(aa=q.inlineStylesRoot.getParent();!r.equals(aa);)v=v.appendTo(r.clone()),r=r.getParent();t=v.getOuterHtml().split("{cke-peak}").join(t)}r=q.blockLimit.getName();if(/^\s+|\s+$/.test(t)&&"span"in CKEDITOR.dtd[r]){var ba='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';t=ba+t+ba}t=q.editor.dataProcessor.toHtml(t,{context:null,fixForBody:!1,protectedWhitespaces:!!ba,dontFilter:q.dontFilter,filter:q.editor.activeFilter,enterMode:q.editor.activeEnterMode}); -r=E.document.createElement("body");r.setHtml(t);ba&&(r.getFirst().remove(),r.getLast().remove());if((ba=E.startPath().block)&&(1!=ba.getChildCount()||!ba.getBogus()))a:{var R;if(1==r.getChildCount()&&a(R=r.getFirst())&&R.is(w)&&!R.hasAttribute("contenteditable")){ba=R.getElementsByTag("*");E=0;for(aa=ba.count();E<aa;E++)if(v=ba.getItem(E),!v.is(p))break a;R.moveChildren(R.getParent(1));R.remove()}}q.dataWrapper=r;E=t}if(E){R=q.range;E=R.document;r=q.blockLimit;aa=0;var U,ba=[],N,V;t=L=0;var Y,v=R.startContainer; -ca=q.endPath.elements[0];var fa,u=ca.getPosition(v),z=!!ca.getCommonAncestor(v)&&u!=CKEDITOR.POSITION_IDENTICAL&&!(u&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED),v=c(q.dataWrapper,q);for(n(v,R);aa<v.length;aa++){u=v[aa];if(y=u.isLineBreak)y=R,F=r,Z=T=void 0,u.hasBlockSibling?y=1:(T=y.startContainer.getAscendant(m.$block,1))&&T.is({div:1,p:1})?(Z=T.getPosition(F),Z==CKEDITOR.POSITION_IDENTICAL||Z==CKEDITOR.POSITION_CONTAINS?y=0:(F=y.splitElement(T),y.moveToPosition(F,CKEDITOR.POSITION_AFTER_START), -y=1)):y=0;if(y)t=0<aa;else{y=R.startPath();!u.isBlock&&k(q.editor,y.block,y.blockLimit)&&(V=l(q.editor))&&(V=E.createElement(V),V.appendBogus(),R.insertNode(V),CKEDITOR.env.needsBrFiller&&(U=V.getBogus())&&U.remove(),R.moveToPosition(V,CKEDITOR.POSITION_BEFORE_END));if((y=R.startPath().block)&&!y.equals(N)){if(U=y.getBogus())U.remove(),ba.push(y);N=y}u.firstNotAllowed&&(L=1);if(L&&u.isElement){y=R.startContainer;for(F=null;y&&!m[y.getName()][u.name];){if(y.equals(r)){y=null;break}F=y;y=y.getParent()}if(y)F&& -(Y=R.splitElement(F),q.zombies.push(Y),q.zombies.push(F));else{F=r.getName();fa=!aa;y=aa==v.length-1;F=b(u.node,F);T=[];Z=F.length;for(var da=0,ha=void 0,ga=0,ja=-1;da<Z;da++)ha=F[da]," "==ha?(ga||fa&&!da||(T.push(new CKEDITOR.dom.text(" ")),ja=T.length),ga=1):(T.push(ha),ga=0);y&&ja==T.length&&T.pop();fa=T}}if(fa){for(;y=fa.pop();)R.insertNode(y);fa=0}else R.insertNode(u.node);u.lastNotAllowed&&aa<v.length-1&&((Y=z?ca:Y)&&R.setEndAt(Y,CKEDITOR.POSITION_AFTER_START),L=0);R.collapse()}}1!=v.length? -U=!1:(U=v[0],U=U.isElement&&"false"==U.node.getAttribute("contenteditable"));U&&(t=!0,y=v[0].node,R.setStartAt(y,CKEDITOR.POSITION_BEFORE_START),R.setEndAt(y,CKEDITOR.POSITION_AFTER_END));q.dontMoveCaret=t;q.bogusNeededBlocks=ba}U=q.range;var ia;Y=q.bogusNeededBlocks;for(fa=U.createBookmark();N=q.zombies.pop();)N.getParent()&&(V=U.clone(),V.moveToElementEditStart(N),V.removeEmptyBlocksAtEnd());if(Y)for(;N=Y.pop();)CKEDITOR.env.needsBrFiller?N.appendBogus():N.append(U.document.createText(" "));for(;N= -q.mergeCandidates.pop();)N.mergeSiblings();U.moveToBookmark(fa);if(!q.dontMoveCaret){for(N=e(U);N&&a(N)&&!N.is(m.$empty);){if(N.isBlockBoundary())U.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END);else{if(g(N)&&N.getHtml().match(/(\s| )$/g)){ia=null;break}ia=U.clone();ia.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}N=N.getLast(f)}ia&&U.moveToRange(ia)}}}}();u=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a,c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)}; -c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return c}function c(a,d,b){d=a.getDocument().createElement(d);a.append(d,b);return d}function d(a){var c=a.count(),b;for(c;0<c--;)b=a.getItem(c),CKEDITOR.tools.trim(b.getHtml())||(b.appendBogus(),CKEDITOR.env.ie&&9>CKEDITOR.env.version&&b.getChildCount()&&b.getFirst().remove())}return function(b){var e=b.startContainer,f=e.getAscendant("table",1),g=!1;d(f.getElementsByTag("td"));d(f.getElementsByTag("th"));f=b.clone();f.setStart(e,0);f= -a(f).lastBackward();f||(f=b.clone(),f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),g=!0);f||(f=e);f.is("table")?(b.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=c(f,"tr",g)),f.is("tr")&&(f=c(f,f.getParent().is("thead")?"th":"td",g)),(e=f.getBogus())&&e.remove(),b.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();t=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a, -c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$listItem)};return c}return function(c){var d=c.startContainer,b=!1,e;e=c.clone();e.setStart(d,0);e=a(e).lastBackward();e||(e=c.clone(),e.setEndAt(d,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),b=!0);e||(e=d);e.is(CKEDITOR.dtd.$list)?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.collapse(!0),e.remove()): -((d=e.getBogus())&&d.remove(),c.moveToPosition(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),c.select())}}();y={eol:{detect:function(a,c){var d=a.range,b=d.clone(),e=d.clone(),f=new CKEDITOR.dom.elementPath(d.startContainer,c),g=new CKEDITOR.dom.elementPath(d.endContainer,c);b.collapse(1);e.collapse();f.block&&b.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(d.setStartAfter(f.block),a.prependEolBr=1);g.block&&e.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(d.setEndBefore(g.block), -a.appendEolBr=1)},fix:function(a,c){var d=c.getDocument(),b;a.appendEolBr&&(b=this.createEolBr(d),a.fragment.append(b));!a.prependEolBr||b&&!b.getPrevious()||a.fragment.append(this.createEolBr(d),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var c=a.range.getBoundaryNodes(),d=c.startNode,c=c.endNode;!c||!r(c)||d&&d.equals(c)||a.range.setEndBefore(c)}},tree:{rebuild:function(a,c){var d=a.range,b=d.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(b, -c),f=new CKEDITOR.dom.elementPath(d.startContainer,c),d=new CKEDITOR.dom.elementPath(d.endContainer,c),g;b.type==CKEDITOR.NODE_TEXT&&(b=b.getParent());if(e.blockLimit.is({tr:1,table:1})){var h=e.contains("table").getParent();g=function(a){return!a.equals(h)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),d=d.contains(CKEDITOR.dtd.$list),!f.equals(d))){var n=e.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(n)}}g||(g=function(a){return!a.equals(e.block)&& -!a.equals(e.blockLimit)});this.rebuildFragment(a,c,b,g)},rebuildFragment:function(a,c,d,b){for(var e;d&&!d.equals(c)&&b(d);)e=d.clone(0,1),a.fragment.appendTo(e),a.fragment=e,d=d.getParent()}},cell:{shrink:function(a){a=a.range;var c=a.startContainer,d=a.endContainer,b=a.startOffset,e=a.endOffset;c.type==CKEDITOR.NODE_ELEMENT&&c.equals(d)&&c.is("tr")&&++b==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};v=function(){function a(c,d){var b=c.getParent();if(b.is(CKEDITOR.dtd.$inline))c[d?"insertBefore":"insertAfter"](b)} -function c(d,b,e){a(b);a(e,1);for(var f;f=e.getNext();)f.insertAfter(b),b=f;z(d)&&d.remove()}function d(a,c){var b=new CKEDITOR.dom.range(a);b.setStartAfter(c.startNode);b.setEndBefore(c.endNode);return b}return{list:{detectMerge:function(a,c){var b=d(c,a.bookmark),e=b.startPath(),f=b.endPath(),g=e.contains(CKEDITOR.dtd.$list),h=f.contains(CKEDITOR.dtd.$list);a.mergeList=g&&h&&g.getParent().equals(h.getParent())&&!g.equals(h);a.mergeListItems=e.block&&f.block&&e.block.is(CKEDITOR.dtd.$listItem)&& -f.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)b=b.clone(),b.setStartBefore(a.bookmark.startNode),b.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=b.createBookmark()},merge:function(a,d){if(a.mergeListBookmark){var b=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(b,d),g=new CKEDITOR.dom.elementPath(e,d);if(a.mergeList){var h=f.contains(CKEDITOR.dtd.$list),n=g.contains(CKEDITOR.dtd.$list);h.equals(n)||(n.moveChildren(h),n.remove())}a.mergeListItems&& -(f=f.contains(CKEDITOR.dtd.$listItem),g=g.contains(CKEDITOR.dtd.$listItem),f.equals(g)||c(g,b,e));b.remove();e.remove()}}},block:{detectMerge:function(a,c){if(!a.tableContentsRanges&&!a.mergeListBookmark){var d=new CKEDITOR.dom.range(c);d.setStartBefore(a.bookmark.startNode);d.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=d.createBookmark()}},merge:function(a,d){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var b=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(b, -d),g=new CKEDITOR.dom.elementPath(e,d),f=f.block,g=g.block;f&&g&&!f.equals(g)&&c(g,b,e);b.remove();e.remove()}}},table:function(){function a(d){var e=[],f,g=new CKEDITOR.dom.walker(d),h=d.startPath().contains(b),n=d.endPath().contains(b),k={};g.guard=function(a,g){if(a.type==CKEDITOR.NODE_ELEMENT){var l="visited_"+(g?"out":"in");if(a.getCustomData(l))return;CKEDITOR.dom.element.setMarker(k,a,l,1)}if(g&&h&&a.equals(h))f=d.clone(),f.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),e.push(f);else if(!g&&n&& -a.equals(n))f=d.clone(),f.setStartAt(n,CKEDITOR.POSITION_AFTER_START),e.push(f);else{if(l=!g)l=a.type==CKEDITOR.NODE_ELEMENT&&a.is(b)&&(!h||c(a,h))&&(!n||c(a,n));if(!l&&(l=g))if(a.is(b))var l=h&&h.getAscendant("table",!0),m=n&&n.getAscendant("table",!0),q=a.getAscendant("table",!0),l=l&&l.contains(q)||m&&m.contains(q);else l=void 0;l&&(f=d.clone(),f.selectNodeContents(a),e.push(f))}};g.lastForward();CKEDITOR.dom.element.clearAllMarkers(k);return e}function c(a,d){var b=CKEDITOR.POSITION_CONTAINS+ -CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(d);return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&b)}var b={td:1,th:1,caption:1};return{detectPurge:function(a){var c=a.range,d=c.clone();d.enlarge(CKEDITOR.ENLARGE_ELEMENT);var d=new CKEDITOR.dom.walker(d),e=0;d.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(b)&&++e};d.checkForward();if(1<e){var d=c.startPath().contains("table"),f=c.endPath().contains("table");d&&f&&c.checkBoundaryOfElement(d,CKEDITOR.START)&&c.checkBoundaryOfElement(f, -CKEDITOR.END)&&(c=a.range.clone(),c.setStartBefore(d),c.setEndAfter(f),a.purgeTableBookmark=c.createBookmark())}},detectRanges:function(e,f){var g=d(f,e.bookmark),h=g.clone(),n,k,l=g.getCommonAncestor();l.is(CKEDITOR.dtd.$tableContent)&&!l.is(b)&&(l=l.getAscendant("table",!0));k=l;l=new CKEDITOR.dom.elementPath(g.startContainer,k);k=new CKEDITOR.dom.elementPath(g.endContainer,k);l=l.contains("table");k=k.contains("table");if(l||k)l&&k&&c(l,k)?(e.tableSurroundingRange=h,h.setStartAt(l,CKEDITOR.POSITION_AFTER_END), -h.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),h=g.clone(),h.setEndAt(l,CKEDITOR.POSITION_AFTER_END),n=g.clone(),n.setStartAt(k,CKEDITOR.POSITION_BEFORE_START),n=a(h).concat(a(n))):l?k||(e.tableSurroundingRange=h,h.setStartAt(l,CKEDITOR.POSITION_AFTER_END),g.setEndAt(l,CKEDITOR.POSITION_AFTER_END)):(e.tableSurroundingRange=h,h.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),g.setStartAt(k,CKEDITOR.POSITION_AFTER_START)),e.tableContentsRanges=n?n:a(g)},deleteRanges:function(a){for(var c;c=a.tableContentsRanges.pop();)c.extractContents(), -z(c.startContainer)&&c.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var c=a.doc,d=a.range.clone(),c=c.createElement("p");c.insertBefore(a.purgeTableBookmark.startNode);d.moveToBookmark(a.purgeTableBookmark);d.deleteContents();a.range.moveToPosition(c,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))}, -fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,c){var d=c.startPath(),b;k(a,d.block,d.blockLimit)&&(b=l(a))&&(b=c.document.createElement(b),b.appendBogus(),c.insertNode(b),c.moveToPosition(b,CKEDITOR.POSITION_AFTER_START))}}}()})();(function(){function b(a){return CKEDITOR.plugins.widget&&CKEDITOR.plugins.widget.isDomWidget(a)}function h(a,c){if(0===a.length||b(a[0].getEnclosedNode()))return!1;var d,e;if((d= -!c&&1===a.length)&&!(d=a[0].collapsed)){var f=a[0];d=f.startContainer.getAscendant({td:1,th:1},!0);var g=f.endContainer.getAscendant({td:1,th:1},!0);e=CKEDITOR.tools.trim;d&&d.equals(g)&&!d.findOne("td, th, tr, tbody, table")?(f=f.cloneContents(),d=f.getFirst()?e(f.getFirst().getText())!==e(d.getText()):!0):d=!1}if(d)return!1;for(e=0;e<a.length;e++)if(d=a[e]._getTableElement(),!d)return!1;return!0}function g(a){function c(a){a=a.find("td, th");var d=[],b;for(b=0;b<a.count();b++)d.push(a.getItem(b)); -return d}var d=[],b,e;for(e=0;e<a.length;e++)b=a[e]._getTableElement(),b.is&&b.is({td:1,th:1})?d.push(b):d=d.concat(c(b));return d}function f(a){a=g(a);var c="",d=[],b,e;for(e=0;e<a.length;e++)b&&!b.equals(a[e].getAscendant("tr"))?(c+=d.join("\t")+"\n",b=a[e].getAscendant("tr"),d=[]):0===e&&(b=a[e].getAscendant("tr")),d.push(a[e].getText());return c+=d.join("\t")}function a(a){var c=this.root.editor,d=c.getSelection(1);this.reset();v=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null, -0);d.selectRanges([a[0]]);d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=f(a);d.nativeSel=null;this.isFake=1;this.rev=u++;c._.fakeSelection=this;v=!1;this.root.fire("selectionchange")}function m(){var a=this._.fakeSelection,c;if(a){c=this.getSelection(1);var d;if(!(d=!c)&&(d=!c.isHidden())){d=a;var e=c.getRanges(),f=d.getRanges(),g=e.length&&e[0]._getTableElement()&&e[0]._getTableElement().getAscendant("table", -!0),n=f.length&&f[0]._getTableElement()&&f[0]._getTableElement().getAscendant("table",!0),k=1===e.length&&e[0]._getTableElement()&&e[0]._getTableElement().is("table"),l=1===f.length&&f[0]._getTableElement()&&f[0]._getTableElement().is("table");if(b(d.getSelectedElement()))d=!1;else{var m=1===e.length&&e[0].collapsed,f=h(e,!!CKEDITOR.env.webkit)&&h(f);g=g&&n?g.equals(n)||n.contains(g):!1;g&&(m||f)?(k&&!l&&d.selectRanges(e),d=!0):d=!1}d=!d}d&&(a.reset(),a=0)}if(!a&&(a=c||this.getSelection(1),!a||a.getType()== -CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",a);c=this.elementPath();c.compare(this._.selectionPreviousPath)||(d=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(c.blockLimit),!CKEDITOR.env.webkit&&!CKEDITOR.env.gecko||d||(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath=c,this.fire("selectionChange",{selection:a,path:c}))}function k(){B=!0;x||(l.call(this),x=CKEDITOR.tools.setTimeout(l,200,this))}function l(){x=null;B&&(CKEDITOR.tools.setTimeout(m, -0,this),B=!1)}function d(a){return D(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function e(a){function c(d,b){return d&&d.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(b?"End":"Start")](d):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var b=a.startContainer,e=a.getPreviousNode(d,null,b),f=a.getNextNode(d,null,b);return c(e)||c(f,1)||!(e||f||b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()&&b.getBogus())?!0:!1}function c(a){n(a,!1);var c=a.getDocument().createText(t); -a.setCustomData("cke-fillingChar",c);return c}function n(a,c){var d=a&&a.removeCustomData("cke-fillingChar");if(d){if(!1!==c){var b=a.getDocument().getSelection().getNative(),e=b&&"None"!=b.type&&b.getRangeAt(0),f=t.length;if(d.getLength()>f&&e&&e.intersectsNode(d.$)){var g=[{node:b.anchorNode,offset:b.anchorOffset},{node:b.focusNode,offset:b.focusOffset}];b.anchorNode==d.$&&b.anchorOffset>f&&(g[0].offset-=f);b.focusNode==d.$&&b.focusOffset>f&&(g[1].offset-=f)}}d.setText(w(d.getText(),1));g&&(d=a.getDocument().$, -b=d.getSelection(),d=d.createRange(),d.setStart(g[0].node,g[0].offset),d.collapse(!0),b.removeAllRanges(),b.addRange(d),b.extend(g[1].node,g[1].offset))}}function w(a,c){return c?a.replace(y,function(a,c){return c?" ":""}):a.replace(t,"")}function z(a,c){var d=c&&CKEDITOR.tools.htmlEncode(c)||"\x26nbsp;",d=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;")+ -'"\x3e'+d+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(d);var b=a.getSelection(1),e=a.createRange(),f=b.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(d,CKEDITOR.POSITION_AFTER_START);e.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);b.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=d}function r(a){var c={37:1,39:1,8:1,46:1};return function(d){var b=d.data.getKeystroke();if(c[b]){var e=a.getSelection().getRanges(), -f=e[0];1==e.length&&f.collapsed&&(b=f[38>b?"getPreviousEditableNode":"getNextEditableNode"]())&&b.type==CKEDITOR.NODE_ELEMENT&&"false"==b.getAttribute("contenteditable")&&(a.getSelection().fake(b),d.data.preventDefault(),d.cancel())}}}function p(a){for(var c=0;c<a.length;c++){var d=a[c];d.getCommonAncestor().isReadOnly()&&a.splice(c,1);if(!d.collapsed){if(d.startContainer.isReadOnly())for(var b=d.startContainer,e;b&&!((e=b.type==CKEDITOR.NODE_ELEMENT)&&b.is("body")||!b.isReadOnly());)e&&"false"== -b.getAttribute("contentEditable")&&d.setStartAfter(b),b=b.getParent();b=d.startContainer;e=d.endContainer;var f=d.startOffset,g=d.endOffset,h=d.clone();b&&b.type==CKEDITOR.NODE_TEXT&&(f>=b.getLength()?h.setStartAfter(b):h.setStartBefore(b));e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));b=new CKEDITOR.dom.walker(h);b.evaluator=function(b){if(b.type==CKEDITOR.NODE_ELEMENT&&b.isReadOnly()){var e=d.clone();d.setEndBefore(b);d.collapsed&&a.splice(c--,1);b.getPosition(h.endContainer)& -CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(b),e.collapsed||a.splice(c+1,0,e));return!0}return!1};b.next()}}return a}var q="function"!=typeof window.getSelection,u=1,t=CKEDITOR.tools.repeat("",7),y=new RegExp(t+"( )?","g"),v,x,B,D=CKEDITOR.dom.walker.invisible(1),A=function(){function a(c){return function(a){var d=a.editor.createRange();d.moveToClosestEditablePosition(a.selected,c)&&a.editor.getSelection().selectRanges([d]);return!1}}function c(a){return function(c){var d=c.editor,b=d.createRange(), -e;if(!d.readOnly)return(e=b.moveToClosestEditablePosition(c.selected,a))||(e=b.moveToClosestEditablePosition(c.selected,!a)),e&&d.getSelection().selectRanges([b]),d.fire("saveSnapshot"),c.selected.remove(),e||(b.moveToElementEditablePosition(d.editable()),d.getSelection().selectRanges([b])),d.fire("saveSnapshot"),!1}}var d=a(),b=a(1);return{37:d,38:d,39:b,40:b,8:c(),46:c(1)}}();CKEDITOR.on("instanceCreated",function(a){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=a.editor;d.on("contentDom", -function(){function a(){t=new CKEDITOR.dom.selection(d.getSelection());t.lock()}function c(){f.removeListener("mouseup",c);l.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,d=a.createRange();"None"!=a.type&&d.parentElement()&&d.parentElement().ownerDocument==e.$&&d.select()}function b(a){a=a.getRanges()[0];return a?(a=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")},!0))&&"false"===a.getAttribute("contenteditable")? -a:null:null}var e=d.document,f=CKEDITOR.document,g=d.editable(),h=e.getBody(),l=e.getDocumentElement(),w=g.isInline(),p,t;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();0!==p&&(a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$&&(a=d.createRange(),a.moveToElementEditStart(g),a.select())},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(p&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){p=d._.previousActive&& -d._.previousActive.equals(e.getActive());var a=null!=d._.previousScrollTop&&d._.previousScrollTop!=g.$.scrollTop;CKEDITOR.env.webkit&&p&&a&&(g.$.scrollTop=d._.previousScrollTop)}d.unlockSelection(p);p=0},null,null,-1);g.attachListener(g,"mousedown",function(){p=0});if(CKEDITOR.env.ie||CKEDITOR.env.gecko||w)q?g.attachListener(g,"beforedeactivate",a,null,null,-1):g.attachListener(d,"selectionCheck",a,null,null,-1),g.attachListener(g,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusout":"blur",function(){var a= -t&&(t.isFake||2>t.getRanges());CKEDITOR.env.gecko&&!w&&a||(d.lockSelection(t),p=1)},null,null,-1),g.attachListener(g,"mousedown",function(){p=0});if(CKEDITOR.env.ie&&!w){var u;g.attachListener(g,"mousedown",function(a){2==a.data.$.button&&((a=d.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(u=d.window.getScrollPosition()))});g.attachListener(g,"mouseup",function(a){2==a.data.$.button&&u&&(d.document.$.documentElement.scrollLeft=u.x,d.document.$.documentElement.scrollTop=u.y);u=null}); -if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var v,B;l.on("mousedown",function(a){function c(a){a=a.data.$;if(v){var d=h.$.createTextRange();try{d.moveToPoint(a.clientX,a.clientY)}catch(b){}v.setEndPoint(0>B.compareEndPoints("StartToStart",d)?"EndToEnd":"StartToStart",d);v.select()}}function d(){l.removeListener("mousemove",c);f.removeListener("mouseup",d);l.removeListener("mouseup",d);v.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<l.$.clientHeight&& -a.$.x<l.$.clientWidth){v=h.$.createTextRange();try{v.moveToPoint(a.$.clientX,a.$.clientY)}catch(b){}B=v.duplicate();l.on("mousemove",c);f.on("mouseup",d);l.on("mouseup",d)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)l.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",c),l.on("mouseup",c))})}}g.attachListener(g,"selectionchange",m,d);g.attachListener(g,"keyup",k,d);g.attachListener(g,"touchstart",k,d);g.attachListener(g,"touchend",k,d);CKEDITOR.env.ie&&g.attachListener(g, -"keydown",function(a){var c=this.getSelection(1),d=b(c);d&&!d.equals(g)&&(c.selectElement(d),a.data.preventDefault())},d);g.attachListener(g,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(w&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var y;g.attachListener(g,"mousedown",function(){y=1});g.attachListener(e.getDocumentElement(),"mouseup",function(){y&&k.call(d);y=0})}else g.attachListener(CKEDITOR.env.ie?g:e.getDocumentElement(), -"mouseup",k,d);CKEDITOR.env.webkit&&g.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:g.hasFocus&&n(g)}},null,null,-1);g.attachListener(g,"keydown",r(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&c()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy",c,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection; +(d=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var f=CKEDITOR.tools.getNextId(),b=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+f+'" class\x3d"cke_voice_label"\x3e'+b+"\x3c/span\x3e");d.append(b);a.changeAttr("aria-describedby",f)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");n=CKEDITOR.dom.walker.whitespaces(!0);w=CKEDITOR.dom.walker.bookmark(!1,!0);v=CKEDITOR.dom.walker.empty(); +p=CKEDITOR.dom.walker.bogus();r=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;q=function(){function a(c){return c.type==CKEDITOR.NODE_ELEMENT}function d(c,b){var f,e,g,h,n=[],l=b.range.startContainer;f=b.range.startPath();for(var l=m[l.getName()],k=0,q=c.getChildren(),r=q.count(),w=-1,t=-1,x=0,G=f.contains(m.$list);k<r;++k)f=q.getItem(k),a(f)?(g=f.getName(),G&&g in CKEDITOR.dtd.$list?n=n.concat(d(f,b)):(h=!!l[g], +"br"!=g||!f.data("cke-eol")||k&&k!=r-1||(x=(e=k?n[k-1].node:q.getItem(k+1))&&(!a(e)||!e.is("br")),e=e&&a(e)&&m.$block[e.getName()]),-1!=w||h||(w=k),h||(t=k),n.push({isElement:1,isLineBreak:x,isBlock:f.isBlockBoundary(),hasBlockSibling:e,node:f,name:g,allowed:h}),e=x=0)):n.push({isElement:0,node:f,allowed:1});-1<w&&(n[w].firstNotAllowed=1);-1<t&&(n[t].lastNotAllowed=1);return n}function b(c,d){var f=[],e=c.getChildren(),g=e.count(),h,n=0,l=m[d],k=!c.is(m.$inline)||c.is("br");for(k&&f.push(" ");n<g;n++)h= +e.getItem(n),a(h)&&!h.is(l)?f=f.concat(b(h,d)):f.push(h);k&&f.push(" ");return f}function f(c){return a(c.startContainer)&&c.startContainer.getChild(c.startOffset-1)}function g(c){return c&&a(c)&&(c.is(m.$removeEmpty)||c.is("a")&&!c.isBlockBoundary())}function h(c,d,b,f){var e=c.clone(),g,n;e.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);(g=(new CKEDITOR.dom.walker(e)).next())&&a(g)&&q[g.getName()]&&(n=g.getPrevious())&&a(n)&&!n.getParent().equals(c.startContainer)&&b.contains(n)&&f.contains(g)&&g.isIdentical(n)&& +(g.moveChildren(n),g.remove(),h(c,d,b,f))}function n(c,d){function b(c,d){if(d.isBlock&&d.isElement&&!d.node.is("br")&&a(c)&&c.is("br"))return c.remove(),1}var f=d.endContainer.getChild(d.endOffset),e=d.endContainer.getChild(d.endOffset-1);f&&b(f,c[c.length-1]);e&&b(e,c[0])&&(d.setEnd(d.endContainer,d.endOffset-1),d.collapse())}var m=CKEDITOR.dtd,q={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},r={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},w=CKEDITOR.tools.extend({}, +m.$inline);delete w.br;return function(q,D,K,t){var x=q.editor,p=!1;"unfiltered_html"==D&&(D="html",p=!0);if(!t.checkReadOnly()){var y=(new CKEDITOR.dom.elementPath(t.startContainer,t.root)).blockLimit||t.root;D={type:D,dontFilter:p,editable:q,editor:x,range:t,blockLimit:y,mergeCandidates:[],zombies:[]};var p=D.range,y=D.mergeCandidates,v="html"===D.type,z,F,T,Z,ca,aa;"text"==D.type&&p.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(F=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e", +p.document),p.insertNode(F),p.setStartAfter(F));T=new CKEDITOR.dom.elementPath(p.startContainer);D.endPath=Z=new CKEDITOR.dom.elementPath(p.endContainer);if(!p.collapsed){z=Z.block||Z.blockLimit;var da=p.getCommonAncestor();z&&!z.equals(da)&&!z.contains(da)&&p.checkEndOfBlock()&&D.zombies.push(z);p.deleteContents()}for(;(ca=f(p))&&a(ca)&&ca.isBlockBoundary()&&T.contains(ca);)p.moveToPosition(ca,CKEDITOR.POSITION_BEFORE_END);h(p,D.blockLimit,T,Z);F&&(p.setEndBefore(F),p.collapse(),F.remove());F=p.startPath(); +if(z=F.contains(g,!1,1))aa=p.splitElement(z),D.inlineStylesRoot=z,D.inlineStylesPeak=F.lastElement;F=p.createBookmark();v&&(c(z),c(aa));(z=F.startNode.getPrevious(e))&&a(z)&&g(z)&&y.push(z);(z=F.startNode.getNext(e))&&a(z)&&g(z)&&y.push(z);for(z=F.startNode;(z=z.getParent())&&g(z);)y.push(z);p.moveToBookmark(F);x.enterMode===CKEDITOR.ENTER_DIV&&""===x.getData(!0)&&((x=q.getFirst())&&x.remove(),t.setStartAt(q,CKEDITOR.POSITION_AFTER_START),t.collapse(!0));if(q=K){q=D.range;if("text"==D.type&&D.inlineStylesRoot){t= +D.inlineStylesPeak;x=t.getDocument().createText("{cke-peak}");for(aa=D.inlineStylesRoot.getParent();!t.equals(aa);)x=x.appendTo(t.clone()),t=t.getParent();K=x.getOuterHtml().split("{cke-peak}").join(K)}t=D.blockLimit.getName();if(/^\s+|\s+$/.test(K)&&"span"in CKEDITOR.dtd[t]){var ba='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';K=ba+K+ba}K=D.editor.dataProcessor.toHtml(K,{context:null,fixForBody:!1,protectedWhitespaces:!!ba,dontFilter:D.dontFilter,filter:D.editor.activeFilter,enterMode:D.editor.activeEnterMode}); +t=q.document.createElement("body");t.setHtml(K);ba&&(t.getFirst().remove(),t.getLast().remove());if((ba=q.startPath().block)&&(1!=ba.getChildCount()||!ba.getBogus()))a:{var S;if(1==t.getChildCount()&&a(S=t.getFirst())&&S.is(r)&&!S.hasAttribute("contenteditable")){ba=S.getElementsByTag("*");q=0;for(aa=ba.count();q<aa;q++)if(x=ba.getItem(q),!x.is(w))break a;S.moveChildren(S.getParent(1));S.remove()}}D.dataWrapper=t;q=K}if(q){S=D.range;q=S.document;t=D.blockLimit;aa=0;var V,ba=[],U,Q;K=F=0;var P,x=S.startContainer; +ca=D.endPath.elements[0];var ga,p=ca.getPosition(x),y=!!ca.getCommonAncestor(x)&&p!=CKEDITOR.POSITION_IDENTICAL&&!(p&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED),x=d(D.dataWrapper,D);for(n(x,S);aa<x.length;aa++){p=x[aa];if(v=p.isLineBreak)v=S,z=t,Z=T=void 0,p.hasBlockSibling?v=1:(T=v.startContainer.getAscendant(m.$block,1))&&T.is({div:1,p:1})?(Z=T.getPosition(z),Z==CKEDITOR.POSITION_IDENTICAL||Z==CKEDITOR.POSITION_CONTAINS?v=0:(z=v.splitElement(T),v.moveToPosition(z,CKEDITOR.POSITION_AFTER_START), +v=1)):v=0;if(v)K=0<aa;else{v=S.startPath();!p.isBlock&&l(D.editor,v.block,v.blockLimit)&&(Q=k(D.editor))&&(Q=q.createElement(Q),Q.appendBogus(),S.insertNode(Q),CKEDITOR.env.needsBrFiller&&(V=Q.getBogus())&&V.remove(),S.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END));if((v=S.startPath().block)&&!v.equals(U)){if(V=v.getBogus())V.remove(),ba.push(v);U=v}p.firstNotAllowed&&(F=1);if(F&&p.isElement){v=S.startContainer;for(z=null;v&&!m[v.getName()][p.name];){if(v.equals(t)){v=null;break}z=v;v=v.getParent()}if(v)z&& +(P=S.splitElement(z),D.zombies.push(P),D.zombies.push(z));else{z=t.getName();ga=!aa;v=aa==x.length-1;z=b(p.node,z);T=[];Z=z.length;for(var da=0,ia=void 0,ha=0,fa=-1;da<Z;da++)ia=z[da]," "==ia?(ha||ga&&!da||(T.push(new CKEDITOR.dom.text(" ")),fa=T.length),ha=1):(T.push(ia),ha=0);v&&fa==T.length&&T.pop();ga=T}}if(ga){for(;v=ga.pop();)S.insertNode(v);ga=0}else S.insertNode(p.node);p.lastNotAllowed&&aa<x.length-1&&((P=y?ca:P)&&S.setEndAt(P,CKEDITOR.POSITION_AFTER_START),F=0);S.collapse()}}1!=x.length? +V=!1:(V=x[0],V=V.isElement&&"false"==V.node.getAttribute("contenteditable"));V&&(K=!0,v=x[0].node,S.setStartAt(v,CKEDITOR.POSITION_BEFORE_START),S.setEndAt(v,CKEDITOR.POSITION_AFTER_END));D.dontMoveCaret=K;D.bogusNeededBlocks=ba}V=D.range;var ja;P=D.bogusNeededBlocks;for(ga=V.createBookmark();U=D.zombies.pop();)U.getParent()&&(Q=V.clone(),Q.moveToElementEditStart(U),Q.removeEmptyBlocksAtEnd());if(P)for(;U=P.pop();)CKEDITOR.env.needsBrFiller?U.appendBogus():U.append(V.document.createText(" "));for(;U= +D.mergeCandidates.pop();)U.mergeSiblings();V.moveToBookmark(ga);if(!D.dontMoveCaret){for(U=f(V);U&&a(U)&&!U.is(m.$empty);){if(U.isBlockBoundary())V.moveToPosition(U,CKEDITOR.POSITION_BEFORE_END);else{if(g(U)&&U.getHtml().match(/(\s| )$/g)){ja=null;break}ja=V.clone();ja.moveToPosition(U,CKEDITOR.POSITION_BEFORE_END)}U=U.getLast(e)}ja&&V.moveToRange(ja)}}}}();x=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a,c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)}; +c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return c}function c(a,d,b){d=a.getDocument().createElement(d);a.append(d,b);return d}function d(a){var c=a.count(),b;for(c;0<c--;)b=a.getItem(c),CKEDITOR.tools.trim(b.getHtml())||(b.appendBogus(),CKEDITOR.env.ie&&9>CKEDITOR.env.version&&b.getChildCount()&&b.getFirst().remove())}return function(b){var f=b.startContainer,e=f.getAscendant("table",1),g=!1;d(e.getElementsByTag("td"));d(e.getElementsByTag("th"));e=b.clone();e.setStart(f,0);e= +a(e).lastBackward();e||(e=b.clone(),e.setEndAt(f,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),g=!0);e||(e=f);e.is("table")?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):(e.is({tbody:1,thead:1,tfoot:1})&&(e=c(e,"tr",g)),e.is("tr")&&(e=c(e,e.getParent().is("thead")?"th":"td",g)),(f=e.getBogus())&&f.remove(),b.moveToPosition(e,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();t=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a, +c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$listItem)};return c}return function(c){var d=c.startContainer,b=!1,f;f=c.clone();f.setStart(d,0);f=a(f).lastBackward();f||(f=c.clone(),f.setEndAt(d,CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),b=!0);f||(f=d);f.is(CKEDITOR.dtd.$list)?(c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),c.collapse(!0),f.remove()): +((d=f.getBogus())&&d.remove(),c.moveToPosition(f,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),c.select())}}();z={eol:{detect:function(a,c){var d=a.range,b=d.clone(),f=d.clone(),e=new CKEDITOR.dom.elementPath(d.startContainer,c),g=new CKEDITOR.dom.elementPath(d.endContainer,c);b.collapse(1);f.collapse();e.block&&b.checkBoundaryOfElement(e.block,CKEDITOR.END)&&(d.setStartAfter(e.block),a.prependEolBr=1);g.block&&f.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(d.setEndBefore(g.block), +a.appendEolBr=1)},fix:function(a,c){var d=c.getDocument(),b;a.appendEolBr&&(b=this.createEolBr(d),a.fragment.append(b));!a.prependEolBr||b&&!b.getPrevious()||a.fragment.append(this.createEolBr(d),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var c=a.range.getBoundaryNodes(),d=c.startNode,c=c.endNode;!c||!p(c)||d&&d.equals(c)||a.range.setEndBefore(c)}},tree:{rebuild:function(a,c){var d=a.range,b=d.getCommonAncestor(),f=new CKEDITOR.dom.elementPath(b, +c),e=new CKEDITOR.dom.elementPath(d.startContainer,c),d=new CKEDITOR.dom.elementPath(d.endContainer,c),g;b.type==CKEDITOR.NODE_TEXT&&(b=b.getParent());if(f.blockLimit.is({tr:1,table:1})){var h=f.contains("table").getParent();g=function(a){return!a.equals(h)}}else if(f.block&&f.block.is(CKEDITOR.dtd.$listItem)&&(e=e.contains(CKEDITOR.dtd.$list),d=d.contains(CKEDITOR.dtd.$list),!e.equals(d))){var n=f.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(n)}}g||(g=function(a){return!a.equals(f.block)&& +!a.equals(f.blockLimit)});this.rebuildFragment(a,c,b,g)},rebuildFragment:function(a,c,d,b){for(var f;d&&!d.equals(c)&&b(d);)f=d.clone(0,1),a.fragment.appendTo(f),a.fragment=f,d=d.getParent()}},cell:{shrink:function(a){a=a.range;var c=a.startContainer,d=a.endContainer,b=a.startOffset,f=a.endOffset;c.type==CKEDITOR.NODE_ELEMENT&&c.equals(d)&&c.is("tr")&&++b==f&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};y=function(){function a(c,d){var b=c.getParent();if(b.is(CKEDITOR.dtd.$inline))c[d?"insertBefore":"insertAfter"](b)} +function c(d,b,f){a(b);a(f,1);for(var e;e=f.getNext();)e.insertAfter(b),b=e;v(d)&&d.remove()}function d(a,c){var b=new CKEDITOR.dom.range(a);b.setStartAfter(c.startNode);b.setEndBefore(c.endNode);return b}return{list:{detectMerge:function(a,c){var b=d(c,a.bookmark),f=b.startPath(),e=b.endPath(),g=f.contains(CKEDITOR.dtd.$list),h=e.contains(CKEDITOR.dtd.$list);a.mergeList=g&&h&&g.getParent().equals(h.getParent())&&!g.equals(h);a.mergeListItems=f.block&&e.block&&f.block.is(CKEDITOR.dtd.$listItem)&& +e.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)b=b.clone(),b.setStartBefore(a.bookmark.startNode),b.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=b.createBookmark()},merge:function(a,d){if(a.mergeListBookmark){var b=a.mergeListBookmark.startNode,f=a.mergeListBookmark.endNode,e=new CKEDITOR.dom.elementPath(b,d),g=new CKEDITOR.dom.elementPath(f,d);if(a.mergeList){var h=e.contains(CKEDITOR.dtd.$list),n=g.contains(CKEDITOR.dtd.$list);h.equals(n)||(n.moveChildren(h),n.remove())}a.mergeListItems&& +(e=e.contains(CKEDITOR.dtd.$listItem),g=g.contains(CKEDITOR.dtd.$listItem),e.equals(g)||c(g,b,f));b.remove();f.remove()}}},block:{detectMerge:function(a,c){if(!a.tableContentsRanges&&!a.mergeListBookmark){var d=new CKEDITOR.dom.range(c);d.setStartBefore(a.bookmark.startNode);d.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=d.createBookmark()}},merge:function(a,d){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var b=a.mergeBlockBookmark.startNode,f=a.mergeBlockBookmark.endNode,e=new CKEDITOR.dom.elementPath(b, +d),g=new CKEDITOR.dom.elementPath(f,d),e=e.block,g=g.block;e&&g&&!e.equals(g)&&c(g,b,f);b.remove();f.remove()}}},table:function(){function a(d){var f=[],e,g=new CKEDITOR.dom.walker(d),h=d.startPath().contains(b),n=d.endPath().contains(b),l={};g.guard=function(a,g){if(a.type==CKEDITOR.NODE_ELEMENT){var k="visited_"+(g?"out":"in");if(a.getCustomData(k))return;CKEDITOR.dom.element.setMarker(l,a,k,1)}if(g&&h&&a.equals(h))e=d.clone(),e.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),f.push(e);else if(!g&&n&& +a.equals(n))e=d.clone(),e.setStartAt(n,CKEDITOR.POSITION_AFTER_START),f.push(e);else{if(k=!g)k=a.type==CKEDITOR.NODE_ELEMENT&&a.is(b)&&(!h||c(a,h))&&(!n||c(a,n));if(!k&&(k=g))if(a.is(b))var k=h&&h.getAscendant("table",!0),m=n&&n.getAscendant("table",!0),q=a.getAscendant("table",!0),k=k&&k.contains(q)||m&&m.contains(q);else k=void 0;k&&(e=d.clone(),e.selectNodeContents(a),f.push(e))}};g.lastForward();CKEDITOR.dom.element.clearAllMarkers(l);return f}function c(a,d){var b=CKEDITOR.POSITION_CONTAINS+ +CKEDITOR.POSITION_IS_CONTAINED,f=a.getPosition(d);return f===CKEDITOR.POSITION_IDENTICAL?!1:0===(f&b)}var b={td:1,th:1,caption:1};return{detectPurge:function(a){var c=a.range,d=c.clone();d.enlarge(CKEDITOR.ENLARGE_ELEMENT);var d=new CKEDITOR.dom.walker(d),f=0;d.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(b)&&++f};d.checkForward();if(1<f){var d=c.startPath().contains("table"),e=c.endPath().contains("table");d&&e&&c.checkBoundaryOfElement(d,CKEDITOR.START)&&c.checkBoundaryOfElement(e, +CKEDITOR.END)&&(c=a.range.clone(),c.setStartBefore(d),c.setEndAfter(e),a.purgeTableBookmark=c.createBookmark())}},detectRanges:function(f,e){var g=d(e,f.bookmark),h=g.clone(),n,l,k=g.getCommonAncestor();k.is(CKEDITOR.dtd.$tableContent)&&!k.is(b)&&(k=k.getAscendant("table",!0));l=k;k=new CKEDITOR.dom.elementPath(g.startContainer,l);l=new CKEDITOR.dom.elementPath(g.endContainer,l);k=k.contains("table");l=l.contains("table");if(k||l)k&&l&&c(k,l)?(f.tableSurroundingRange=h,h.setStartAt(k,CKEDITOR.POSITION_AFTER_END), +h.setEndAt(l,CKEDITOR.POSITION_BEFORE_START),h=g.clone(),h.setEndAt(k,CKEDITOR.POSITION_AFTER_END),n=g.clone(),n.setStartAt(l,CKEDITOR.POSITION_BEFORE_START),n=a(h).concat(a(n))):k?l||(f.tableSurroundingRange=h,h.setStartAt(k,CKEDITOR.POSITION_AFTER_END),g.setEndAt(k,CKEDITOR.POSITION_AFTER_END)):(f.tableSurroundingRange=h,h.setEndAt(l,CKEDITOR.POSITION_BEFORE_START),g.setStartAt(l,CKEDITOR.POSITION_AFTER_START)),f.tableContentsRanges=n?n:a(g)},deleteRanges:function(a){for(var c;c=a.tableContentsRanges.pop();)c.extractContents(), +v(c.startContainer)&&c.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var c=a.doc,d=a.range.clone(),c=c.createElement("p");c.insertBefore(a.purgeTableBookmark.startNode);d.moveToBookmark(a.purgeTableBookmark);d.deleteContents();a.range.moveToPosition(c,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))}, +fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,c){var d=c.startPath(),b;l(a,d.block,d.blockLimit)&&(b=k(a))&&(b=c.document.createElement(b),b.appendBogus(),c.insertNode(b),c.moveToPosition(b,CKEDITOR.POSITION_AFTER_START))}}}()})();(function(){function b(a){return CKEDITOR.plugins.widget&&CKEDITOR.plugins.widget.isDomWidget(a)}function h(a,c){if(0===a.length||b(a[0].getEnclosedNode()))return!1;var d,f;if((d= +!c&&1===a.length)&&!(d=a[0].collapsed)){var e=a[0];d=e.startContainer.getAscendant({td:1,th:1},!0);var g=e.endContainer.getAscendant({td:1,th:1},!0);f=CKEDITOR.tools.trim;d&&d.equals(g)&&!d.findOne("td, th, tr, tbody, table")?(e=e.cloneContents(),d=e.getFirst()?f(e.getFirst().getText())!==f(d.getText()):!0):d=!1}if(d)return!1;for(f=0;f<a.length;f++)if(d=a[f]._getTableElement(),!d)return!1;return!0}function g(a){function c(a){a=a.find("td, th");var d=[],b;for(b=0;b<a.count();b++)d.push(a.getItem(b)); +return d}var d=[],b,f;for(f=0;f<a.length;f++)b=a[f]._getTableElement(),b.is&&b.is({td:1,th:1})?d.push(b):d=d.concat(c(b));return d}function e(a){a=g(a);var c="",d=[],b,f;for(f=0;f<a.length;f++)b&&!b.equals(a[f].getAscendant("tr"))?(c+=d.join("\t")+"\n",b=a[f].getAscendant("tr"),d=[]):0===f&&(b=a[f].getAscendant("tr")),d.push(a[f].getText());return c+=d.join("\t")}function a(a){var c=this.root.editor,d=c.getSelection(1);this.reset();y=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null, +0);d.selectRanges([a[0]]);d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=e(a);d.nativeSel=null;this.isFake=1;this.rev=x++;c._.fakeSelection=this;y=!1;this.root.fire("selectionchange")}function m(){var a=this._.fakeSelection,c;if(a){c=this.getSelection(1);var d;if(!(d=!c)&&(d=!c.isHidden())){d=a;var f=c.getRanges(),e=d.getRanges(),g=f.length&&f[0]._getTableElement()&&f[0]._getTableElement().getAscendant("table", +!0),n=e.length&&e[0]._getTableElement()&&e[0]._getTableElement().getAscendant("table",!0),l=1===f.length&&f[0]._getTableElement()&&f[0]._getTableElement().is("table"),k=1===e.length&&e[0]._getTableElement()&&e[0]._getTableElement().is("table");if(b(d.getSelectedElement()))d=!1;else{var m=1===f.length&&f[0].collapsed,e=h(f,!!CKEDITOR.env.webkit)&&h(e);g=g&&n?g.equals(n)||n.contains(g):!1;g&&(m||e)?(l&&!k&&d.selectRanges(f),d=!0):d=!1}d=!d}d&&(a.reset(),a=0)}if(!a&&(a=c||this.getSelection(1),!a||a.getType()== +CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",a);c=this.elementPath();c.compare(this._.selectionPreviousPath)||(d=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(c.blockLimit),!CKEDITOR.env.webkit&&!CKEDITOR.env.gecko||d||(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath=c,this.fire("selectionChange",{selection:a,path:c}))}function l(){B=!0;u||(k.call(this),u=CKEDITOR.tools.setTimeout(k,200,this))}function k(){u=null;B&&(CKEDITOR.tools.setTimeout(m, +0,this),B=!1)}function c(a){return C(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function f(a){function d(c,b){return c&&c.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(b?"End":"Start")](c):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var b=a.startContainer,f=a.getPreviousNode(c,null,b),e=a.getNextNode(c,null,b);return d(f)||d(e,1)||!(f||e||b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()&&b.getBogus())?!0:!1}function d(a){n(a,!1);var c=a.getDocument().createText(t); +a.setCustomData("cke-fillingChar",c);return c}function n(a,c){var d=a&&a.removeCustomData("cke-fillingChar");if(d){if(!1!==c){var b=a.getDocument().getSelection().getNative(),f=b&&"None"!=b.type&&b.getRangeAt(0),e=t.length;if(d.getLength()>e&&f&&f.intersectsNode(d.$)){var g=[{node:b.anchorNode,offset:b.anchorOffset},{node:b.focusNode,offset:b.focusOffset}];b.anchorNode==d.$&&b.anchorOffset>e&&(g[0].offset-=e);b.focusNode==d.$&&b.focusOffset>e&&(g[1].offset-=e)}}d.setText(w(d.getText(),1));g&&(d=a.getDocument().$, +b=d.getSelection(),d=d.createRange(),d.setStart(g[0].node,g[0].offset),d.collapse(!0),b.removeAllRanges(),b.addRange(d),b.extend(g[1].node,g[1].offset))}}function w(a,c){return c?a.replace(z,function(a,c){return c?" ":""}):a.replace(t,"")}function v(a,c){var d=c&&CKEDITOR.tools.htmlEncode(c)||"\x26nbsp;",d=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;")+ +'"\x3e'+d+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(d);var b=a.getSelection(1),f=a.createRange(),e=b.root.on("selectionchange",function(a){a.cancel()},null,null,0);f.setStartAt(d,CKEDITOR.POSITION_AFTER_START);f.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);b.selectRanges([f]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=d}function p(a){var c={37:1,39:1,8:1,46:1};return function(d){var b=d.data.getKeystroke();if(c[b]){var f=a.getSelection().getRanges(), +e=f[0];1==f.length&&e.collapsed&&(b=e[38>b?"getPreviousEditableNode":"getNextEditableNode"]())&&b.type==CKEDITOR.NODE_ELEMENT&&"false"==b.getAttribute("contenteditable")&&(a.getSelection().fake(b),d.data.preventDefault(),d.cancel())}}}function r(a){for(var c=0;c<a.length;c++){var d=a[c];d.getCommonAncestor().isReadOnly()&&a.splice(c,1);if(!d.collapsed){if(d.startContainer.isReadOnly())for(var b=d.startContainer,f;b&&!((f=b.type==CKEDITOR.NODE_ELEMENT)&&b.is("body")||!b.isReadOnly());)f&&"false"== +b.getAttribute("contentEditable")&&d.setStartAfter(b),b=b.getParent();b=d.startContainer;f=d.endContainer;var e=d.startOffset,g=d.endOffset,h=d.clone();b&&b.type==CKEDITOR.NODE_TEXT&&(e>=b.getLength()?h.setStartAfter(b):h.setStartBefore(b));f&&f.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(f):h.setEndBefore(f));b=new CKEDITOR.dom.walker(h);b.evaluator=function(b){if(b.type==CKEDITOR.NODE_ELEMENT&&b.isReadOnly()){var f=d.clone();d.setEndBefore(b);d.collapsed&&a.splice(c--,1);b.getPosition(h.endContainer)& +CKEDITOR.POSITION_CONTAINS||(f.setStartAfter(b),f.collapsed||a.splice(c+1,0,f));return!0}return!1};b.next()}}return a}var q="function"!=typeof window.getSelection,x=1,t=CKEDITOR.tools.repeat("",7),z=new RegExp(t+"( )?","g"),y,u,B,C=CKEDITOR.dom.walker.invisible(1),A=function(){function a(c){return function(a){var d=a.editor.createRange();d.moveToClosestEditablePosition(a.selected,c)&&a.editor.getSelection().selectRanges([d]);return!1}}function c(a){return function(c){var d=c.editor,b=d.createRange(), +f;if(!d.readOnly)return(f=b.moveToClosestEditablePosition(c.selected,a))||(f=b.moveToClosestEditablePosition(c.selected,!a)),f&&d.getSelection().selectRanges([b]),d.fire("saveSnapshot"),c.selected.remove(),f||(b.moveToElementEditablePosition(d.editable()),d.getSelection().selectRanges([b])),d.fire("saveSnapshot"),!1}}var d=a(),b=a(1);return{37:d,38:d,39:b,40:b,8:c(),46:c(1)}}();CKEDITOR.on("instanceCreated",function(a){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=a.editor;d.on("contentDom", +function(){function a(){x=new CKEDITOR.dom.selection(d.getSelection());x.lock()}function c(){g.removeListener("mouseup",c);r.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,d=a.createRange();"None"!=a.type&&d.parentElement()&&d.parentElement().ownerDocument==e.$&&d.select()}function b(a){var c,d;c=(c=this.document.getActive())?"input"===c.getName()||"textarea"===c.getName():!1;c||(c=this.getSelection(1),(d=f(c))&&!d.equals(h)&&(c.selectElement(d),a.data.preventDefault()))}function f(a){a= +a.getRanges()[0];return a?(a=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")},!0))&&"false"===a.getAttribute("contenteditable")?a:null:null}var e=d.document,g=CKEDITOR.document,h=d.editable(),k=e.getBody(),r=e.getDocumentElement(),w=h.isInline(),t,x;CKEDITOR.env.gecko&&h.attachListener(h,"focus",function(a){a.removeListener();0!==t&&(a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==h.$&&(a=d.createRange(),a.moveToElementEditStart(h), +a.select())},null,null,-2);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(t&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){t=d._.previousActive&&d._.previousActive.equals(e.getActive());var a=null!=d._.previousScrollTop&&d._.previousScrollTop!=h.$.scrollTop;CKEDITOR.env.webkit&&t&&a&&(h.$.scrollTop=d._.previousScrollTop)}d.unlockSelection(t);t=0},null,null,-1);h.attachListener(h,"mousedown",function(){t=0});if(CKEDITOR.env.ie||CKEDITOR.env.gecko||w)q?h.attachListener(h, +"beforedeactivate",a,null,null,-1):h.attachListener(d,"selectionCheck",a,null,null,-1),h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusout":"blur",function(){var a=x&&(x.isFake||2>x.getRanges().length);CKEDITOR.env.gecko&&!w&&a||(d.lockSelection(x),t=1)},null,null,-1),h.attachListener(h,"mousedown",function(){t=0});if(CKEDITOR.env.ie&&!w){var u;h.attachListener(h,"mousedown",function(a){2==a.data.$.button&&((a=d.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(u=d.window.getScrollPosition()))}); +h.attachListener(h,"mouseup",function(a){2==a.data.$.button&&u&&(d.document.$.documentElement.scrollLeft=u.x,d.document.$.documentElement.scrollTop=u.y);u=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var v,y;r.on("mousedown",function(a){function c(a){a=a.data.$;if(v){var d=k.$.createTextRange();try{d.moveToPoint(a.clientX,a.clientY)}catch(b){}v.setEndPoint(0>y.compareEndPoints("StartToStart",d)?"EndToEnd":"StartToStart",d);v.select()}}function d(){r.removeListener("mousemove", +c);g.removeListener("mouseup",d);r.removeListener("mouseup",d);v.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<r.$.clientHeight&&a.$.x<r.$.clientWidth){v=k.$.createTextRange();try{v.moveToPoint(a.$.clientX,a.$.clientY)}catch(b){}y=v.duplicate();r.on("mousemove",c);g.on("mouseup",d);r.on("mouseup",d)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)r.on("mousedown",function(a){a.data.getTarget().is("html")&&(g.on("mouseup",c),r.on("mouseup",c))})}}h.attachListener(h,"selectionchange",m, +d);h.attachListener(h,"keyup",l,d);h.attachListener(h,"touchstart",l,d);h.attachListener(h,"touchend",l,d);CKEDITOR.env.ie&&h.attachListener(h,"keydown",b,d);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(w&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var z;h.attachListener(h,"mousedown",function(){z=1});h.attachListener(e.getDocumentElement(),"mouseup",function(){z&&l.call(d);z=0})}else h.attachListener(CKEDITOR.env.ie? +h:e.getDocumentElement(),"mouseup",l,d);CKEDITOR.env.webkit&&h.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h.hasFocus&&n(h)}},null,null,-1);h.attachListener(h,"keydown",p(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&c()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy",c,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection; delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),c=d.editable().getLast(a);c&&c.hasAttribute("data-cke-hidden-sel")&&(c.remove(),CKEDITOR.env.gecko&&(a=d.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);d.on("key",function(a){if("wysiwyg"==d.mode){var c=d.getSelection();if(c.isFake){var b=A[a.data.keyCode];if(b)return b({editor:d,selected:c.getSelectedElement(), selection:c,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var c=a.editor;c.on("selectionChange",function(){var a=c.editable(),d=a.getCustomData("cke-fillingChar");d&&(d.getCustomData("ready")?(n(a),a.editor.fire("selectionCheck")):d.setCustomData("ready",1))},null,null,-1);c.on("beforeSetMode",function(){n(c.editable())},null,null,-1);c.on("getSnapshot",function(a){a.data&&(a.data=w(a.data))},c,null,20);c.on("toDataFormat",function(a){a.data.dataValue=w(a.data.dataValue)}, -null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?m:k).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection= -function(a){var c=this._.savedSelection;return c?(c.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE= -1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var c=a;a=a.root}var d=a instanceof CKEDITOR.dom.element;this.rev=c?c.rev:u++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=d?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(c)return CKEDITOR.tools.extend(this._.cache,c._.cache),this.isFake=c.isFake,this.isLocked=c.isLocked,this;a=this.getNative();var b,e;if(a)if(a.getRangeAt)b= -(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}b=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!b||b.type!=CKEDITOR.NODE_ELEMENT&&b.type!=CKEDITOR.NODE_TEXT||!this.root.equals(b)&&!this.root.contains(b))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement=null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var G= -{img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:w,_createFillingCharSequenceNode:c,FILLING_CHAR_SEQUENCE:t});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=q?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:q? -function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_NONE;try{var d=this.getNative(),b=d.type;"Text"==b&&(c=CKEDITOR.SELECTION_TEXT);"Control"==b&&(c=CKEDITOR.SELECTION_ELEMENT);d.createRange().parentElement()&&(c=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=c}:function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_TEXT,d=this.getNative();if(!d||!d.rangeCount)c=CKEDITOR.SELECTION_NONE;else if(1==d.rangeCount){var d=d.getRangeAt(0),b=d.startContainer; -b==d.endContainer&&1==b.nodeType&&1==d.endOffset-d.startOffset&&G[b.childNodes[d.startOffset].nodeName.toLowerCase()]&&(c=CKEDITOR.SELECTION_ELEMENT)}return a.type=c},getRanges:function(){var a=q?function(){function a(c){return(new CKEDITOR.dom.node(c)).getIndex()}var c=function(c,d){c=c.duplicate();c.collapse(d);var b=c.parentElement();if(!b.hasChildNodes())return{container:b,offset:0};for(var e=b.children,f,g,h=c.duplicate(),n=0,l=e.length-1,k=-1,m,q;n<=l;)if(k=Math.floor((n+l)/2),f=e[k],h.moveToElementText(f), -m=h.compareEndPoints("StartToStart",c),0<m)l=k-1;else if(0>m)n=k+1;else return{container:b,offset:a(f)};if(-1==k||k==e.length-1&&0>m){h.moveToElementText(b);h.setEndPoint("StartToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=b.childNodes;if(!h)return f=e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:b,offset:e.length}:{container:f,offset:f.nodeValue.length};for(b=e.length;0<h&&0<b;)g=e[--b],g.nodeType==CKEDITOR.NODE_TEXT&&(q=g,h-=g.nodeValue.length);return{container:q,offset:-h}}h.collapse(0< -m?!0:!1);h.setEndPoint(0<m?"StartToStart":"EndToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:b,offset:a(f)+(0<m?0:1)};for(;0<h;)try{g=f[0<m?"previousSibling":"nextSibling"],g.nodeType==CKEDITOR.NODE_TEXT&&(h-=g.nodeValue.length,q=g),f=g}catch(w){return{container:b,offset:a(f)}}return{container:q,offset:0<m?-h:q.nodeValue.length+h}};return function(){var a=this.getNative(),d=a&&a.createRange(),b=this.getType();if(!a)return[];if(b==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root), -b=c(d,!0),a.setStart(new CKEDITOR.dom.node(b.container),b.offset),b=c(d),a.setEnd(new CKEDITOR.dom.node(b.container),b.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse(),[a];if(b==CKEDITOR.SELECTION_ELEMENT){for(var b=[],e=0;e<d.length;e++){for(var f=d.item(e),g=f.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<g.childNodes.length&&g.childNodes[h]!=f;h++);a.setStart(new CKEDITOR.dom.node(g),h);a.setEnd(new CKEDITOR.dom.node(g), -h+1);b.push(a)}return b}return[]}}():function(){var a=[],c,d=this.getNative();if(!d)return a;for(var b=0;b<d.rangeCount;b++){var e=d.getRangeAt(b);c=new CKEDITOR.dom.range(this.root);c.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);c.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(c)}return a};return function(c){var d=this._.cache,b=d.ranges;b||(d.ranges=b=new CKEDITOR.dom.rangeList(a.call(this)));return c?p(new CKEDITOR.dom.rangeList(b.slice())):b}}(),getStartElement:function(){var a= -this._.cache;if(void 0!==a.startElement)return a.startElement;var c;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var d=this.getRanges()[0];if(d){if(d.collapsed)c=d.startContainer,c.type!=CKEDITOR.NODE_ELEMENT&&(c=c.getParent());else{for(d.optimize();c=d.startContainer,d.startOffset==(c.getChildCount?c.getChildCount():c.getLength())&&!c.isBlockBoundary();)d.setStartAfter(c);c=d.startContainer;if(c.type!=CKEDITOR.NODE_ELEMENT)return c.getParent(); -if((c=c.getChild(d.startOffset))&&c.type==CKEDITOR.NODE_ELEMENT)for(d=c.getFirst();d&&d.type==CKEDITOR.NODE_ELEMENT;)c=d,d=d.getFirst();else c=d.startContainer}c=c.$}}return a.startElement=c?new CKEDITOR.dom.element(c):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var c=this,d=CKEDITOR.tools.tryThese(function(){return c.getNative().createRange().item(0)},function(){for(var a=c.getRanges()[0].clone(),d,b,e=2;e&&!((d=a.getEnclosedNode())&& -d.type==CKEDITOR.NODE_ELEMENT&&G[d.getName()]&&(b=d));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return b&&b.$});return a.selectedElement=d?new CKEDITOR.dom.element(d):null},getSelectedText:function(){var a=this._.cache;if(void 0!==a.selectedText)return a.selectedText;var c=this.getNative(),c=q?"Control"==c.type?"":c.createRange().text:c.toString();return a.selectedText=c},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null; -this.isLocked=1},unlock:function(c){if(this.isLocked){if(c)var d=this.getSelectedElement(),b=this.getRanges(),e=this.isFake;this.isLocked=0;this.reset();c&&(c=d||b[0]&&b[0].getCommonAncestor())&&c.getAscendant("body",1)&&(this.root.editor.plugins.tableselection&&h(b)?a.call(this,b):e?this.fake(d):d&&2>b.length?this.selectElement(d):this.selectRanges(b))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection; -var c=a._.hiddenSelectionContainer;if(c){var d=a.checkDirty();a.fire("lockSnapshot");c.remove();a.fire("unlockSnapshot");!d&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=u++},selectElement:function(a){var c=new CKEDITOR.dom.range(this.root);c.setStartBefore(a);c.setEndAfter(a);this.selectRanges([c])},selectRanges:function(d){var b=this.root.editor,f=b&&b._.hiddenSelectionContainer;this.reset();if(f)for(var f=this.root,g,l=0;l<d.length;++l)g= -d[l],g.endContainer.equals(f)&&(g.endOffset=Math.min(g.endOffset,f.getChildCount()));if(d.length)if(this.isLocked){var k=CKEDITOR.document.getActive();this.unlock();this.selectRanges(d);this.lock();k&&!k.equals(this.root)&&k.focus()}else{var m;a:{var w,p;if(1==d.length&&!(p=d[0]).collapsed&&(m=p.getEnclosedNode())&&m.type==CKEDITOR.NODE_ELEMENT&&(p=p.clone(),p.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(w=p.getEnclosedNode())&&w.type==CKEDITOR.NODE_ELEMENT&&(m=w),"false"==m.getAttribute("contenteditable")))break a; -m=void 0}if(m)this.fake(m);else if(b&&b.plugins.tableselection&&b.plugins.tableselection.isSupportedEnvironment()&&h(d)&&!v&&!d[0]._getTableElement({table:1}).hasAttribute("data-cke-tableselection-ignored"))a.call(this,d);else{if(q){w=CKEDITOR.dom.walker.whitespaces(!0);m=/\ufeff|\u00a0/;p={table:1,tbody:1,tr:1};1<d.length&&(b=d[d.length-1],d[0].setEnd(b.endContainer,b.endOffset));b=d[0];d=b.collapsed;var t,r,u;if((f=b.getEnclosedNode())&&f.type==CKEDITOR.NODE_ELEMENT&&f.getName()in G&&(!f.is("a")|| -!f.getText()))try{u=f.$.createControlRange();u.addElement(f.$);u.select();return}catch(B){}if(b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in p||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in p)b.shrink(CKEDITOR.NODE_ELEMENT,!0),d=b.collapsed;u=b.createBookmark();p=u.startNode;d||(k=u.endNode);u=b.document.$.body.createTextRange();u.moveToElementText(p.$);u.moveStart("character",1);k?(m=b.document.$.body.createTextRange(),m.moveToElementText(k.$), -u.setEndPoint("EndToEnd",m),u.moveEnd("character",-1)):(t=p.getNext(w),r=p.hasAscendant("pre"),t=!(t&&t.getText&&t.getText().match(m))&&(r||!p.hasPrevious()||p.getPrevious().is&&p.getPrevious().is("br")),r=b.document.createElement("span"),r.setHtml("\x26#65279;"),r.insertBefore(p),t&&b.document.createText("").insertBefore(p));b.setStartBefore(p);p.remove();d?(t?(u.moveStart("character",-1),u.select(),b.document.$.selection.clear()):u.select(),b.moveToPosition(r,CKEDITOR.POSITION_BEFORE_START),r.remove()): -(b.setEndBefore(k),k.remove(),u.select())}else{k=this.getNative();if(!k)return;this.removeAllRanges();for(u=0;u<d.length;u++){if(u<d.length-1&&(t=d[u],r=d[u+1],m=t.clone(),m.setStart(t.endContainer,t.endOffset),m.setEnd(r.startContainer,r.startOffset),!m.collapsed&&(m.shrink(CKEDITOR.NODE_ELEMENT,!0),b=m.getCommonAncestor(),m=m.getEnclosedNode(),b.isReadOnly()||m&&m.isReadOnly()))){r.setStart(t.startContainer,t.startOffset);d.splice(u--,1);continue}b=d[u];r=this.document.$.createRange();b.collapsed&& -CKEDITOR.env.webkit&&e(b)&&(m=c(this.root),b.insertNode(m),(t=m.getNext())&&!m.getPrevious()&&t.type==CKEDITOR.NODE_ELEMENT&&"br"==t.getName()?(n(this.root),b.moveToPosition(t,CKEDITOR.POSITION_BEFORE_START)):b.moveToPosition(m,CKEDITOR.POSITION_AFTER_END));r.setStart(b.startContainer.$,b.startOffset);try{r.setEnd(b.endContainer.$,b.endOffset)}catch(y){if(0<=y.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))b.collapse(1),r.setEnd(b.endContainer.$,b.endOffset);else throw y;}k.addRange(r)}}this.reset(); -this.root.fire("selectionchange")}}},fake:function(a,c){var d=this.root.editor;void 0===c&&a.hasAttribute("aria-label")&&(c=a.getAttribute("aria-label"));this.reset();z(d,c);var b=this._.cache,e=new CKEDITOR.dom.range(this.root);e.setStartBefore(a);e.setEndAfter(a);b.ranges=new CKEDITOR.dom.rangeList(e);b.selectedElement=b.startElement=a;b.type=CKEDITOR.SELECTION_ELEMENT;b.selectedText=b.nativeSel=null;this.isFake=1;this.rev=u++;d._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a= -this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},isInTable:function(a){return h(this.getRanges(),a)},isCollapsed:function(){var a=this.getRanges();return 1===a.length&&a[0].collapsed},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var c=[],d,b=0;b< -a.length;b++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(a[b]);c.push(e)}a.isFake&&(d=h(c)?c[0]._getTableElement():c[0].getEnclosedNode(),d&&d.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),a.isFake=0));a.isFake&&!h(c)?this.fake(d):this.selectRanges(c);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&& -this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[q?"empty":"removeAllRanges"]()}catch(c){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;(function(){function b(a,c){for(var d,b;(a=a.getParent())&&!a.equals(c);)if(a.getAttribute("data-nostyle"))d=a;else if(!b){var e=a.getAttribute("contentEditable");"false"==e?d=a:"true"==e&&(b=1)}return d}function h(a, -c,d,b){return(a.getPosition(c)|b)==b&&(!d.childRule||d.childRule(a))}function g(c){var d=c.document;if(c.collapsed)d=u(this,d),c.insertNode(d),c.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var e=this.element,f=this._.definition,n,k=f.ignoreReadonly,l=k||f.includeReadonly;null==l&&(l=c.root.getCustomData("cke_includeReadonly"));var m=CKEDITOR.dtd[e];m||(n=!0,m=CKEDITOR.dtd.span);c.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.trim();var q=c.createBookmark(),w=q.startNode,p=q.endNode,t=w,v;if(!k){var B= -c.getCommonAncestor(),k=b(w,B),B=b(p,B);k&&(t=k.getNextSourceNode(!0));B&&(p=B)}for(t.getPosition(p)==CKEDITOR.POSITION_FOLLOWING&&(t=0);t;){k=!1;if(t.equals(p))t=null,k=!0;else{var y=t.type==CKEDITOR.NODE_ELEMENT?t.getName():null,B=y&&"false"==t.getAttribute("contentEditable"),z=y&&t.getAttribute("data-nostyle");if(y&&t.data("cke-bookmark")||t.type===CKEDITOR.NODE_COMMENT){t=t.getNextSourceNode(!0);continue}if(B&&l&&CKEDITOR.dtd.$block[y])for(var x=t,A=a(x),N=void 0,V=A.length,Y=0,x=V&&new CKEDITOR.dom.range(x.getDocument());Y< -V;++Y){var N=A[Y],fa=CKEDITOR.filter.instances[N.data("cke-filter")];if(fa?fa.check(this):1)x.selectNodeContents(N),g.call(this,x)}A=y?!m[y]||z?0:B&&!l?0:h(t,p,f,M):1;if(A)if(N=t.getParent(),A=f,V=e,Y=n,!N||!(N.getDtd()||CKEDITOR.dtd.span)[V]&&!Y||A.parentRule&&!A.parentRule(N))k=!0;else{if(v||y&&CKEDITOR.dtd.$removeEmpty[y]&&(t.getPosition(p)|M)!=M||(v=c.clone(),v.setStartBefore(t)),y=t.type,y==CKEDITOR.NODE_TEXT||B||y==CKEDITOR.NODE_ELEMENT&&!t.getChildCount()){for(var y=t,ha;(k=!y.getNext(J))&& -(ha=y.getParent(),m[ha.getName()])&&h(ha,w,f,H);)y=ha;v.setEndAfter(y)}}else k=!0;t=t.getNextSourceNode(z||B)}if(k&&v&&!v.collapsed){for(var k=u(this,d),B=k.hasAttributes(),z=v.getCommonAncestor(),y={},A={},N={},V={},ga,G,D;k&&z;){if(z.getName()==e){for(ga in f.attributes)!V[ga]&&(D=z.getAttribute(G))&&(k.getAttribute(ga)==D?A[ga]=1:V[ga]=1);for(G in f.styles)!N[G]&&(D=z.getStyle(G))&&(k.getStyle(G)==D?y[G]=1:N[G]=1)}z=z.getParent()}for(ga in A)k.removeAttribute(ga);for(G in y)k.removeStyle(G);B&& -!k.hasAttributes()&&(k=null);k?(v.extractContents().appendTo(k),v.insertNode(k),r.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element("span"),v.extractContents().appendTo(k),v.insertNode(k),r.call(this,k),k.remove(!0));v=null}}c.moveToBookmark(q);c.shrink(CKEDITOR.SHRINK_TEXT);c.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function f(a){function c(){for(var a=new CKEDITOR.dom.elementPath(b.getParent()),d=new CKEDITOR.dom.elementPath(l.getParent()),e=null,f=null,g=0;g< -a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,!0)&&(e=h)}for(g=0;g<d.elements.length;g++){h=d.elements[g];if(h==d.block||h==d.blockLimit)break;m.checkElementRemovable(h,!0)&&(f=h)}f&&l.breakParent(f);e&&b.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var d=a.createBookmark(),b=d.startNode,e=this._.definition.alwaysRemoveElement;if(a.collapsed){for(var f=new CKEDITOR.dom.elementPath(b.getParent(),a.root),g,h=0,k;h<f.elements.length&& -(k=f.elements[h])&&k!=f.block&&k!=f.blockLimit;h++)if(this.checkElementRemovable(k)){var n;!e&&a.collapsed&&(a.checkBoundaryOfElement(k,CKEDITOR.END)||(n=a.checkBoundaryOfElement(k,CKEDITOR.START)))?(g=k,g.match=n?"start":"end"):(k.mergeSiblings(),k.is(this.element)?z.call(this,k):p(k,v(this)[k.getName()]))}if(g){e=b;for(h=0;;h++){k=f.elements[h];if(k.equals(g))break;else if(k.match)continue;else k=k.clone();k.append(e);e=k}e["start"==g.match?"insertBefore":"insertAfter"](g)}}else{var l=d.endNode, -m=this;c();for(f=b;!f.equals(l);)g=f.getNextSourceNode(),f.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(f)&&(f.getName()==this.element?z.call(this,f):p(f,v(this)[f.getName()]),g.type==CKEDITOR.NODE_ELEMENT&&g.contains(b)&&(c(),g=b.getNext())),f=g}a.moveToBookmark(d);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function a(a){var c=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return c.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return c}function m(a){var c=a.getEnclosedNode()||a.getCommonAncestor(!1, -!0);(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1))&&!a.isReadOnly()&&t(a,this)}function k(a){var c=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1)){var c=this._.definition,d=c.attributes;if(d)for(var b in d)a.removeAttribute(b,d[b]);if(c.styles)for(var e in c.styles)c.styles.hasOwnProperty(e)&&a.removeStyle(e)}}function l(a){var c=a.createBookmark(!0),d=a.createIterator();d.enforceRealBlocks=!0;this._.enterMode&&(d.enlargeBr= -this._.enterMode!=CKEDITOR.ENTER_BR);for(var b,f=a.document,g;b=d.getNextParagraph();)!b.isReadOnly()&&(d.activeFilter?d.activeFilter.check(this):1)&&(g=u(this,f,b),e(b,g));a.moveToBookmark(c)}function d(a){var c=a.createBookmark(1),d=a.createIterator();d.enforceRealBlocks=!0;d.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var b,f;b=d.getNextParagraph();)this.checkElementRemovable(b)&&(b.is("pre")?((f=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P? -"p":"div"))&&b.copyAttributes(f),e(b,f)):z.call(this,b));a.moveToBookmark(c)}function e(a,d){var b=!d;b&&(d=a.getDocument().createElement("div"),a.copyAttributes(d));var e=d&&d.is("pre"),f=a.is("pre"),g=!e&&f;if(e&&!f){f=d;(g=a.getBogus())&&g.remove();g=a.getHtml();g=n(g,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");g=g.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g," ");g=g.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div"); -h.append(f);f.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";f.copyAttributes(h.getFirst());f=h.getFirst().remove()}else f.setHtml(g);d=f}else g?d=w(b?[a.getHtml()]:c(a),d):a.moveChildren(d);d.replace(a);if(e){var b=d,k;(k=b.getPrevious(F))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(e=n(k.getHtml(),/\n$/,"")+"\n\n"+n(b.getHtml(),/^\n/,""),CKEDITOR.env.ie?b.$.outerHTML="\x3cpre\x3e"+e+"\x3c/pre\x3e":b.setHtml(e),k.remove())}else b&&q(d)}function c(a){var c=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi, -function(a,c,d){return c+"\x3c/pre\x3e"+d+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,d){c.push(d)});return c}function n(a,c,d){var b="",e="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,c,d){c&&(b=c);d&&(e=d);return""});return b+a.replace(c,d)+e}function w(a,c){var d;1<a.length&&(d=new CKEDITOR.dom.documentFragment(c.getDocument()));for(var b=0;b<a.length;b++){var e=a[b],e=e.replace(/(\r\n|\r)/g,"\n"),e=n(e,/^[ \t]*\n/, -""),e=n(e,/\n$/,""),e=n(e,/^[ \t]+|[ \t]+$/g,function(a,c){return 1==a.length?"\x26nbsp;":c?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"\x3cbr\x3e"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(d){var f=c.clone();f.setHtml(e);d.append(f)}else c.setHtml(e)}return d||c}function z(a,c){var d=this._.definition,b=d.attributes,d=d.styles,e=v(this)[a.getName()],f=CKEDITOR.tools.isEmpty(b)&& -CKEDITOR.tools.isEmpty(d),g;for(g in b)if("class"!=g&&!this._.definition.fullMatch||a.getAttribute(g)==x(g,b[g]))c&&"data-"==g.slice(0,5)||(f=a.hasAttribute(g),a.removeAttribute(g));for(var h in d)this._.definition.fullMatch&&a.getStyle(h)!=x(h,d[h],!0)||(f=f||!!a.getStyle(h),a.removeStyle(h));p(a,e,A[a.getName()]);f&&(this._.definition.alwaysRemoveElement?q(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?q(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P? -"p":"div"))}function r(a){for(var c=v(this),d=a.getElementsByTag(this.element),b,e=d.count();0<=--e;)b=d.getItem(e),b.isReadOnly()||z.call(this,b,!0);for(var f in c)if(f!=this.element)for(d=a.getElementsByTag(f),e=d.count()-1;0<=e;e--)b=d.getItem(e),b.isReadOnly()||p(b,c[f])}function p(a,c,d){if(c=c&&c.attributes)for(var b=0;b<c.length;b++){var e=c[b][0],f;if(f=a.getAttribute(e)){var g=c[b][1];(null===g||g.test&&g.test(f)||"string"==typeof g&&f==g)&&a.removeAttribute(e)}}d||q(a)}function q(a,c){if(!a.hasAttributes()|| -c)if(CKEDITOR.dtd.$block[a.getName()]){var d=a.getPrevious(F),b=a.getNext(F);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br",1);!b||b.type!=CKEDITOR.NODE_TEXT&&b.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else d=a.getFirst(),b=a.getLast(),a.remove(!0),d&&(d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings(),b&&!d.equals(b)&&b.type==CKEDITOR.NODE_ELEMENT&&b.mergeSiblings())}function u(a,c,d){var b;b=a.element;"*"==b&&(b="span");b=new CKEDITOR.dom.element(b,c);d&&d.copyAttributes(b); -b=t(b,a);c.getCustomData("doc_processing_style")&&b.hasAttribute("id")?b.removeAttribute("id"):c.setCustomData("doc_processing_style",1);return b}function t(a,c){var d=c._.definition,b=d.attributes,d=CKEDITOR.style.getStyleText(d);if(b)for(var e in b)a.setAttribute(e,b[e]);d&&a.setAttribute("style",d);a.getDocument().removeCustomData("doc_processing_style");return a}function y(a,c){for(var d in a)a[d]=a[d].replace(I,function(a,d){return c[d]})}function v(a){if(a._.overrides)return a._.overrides;var c= -a._.overrides={},d=a._.definition.overrides;if(d){CKEDITOR.tools.isArray(d)||(d=[d]);for(var b=0;b<d.length;b++){var e=d[b],f,g;"string"==typeof e?f=e.toLowerCase():(f=e.element?e.element.toLowerCase():a.element,g=e.attributes);e=c[f]||(c[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return c}function x(a,c,d){var b=new CKEDITOR.dom.element("span");b[d?"setStyle":"setAttribute"](a,c);return b[d?"getStyle":"getAttribute"](a)}function B(a,c){function d(a, -c){return"font-family"==c.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof c&&(c=CKEDITOR.tools.parseCssText(c,!0));for(var b in a)if(!(b in c)||d(c[b],b)!=d(a[b],b)&&"inherit"!=a[b]&&"inherit"!=c[b])return!1;return!0}function D(a,c,d){var b=a.getRanges();c=c?this.removeFromRange:this.applyToRange;for(var e,f=b.createIterator();e=f.getNextRange();)c.call(this,e,d);a.selectRanges(b)}var A={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1, -pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},G={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},C=/\s*(?:;\s*|$)/,I=/#\((.+?)\)/g,J=CKEDITOR.dom.walker.bookmark(0,1),F=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,c){if("string"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a); -var d=a.attributes;d&&d.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(d.style)),delete d.style);c&&(a=CKEDITOR.tools.clone(a),y(a.attributes,c),y(a.styles,c));d=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(A[d]?CKEDITOR.STYLE_BLOCK:G[d]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof -CKEDITOR.dom.document)return D.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);D.call(this,a.getSelection(),0,a);this._.enterMode=c}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return D.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);D.call(this,a.getSelection(),1,a);this._.enterMode=c}},applyToRange:function(a){this.applyToRange= -this.type==CKEDITOR.STYLE_INLINE?g:this.type==CKEDITOR.STYLE_BLOCK?l:this.type==CKEDITOR.STYLE_OBJECT?m:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?d:this.type==CKEDITOR.STYLE_OBJECT?k:null;return this.removeFromRange(a)},applyToObject:function(a){t(a,this)},checkActive:function(a,c){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,c);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var d= -a.elements,b=0,e;b<d.length;b++)if(e=d[b],this.type!=CKEDITOR.STYLE_INLINE||e!=a.block&&e!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!("string"==typeof this.element?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,!0,c))return!0}}return!1},checkApplicable:function(a,c,d){c&&c instanceof CKEDITOR.filter&&(d=c);if(d&&!d.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0}, -checkElementMatch:function(a,c){var d=this._.definition;if(!a||!d.ignoreReadonly&&a.isReadOnly())return!1;var b=a.getName();if("string"==typeof this.element?b==this.element:b in this.element){if(!c&&!a.hasAttributes())return!0;if(b=d._AC)d=b;else{var b={},e=0,f=d.attributes;if(f)for(var g in f)e++,b[g]=f[g];if(g=CKEDITOR.style.getStyleText(d))b.style||e++,b.style=g;b._length=e;d=d._AC=b}if(d._length){for(var h in d)if("_length"!=h)if(b=a.getAttribute(h)||"","style"==h?B(d[h],b):d[h]==b){if(!c)return!0}else if(c)return!1; -if(c)return!0}else return!0}return!1},checkElementRemovable:function(a,c,d){if(this.checkElementMatch(a,c,d))return!0;if(c=v(this)[a.getName()]){var b;if(!(c=c.attributes))return!0;for(d=0;d<c.length;d++)if(b=c[d][0],b=a.getAttribute(b)){var e=c[d][1];if(null===e)return!0;if("string"==typeof e){if(b==e)return!0}else if(e.test(b))return!0}}return!1},buildPreview:function(a){var c=this._.definition,d=[],b=c.element;"bdo"==b&&(b="span");var d=["\x3c",b],e=c.attributes;if(e)for(var f in e)d.push(" ", -f,'\x3d"',e[f],'"');(e=CKEDITOR.style.getStyleText(c))&&d.push(' style\x3d"',e,'"');d.push("\x3e",a||c.name,"\x3c/",b,"\x3e");return d.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var c=a._ST;if(c)return c;var c=a.styles,d=a.attributes&&a.attributes.style||"",b="";d.length&&(d=d.replace(C,";"));for(var e in c){var f=c[e],g=(e+":"+f).replace(C,";");"inherit"==f?b+=g:d+=g}d.length&&(d=CKEDITOR.tools.normalizeCssText(d,!0));return a._ST=d+b};CKEDITOR.style.customHandlers= +null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?m:l).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.getSelectedRanges=function(a){var c=this.getSelection();return c&&c.getRanges(a)||[]};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1); +return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var c=this._.savedSelection;return c?(c.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof +CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var c=a;a=a.root}var d=a instanceof CKEDITOR.dom.element;this.rev=c?c.rev:x++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=d?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(c)return CKEDITOR.tools.extend(this._.cache, +c._.cache),this.isFake=c.isFake,this.isLocked=c.isLocked,this;a=this.getNative();var b,f;if(a)if(a.getRangeAt)b=(f=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(f.commonAncestorContainer);else{try{f=a.createRange()}catch(e){}b=f&&CKEDITOR.dom.element.get(f.item&&f.item(0)||f.parentElement())}if(!b||b.type!=CKEDITOR.NODE_ELEMENT&&b.type!=CKEDITOR.NODE_TEXT||!this.root.equals(b)&&!this.root.contains(b))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement= +null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var E={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:w,_createFillingCharSequenceNode:d,FILLING_CHAR_SEQUENCE:t});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel= +q?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:q?function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_NONE;try{var d=this.getNative(),b=d.type;"Text"==b&&(c=CKEDITOR.SELECTION_TEXT);"Control"==b&&(c=CKEDITOR.SELECTION_ELEMENT);d.createRange().parentElement()&&(c=CKEDITOR.SELECTION_TEXT)}catch(f){}return a.type=c}:function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_TEXT,d=this.getNative();if(!d||!d.rangeCount)c=CKEDITOR.SELECTION_NONE; +else if(1==d.rangeCount){var d=d.getRangeAt(0),b=d.startContainer;b==d.endContainer&&1==b.nodeType&&1==d.endOffset-d.startOffset&&E[b.childNodes[d.startOffset].nodeName.toLowerCase()]&&(c=CKEDITOR.SELECTION_ELEMENT)}return a.type=c},getRanges:function(){var a=q?function(){function a(c){return(new CKEDITOR.dom.node(c)).getIndex()}var c=function(c,d){c=c.duplicate();c.collapse(d);var b=c.parentElement();if(!b.hasChildNodes())return{container:b,offset:0};for(var f=b.children,e,g,h=c.duplicate(),n=0, +l=f.length-1,k=-1,m,q;n<=l;)if(k=Math.floor((n+l)/2),e=f[k],h.moveToElementText(e),m=h.compareEndPoints("StartToStart",c),0<m)l=k-1;else if(0>m)n=k+1;else return{container:b,offset:a(e)};if(-1==k||k==f.length-1&&0>m){h.moveToElementText(b);h.setEndPoint("StartToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;f=b.childNodes;if(!h)return e=f[f.length-1],e.nodeType!=CKEDITOR.NODE_TEXT?{container:b,offset:f.length}:{container:e,offset:e.nodeValue.length};for(b=f.length;0<h&&0<b;)g=f[--b],g.nodeType== +CKEDITOR.NODE_TEXT&&(q=g,h-=g.nodeValue.length);return{container:q,offset:-h}}h.collapse(0<m?!0:!1);h.setEndPoint(0<m?"StartToStart":"EndToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:b,offset:a(e)+(0<m?0:1)};for(;0<h;)try{g=e[0<m?"previousSibling":"nextSibling"],g.nodeType==CKEDITOR.NODE_TEXT&&(h-=g.nodeValue.length,q=g),e=g}catch(r){return{container:b,offset:a(e)}}return{container:q,offset:0<m?-h:q.nodeValue.length+h}};return function(){var a=this.getNative(),d=a&& +a.createRange(),b=this.getType();if(!a)return[];if(b==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),b=c(d,!0),a.setStart(new CKEDITOR.dom.node(b.container),b.offset),b=c(d),a.setEnd(new CKEDITOR.dom.node(b.container),b.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse(),[a];if(b==CKEDITOR.SELECTION_ELEMENT){for(var b=[],f=0;f<d.length;f++){for(var e=d.item(f),g=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h< +g.childNodes.length&&g.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(g),h);a.setEnd(new CKEDITOR.dom.node(g),h+1);b.push(a)}return b}return[]}}():function(){var a=[],c,d=this.getNative();if(!d)return a;for(var b=0;b<d.rangeCount;b++){var f=d.getRangeAt(b);c=new CKEDITOR.dom.range(this.root);c.setStart(new CKEDITOR.dom.node(f.startContainer),f.startOffset);c.setEnd(new CKEDITOR.dom.node(f.endContainer),f.endOffset);a.push(c)}return a};return function(c){var d=this._.cache,b=d.ranges;b||(d.ranges= +b=new CKEDITOR.dom.rangeList(a.call(this)));return c?r(new CKEDITOR.dom.rangeList(b.slice())):b}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;var c;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var d=this.getRanges()[0];if(d){if(d.collapsed)c=d.startContainer,c.type!=CKEDITOR.NODE_ELEMENT&&(c=c.getParent());else{for(d.optimize();c=d.startContainer,d.startOffset==(c.getChildCount? +c.getChildCount():c.getLength())&&!c.isBlockBoundary();)d.setStartAfter(c);c=d.startContainer;if(c.type!=CKEDITOR.NODE_ELEMENT)return c.getParent();if((c=c.getChild(d.startOffset))&&c.type==CKEDITOR.NODE_ELEMENT)for(d=c.getFirst();d&&d.type==CKEDITOR.NODE_ELEMENT;)c=d,d=d.getFirst();else c=d.startContainer}c=c.$}}return a.startElement=c?new CKEDITOR.dom.element(c):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var c=this,d=CKEDITOR.tools.tryThese(function(){return c.getNative().createRange().item(0)}, +function(){for(var a=c.getRanges()[0].clone(),d,b,f=2;f&&!((d=a.getEnclosedNode())&&d.type==CKEDITOR.NODE_ELEMENT&&E[d.getName()]&&(b=d));f--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return b&&b.$});return a.selectedElement=d?new CKEDITOR.dom.element(d):null},getSelectedText:function(){var a=this._.cache;if(void 0!==a.selectedText)return a.selectedText;var c=this.getNative(),c=q?"Control"==c.type?"":c.createRange().text:c.toString();return a.selectedText=c},lock:function(){this.getRanges();this.getStartElement(); +this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(c){if(this.isLocked){if(c)var d=this.getSelectedElement(),b=this.getRanges(),f=this.isFake;this.isLocked=0;this.reset();c&&(c=d||b[0]&&b[0].getCommonAncestor())&&c.getAscendant("body",1)&&(this.root.editor.plugins.tableselection&&h(b)?a.call(this,b):f?this.fake(d):d&&2>b.length?this.selectElement(d):this.selectRanges(b))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor; +if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var c=a._.hiddenSelectionContainer;if(c){var d=a.checkDirty();a.fire("lockSnapshot");c.remove();a.fire("unlockSnapshot");!d&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=x++},selectElement:function(a){var c=new CKEDITOR.dom.range(this.root);c.setStartBefore(a);c.setEndAfter(a);this.selectRanges([c])},selectRanges:function(c){var b=this.root.editor,e=b&&b._.hiddenSelectionContainer; +this.reset();if(e)for(var e=this.root,g,l=0;l<c.length;++l)g=c[l],g.endContainer.equals(e)&&(g.endOffset=Math.min(g.endOffset,e.getChildCount()));if(c.length)if(this.isLocked){var k=CKEDITOR.document.getActive();this.unlock();this.selectRanges(c);this.lock();k&&!k.equals(this.root)&&k.focus()}else{var m;a:{var r,w;if(1==c.length&&!(w=c[0]).collapsed&&(m=w.getEnclosedNode())&&m.type==CKEDITOR.NODE_ELEMENT&&(w=w.clone(),w.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(r=w.getEnclosedNode())&&r.type==CKEDITOR.NODE_ELEMENT&& +(m=r),"false"==m.getAttribute("contenteditable")))break a;m=void 0}if(m)this.fake(m);else if(b&&b.plugins.tableselection&&b.plugins.tableselection.isSupportedEnvironment()&&h(c)&&!y&&!c[0]._getTableElement({table:1}).hasAttribute("data-cke-tableselection-ignored"))a.call(this,c);else{if(q){r=CKEDITOR.dom.walker.whitespaces(!0);m=/\ufeff|\u00a0/;w={table:1,tbody:1,tr:1};1<c.length&&(b=c[c.length-1],c[0].setEnd(b.endContainer,b.endOffset));b=c[0];c=b.collapsed;var t,x,u;if((e=b.getEnclosedNode())&& +e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in E&&(!e.is("a")||!e.getText()))try{u=e.$.createControlRange();u.addElement(e.$);u.select();return}catch(p){}if(b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in w||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in w)b.shrink(CKEDITOR.NODE_ELEMENT,!0),c=b.collapsed;u=b.createBookmark();w=u.startNode;c||(k=u.endNode);u=b.document.$.body.createTextRange();u.moveToElementText(w.$);u.moveStart("character",1);k?(m= +b.document.$.body.createTextRange(),m.moveToElementText(k.$),u.setEndPoint("EndToEnd",m),u.moveEnd("character",-1)):(t=w.getNext(r),x=w.hasAscendant("pre"),t=!(t&&t.getText&&t.getText().match(m))&&(x||!w.hasPrevious()||w.getPrevious().is&&w.getPrevious().is("br")),x=b.document.createElement("span"),x.setHtml("\x26#65279;"),x.insertBefore(w),t&&b.document.createText("").insertBefore(w));b.setStartBefore(w);w.remove();c?(t?(u.moveStart("character",-1),u.select(),b.document.$.selection.clear()):u.select(), +b.moveToPosition(x,CKEDITOR.POSITION_BEFORE_START),x.remove()):(b.setEndBefore(k),k.remove(),u.select())}else{k=this.getNative();if(!k)return;this.removeAllRanges();for(u=0;u<c.length;u++){if(u<c.length-1&&(t=c[u],x=c[u+1],m=t.clone(),m.setStart(t.endContainer,t.endOffset),m.setEnd(x.startContainer,x.startOffset),!m.collapsed&&(m.shrink(CKEDITOR.NODE_ELEMENT,!0),b=m.getCommonAncestor(),m=m.getEnclosedNode(),b.isReadOnly()||m&&m.isReadOnly()))){x.setStart(t.startContainer,t.startOffset);c.splice(u--, +1);continue}b=c[u];x=this.document.$.createRange();b.collapsed&&CKEDITOR.env.webkit&&f(b)&&(m=d(this.root),b.insertNode(m),(t=m.getNext())&&!m.getPrevious()&&t.type==CKEDITOR.NODE_ELEMENT&&"br"==t.getName()?(n(this.root),b.moveToPosition(t,CKEDITOR.POSITION_BEFORE_START)):b.moveToPosition(m,CKEDITOR.POSITION_AFTER_END));x.setStart(b.startContainer.$,b.startOffset);try{x.setEnd(b.endContainer.$,b.endOffset)}catch(v){if(0<=v.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))b.collapse(1),x.setEnd(b.endContainer.$, +b.endOffset);else throw v;}k.addRange(x)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a,c){var d=this.root.editor;void 0===c&&a.hasAttribute("aria-label")&&(c=a.getAttribute("aria-label"));this.reset();v(d,c);var b=this._.cache,f=new CKEDITOR.dom.range(this.root);f.setStartBefore(a);f.setEndAfter(a);b.ranges=new CKEDITOR.dom.rangeList(f);b.selectedElement=b.startElement=a;b.type=CKEDITOR.SELECTION_ELEMENT;b.selectedText=b.nativeSel=null;this.isFake=1;this.rev=x++;d._.fakeSelection= +this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},isInTable:function(a){return h(this.getRanges(),a)},isCollapsed:function(){var a=this.getRanges();return 1===a.length&&a[0].collapsed},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake= +1);return a},selectBookmarks:function(a){for(var c=[],d,b=0;b<a.length;b++){var f=new CKEDITOR.dom.range(this.root);f.moveToBookmark(a[b]);c.push(f)}a.isFake&&(d=h(c)?c[0]._getTableElement():c[0].getEnclosedNode(),d&&d.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),a.isFake=0));a.isFake&&!h(c)?this.fake(d):this.selectRanges(c);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null}, +scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[q?"empty":"removeAllRanges"]()}catch(c){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;(function(){function b(a,c){for(var d,b;(a=a.getParent())&&!a.equals(c);)if(a.getAttribute("data-nostyle"))d=a;else if(!b){var f=a.getAttribute("contentEditable"); +"false"==f?d=a:"true"==f&&(b=1)}return d}function h(a,c,d,b){return(a.getPosition(c)|b)==b&&(!d.childRule||d.childRule(a))}function g(c){var d=c.document;if(c.collapsed)d=x(this,d),c.insertNode(d),c.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var f=this.element,e=this._.definition,n,k=e.ignoreReadonly,l=k||e.includeReadonly;null==l&&(l=c.root.getCustomData("cke_includeReadonly"));var m=CKEDITOR.dtd[f];m||(n=!0,m=CKEDITOR.dtd.span);c.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.trim();var q=c.createBookmark(), +r=q.startNode,w=q.endNode,t=r,u;if(!k){var v=c.getCommonAncestor(),k=b(r,v),v=b(w,v);k&&(t=k.getNextSourceNode(!0));v&&(w=v)}for(t.getPosition(w)==CKEDITOR.POSITION_FOLLOWING&&(t=0);t;){k=!1;if(t.equals(w))t=null,k=!0;else{var y=t.type==CKEDITOR.NODE_ELEMENT?t.getName():null,v=y&&"false"==t.getAttribute("contentEditable"),z=y&&t.getAttribute("data-nostyle");if(y&&t.data("cke-bookmark")||t.type===CKEDITOR.NODE_COMMENT){t=t.getNextSourceNode(!0);continue}if(v&&l&&CKEDITOR.dtd.$block[y])for(var B=t, +A=a(B),E=void 0,Q=A.length,P=0,B=Q&&new CKEDITOR.dom.range(B.getDocument());P<Q;++P){var E=A[P],ga=CKEDITOR.filter.instances[E.data("cke-filter")];if(ga?ga.check(this):1)B.selectNodeContents(E),g.call(this,B)}A=y?!m[y]||z?0:v&&!l?0:h(t,w,e,M):1;if(A)if(E=t.getParent(),A=e,Q=f,P=n,!E||!(E.getDtd()||CKEDITOR.dtd.span)[Q]&&!P||A.parentRule&&!A.parentRule(E))k=!0;else{if(u||y&&CKEDITOR.dtd.$removeEmpty[y]&&(t.getPosition(w)|M)!=M||(u=c.clone(),u.setStartBefore(t)),y=t.type,y==CKEDITOR.NODE_TEXT||v||y== +CKEDITOR.NODE_ELEMENT&&!t.getChildCount()){for(var y=t,ia;(k=!y.getNext(L))&&(ia=y.getParent(),m[ia.getName()])&&h(ia,r,e,H);)y=ia;u.setEndAfter(y)}}else k=!0;t=t.getNextSourceNode(z||v)}if(k&&u&&!u.collapsed){for(var k=x(this,d),v=k.hasAttributes(),z=u.getCommonAncestor(),y={},A={},E={},Q={},ha,fa,C;k&&z;){if(z.getName()==f){for(ha in e.attributes)!Q[ha]&&(C=z.getAttribute(fa))&&(k.getAttribute(ha)==C?A[ha]=1:Q[ha]=1);for(fa in e.styles)!E[fa]&&(C=z.getStyle(fa))&&(k.getStyle(fa)==C?y[fa]=1:E[fa]= +1)}z=z.getParent()}for(ha in A)k.removeAttribute(ha);for(fa in y)k.removeStyle(fa);v&&!k.hasAttributes()&&(k=null);k?(u.extractContents().appendTo(k),u.insertNode(k),p.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element("span"),u.extractContents().appendTo(k),u.insertNode(k),p.call(this,k),k.remove(!0));u=null}}c.moveToBookmark(q);c.shrink(CKEDITOR.SHRINK_TEXT);c.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function e(a){function c(){for(var a=new CKEDITOR.dom.elementPath(b.getParent()), +d=new CKEDITOR.dom.elementPath(l.getParent()),f=null,e=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,!0)&&(f=h)}for(g=0;g<d.elements.length;g++){h=d.elements[g];if(h==d.block||h==d.blockLimit)break;m.checkElementRemovable(h,!0)&&(e=h)}e&&l.breakParent(e);f&&b.breakParent(f)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var d=a.createBookmark(),b=d.startNode,f=this._.definition.alwaysRemoveElement;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(b.getParent(), +a.root),g,h=0,k;h<e.elements.length&&(k=e.elements[h])&&k!=e.block&&k!=e.blockLimit;h++)if(this.checkElementRemovable(k)){var n;!f&&a.collapsed&&(a.checkBoundaryOfElement(k,CKEDITOR.END)||(n=a.checkBoundaryOfElement(k,CKEDITOR.START)))?(g=k,g.match=n?"start":"end"):(k.mergeSiblings(),k.is(this.element)?v.call(this,k):r(k,y(this)[k.getName()]))}if(g){f=b;for(h=0;;h++){k=e.elements[h];if(k.equals(g))break;else if(k.match)continue;else k=k.clone();k.append(f);f=k}f["start"==g.match?"insertBefore":"insertAfter"](g)}}else{var l= +d.endNode,m=this;c();for(e=b;!e.equals(l);)g=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?v.call(this,e):r(e,y(this)[e.getName()]),g.type==CKEDITOR.NODE_ELEMENT&&g.contains(b)&&(c(),g=b.getNext())),e=g}a.moveToBookmark(d);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function a(a){var c=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return c.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return c}function m(a){var c=a.getEnclosedNode()|| +a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1))&&!a.isReadOnly()&&t(a,this)}function l(a){var c=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1)){var c=this._.definition,d=c.attributes;if(d)for(var b in d)a.removeAttribute(b,d[b]);if(c.styles)for(var f in c.styles)c.styles.hasOwnProperty(f)&&a.removeStyle(f)}}function k(a){var c=a.createBookmark(!0),d=a.createIterator();d.enforceRealBlocks=!0;this._.enterMode&& +(d.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var b,e=a.document,g;b=d.getNextParagraph();)!b.isReadOnly()&&(d.activeFilter?d.activeFilter.check(this):1)&&(g=x(this,e,b),f(b,g));a.moveToBookmark(c)}function c(a){var c=a.createBookmark(1),d=a.createIterator();d.enforceRealBlocks=!0;d.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var b,e;b=d.getNextParagraph();)this.checkElementRemovable(b)&&(b.is("pre")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode== +CKEDITOR.ENTER_P?"p":"div"))&&b.copyAttributes(e),f(b,e)):v.call(this,b));a.moveToBookmark(c)}function f(a,c){var b=!c;b&&(c=a.getDocument().createElement("div"),a.copyAttributes(c));var f=c&&c.is("pre"),e=a.is("pre"),g=!f&&e;if(f&&!e){e=c;(g=a.getBogus())&&g.remove();g=a.getHtml();g=n(g,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");g=g.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g," ");g=g.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div"); +h.append(e);e.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(g);c=e}else g?c=w(b?[a.getHtml()]:d(a),c):a.moveChildren(c);c.replace(a);if(f){var b=c,k;(k=b.getPrevious(F))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(f=n(k.getHtml(),/\n$/,"")+"\n\n"+n(b.getHtml(),/^\n/,""),CKEDITOR.env.ie?b.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e":b.setHtml(f),k.remove())}else b&&q(c)}function d(a){var c=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi, +function(a,c,d){return c+"\x3c/pre\x3e"+d+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,d){c.push(d)});return c}function n(a,c,d){var b="",f="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,c,d){c&&(b=c);d&&(f=d);return""});return b+a.replace(c,d)+f}function w(a,c){var d;1<a.length&&(d=new CKEDITOR.dom.documentFragment(c.getDocument()));for(var b=0;b<a.length;b++){var f=a[b],f=f.replace(/(\r\n|\r)/g,"\n"),f=n(f,/^[ \t]*\n/, +""),f=n(f,/\n$/,""),f=n(f,/^[ \t]+|[ \t]+$/g,function(a,c){return 1==a.length?"\x26nbsp;":c?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),f=f.replace(/\n/g,"\x3cbr\x3e"),f=f.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(d){var e=c.clone();e.setHtml(f);d.append(e)}else c.setHtml(f)}return d||c}function v(a,c){var d=this._.definition,b=d.attributes,d=d.styles,f=y(this)[a.getName()],e=CKEDITOR.tools.isEmpty(b)&& +CKEDITOR.tools.isEmpty(d),g;for(g in b)if("class"!=g&&!this._.definition.fullMatch||a.getAttribute(g)==u(g,b[g]))c&&"data-"==g.slice(0,5)||(e=a.hasAttribute(g),a.removeAttribute(g));for(var h in d)this._.definition.fullMatch&&a.getStyle(h)!=u(h,d[h],!0)||(e=e||!!a.getStyle(h),a.removeStyle(h));r(a,f,A[a.getName()]);e&&(this._.definition.alwaysRemoveElement?q(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?q(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P? +"p":"div"))}function p(a){for(var c=y(this),d=a.getElementsByTag(this.element),b,f=d.count();0<=--f;)b=d.getItem(f),b.isReadOnly()||v.call(this,b,!0);for(var e in c)if(e!=this.element)for(d=a.getElementsByTag(e),f=d.count()-1;0<=f;f--)b=d.getItem(f),b.isReadOnly()||r(b,c[e])}function r(a,c,d){if(c=c&&c.attributes)for(var b=0;b<c.length;b++){var f=c[b][0],e;if(e=a.getAttribute(f)){var g=c[b][1];(null===g||g.test&&g.test(e)||"string"==typeof g&&e==g)&&a.removeAttribute(f)}}d||q(a)}function q(a,c){if(!a.hasAttributes()|| +c)if(CKEDITOR.dtd.$block[a.getName()]){var d=a.getPrevious(F),b=a.getNext(F);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br",1);!b||b.type!=CKEDITOR.NODE_TEXT&&b.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else d=a.getFirst(),b=a.getLast(),a.remove(!0),d&&(d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings(),b&&!d.equals(b)&&b.type==CKEDITOR.NODE_ELEMENT&&b.mergeSiblings())}function x(a,c,d){var b;b=a.element;"*"==b&&(b="span");b=new CKEDITOR.dom.element(b,c);d&&d.copyAttributes(b); +b=t(b,a);c.getCustomData("doc_processing_style")&&b.hasAttribute("id")?b.removeAttribute("id"):c.setCustomData("doc_processing_style",1);return b}function t(a,c){var d=c._.definition,b=d.attributes,d=CKEDITOR.style.getStyleText(d);if(b)for(var f in b)a.setAttribute(f,b[f]);d&&a.setAttribute("style",d);a.getDocument().removeCustomData("doc_processing_style");return a}function z(a,c){for(var d in a)a[d]=a[d].replace(I,function(a,d){return c[d]})}function y(a){if(a._.overrides)return a._.overrides;var c= +a._.overrides={},d=a._.definition.overrides;if(d){CKEDITOR.tools.isArray(d)||(d=[d]);for(var b=0;b<d.length;b++){var f=d[b],e,g;"string"==typeof f?e=f.toLowerCase():(e=f.element?f.element.toLowerCase():a.element,g=f.attributes);f=c[e]||(c[e]={});if(g){var f=f.attributes=f.attributes||[],h;for(h in g)f.push([h.toLowerCase(),g[h]])}}}return c}function u(a,c,d){var b=new CKEDITOR.dom.element("span");b[d?"setStyle":"setAttribute"](a,c);return b[d?"getStyle":"getAttribute"](a)}function B(a,c){function d(a, +c){return"font-family"==c.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof c&&(c=CKEDITOR.tools.parseCssText(c,!0));for(var b in a)if(!(b in c)||d(c[b],b)!=d(a[b],b)&&"inherit"!=a[b]&&"inherit"!=c[b])return!1;return!0}function C(a,c,d){var b=a.getRanges();c=c?this.removeFromRange:this.applyToRange;for(var f,e=b.createIterator();f=e.getNextRange();)c.call(this,f,d);a.selectRanges(b)}var A={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1, +pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},E={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},G=/\s*(?:;\s*|$)/,I=/#\((.+?)\)/g,L=CKEDITOR.dom.walker.bookmark(0,1),F=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,c){if("string"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a); +var d=a.attributes;d&&d.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(d.style)),delete d.style);c&&(a=CKEDITOR.tools.clone(a),z(a.attributes,c),z(a.styles,c));d=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(A[d]?CKEDITOR.STYLE_BLOCK:E[d]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof +CKEDITOR.dom.document)return C.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);C.call(this,a.getSelection(),0,a);this._.enterMode=c}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return C.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);C.call(this,a.getSelection(),1,a);this._.enterMode=c}},applyToRange:function(a){this.applyToRange= +this.type==CKEDITOR.STYLE_INLINE?g:this.type==CKEDITOR.STYLE_BLOCK?k:this.type==CKEDITOR.STYLE_OBJECT?m:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?c:this.type==CKEDITOR.STYLE_OBJECT?l:null;return this.removeFromRange(a)},applyToObject:function(a){t(a,this)},checkActive:function(a,c){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,c);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var d= +a.elements,b=0,f;b<d.length;b++)if(f=d[b],this.type!=CKEDITOR.STYLE_INLINE||f!=a.block&&f!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var e=f.getName();if(!("string"==typeof this.element?e==this.element:e in this.element))continue}if(this.checkElementRemovable(f,!0,c))return!0}}return!1},checkApplicable:function(a,c,d){c&&c instanceof CKEDITOR.filter&&(d=c);if(d&&!d.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0}, +checkElementMatch:function(a,c){var d=this._.definition;if(!a||!d.ignoreReadonly&&a.isReadOnly())return!1;var b=a.getName();if("string"==typeof this.element?b==this.element:b in this.element){if(!c&&!a.hasAttributes())return!0;if(b=d._AC)d=b;else{var b={},f=0,e=d.attributes;if(e)for(var g in e)f++,b[g]=e[g];if(g=CKEDITOR.style.getStyleText(d))b.style||f++,b.style=g;b._length=f;d=d._AC=b}if(d._length){for(var h in d)if("_length"!=h)if(b=a.getAttribute(h)||"","style"==h?B(d[h],b):d[h]==b){if(!c)return!0}else if(c)return!1; +if(c)return!0}else return!0}return!1},checkElementRemovable:function(a,c,d){if(this.checkElementMatch(a,c,d))return!0;if(c=y(this)[a.getName()]){var b;if(!(c=c.attributes))return!0;for(d=0;d<c.length;d++)if(b=c[d][0],b=a.getAttribute(b)){var f=c[d][1];if(null===f)return!0;if("string"==typeof f){if(b==f)return!0}else if(f.test(b))return!0}}return!1},buildPreview:function(a){var c=this._.definition,d=[],b=c.element;"bdo"==b&&(b="span");var d=["\x3c",b],f=c.attributes;if(f)for(var e in f)d.push(" ", +e,'\x3d"',f[e],'"');(f=CKEDITOR.style.getStyleText(c))&&d.push(' style\x3d"',f,'"');d.push("\x3e",a||c.name,"\x3c/",b,"\x3e");return d.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var c=a._ST;if(c)return c;var c=a.styles,d=a.attributes&&a.attributes.style||"",b="";d.length&&(d=d.replace(G,";"));for(var f in c){var e=c[f],g=(f+":"+e).replace(G,";");"inherit"==e?b+=g:d+=g}d.length&&(d=CKEDITOR.tools.normalizeCssText(d,!0));return a._ST=d+b};CKEDITOR.style.customHandlers= {};CKEDITOR.style.addCustomHandler=function(a){var c=function(a){this._={definition:a};this.setup&&this.setup(a)};c.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,!0);return this.customHandlers[a.type]=c};var M=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,H=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(b, h){this.requiredContent=this.allowedContent=this.style=b;CKEDITOR.tools.extend(this,h,!0)};CKEDITOR.styleCommand.prototype.exec=function(b){b.focus();this.state==CKEDITOR.TRISTATE_OFF?b.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&b.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(b,h,g){CKEDITOR.stylesSet.addExternal(b,h,"");CKEDITOR.stylesSet.load(b, -g)};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(b,h){var g=this._.styleStateChangeCallbacks;g||(g=this._.styleStateChangeCallbacks=[],this.on("selectionChange",function(b){for(var a=0;a<g.length;a++){var h=g[a],k=h.style.checkActive(b.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;h.fn.call(this,k)}}));g.push({style:b,fn:h})},applyStyle:function(b){b.apply(this)},removeStyle:function(b){b.remove(this)},getStylesSet:function(b){if(this._.stylesDefinitions)b(this._.stylesDefinitions); -else{var h=this,g=h.config.stylesCombo_stylesSet||h.config.stylesSet;if(!1===g)b(null);else if(g instanceof Array)h._.stylesDefinitions=g,b(g);else{g||(g="default");var g=g.split(":"),f=g[0];CKEDITOR.stylesSet.addExternal(f,g[1]?g.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(f,function(a){h._.stylesDefinitions=a[f];b(h._.stylesDefinitions)})}}}});(function(){if(window.Promise)CKEDITOR.tools.promise=Promise;else{var b=CKEDITOR.getUrl("vendor/promise.js");if("function"=== -typeof window.define&&window.define.amd&&"function"===typeof window.require)return window.require([b],function(b){CKEDITOR.tools.promise=b});CKEDITOR.scriptLoader.load(b,function(h){if(!h)return CKEDITOR.error("no-vendor-lib",{path:b});if("undefined"!==typeof window.ES6Promise)return CKEDITOR.tools.promise=ES6Promise})}})();(function(){function b(b,a,m){b.once("selectionCheck",function(b){if(!h){var f=b.data.getRanges()[0];m.equals(f)?b.cancel():a.equals(f)&&(g=!0)}},null,null,-1)}var h=!0,g=!1;CKEDITOR.dom.selection.setupEditorOptimization= -function(b){b.on("selectionCheck",function(a){a.data&&!g&&a.data.optimizeInElementEnds();g=!1});b.on("contentDom",function(){var a=b.editable();a&&(a.attachListener(a,"keydown",function(a){this._.shiftPressed=a.data.$.shiftKey},this),a.attachListener(a,"keyup",function(a){this._.shiftPressed=a.data.$.shiftKey},this))})};CKEDITOR.dom.selection.prototype.optimizeInElementEnds=function(){var f=this.getRanges()[0],a=this.root.editor,g;if(this.root.editor._.shiftPressed||this.isFake||f.isCollapsed||f.startContainer.equals(f.endContainer))g= -!1;else if(0===f.endOffset)g=!0;else{g=f.startContainer.type===CKEDITOR.NODE_TEXT;var k=f.endContainer.type===CKEDITOR.NODE_TEXT,l=g?f.startContainer.getLength():f.startContainer.getChildCount();g=f.startOffset===l||g^k}g&&(g=f.clone(),f.shrink(CKEDITOR.SHRINK_TEXT,!1,{skipBogus:!0}),h=!1,b(a,f,g),f.select(),h=!0)}})();CKEDITOR.dom.comment=function(b,h){"string"==typeof b&&(b=(h?h.$:document).createComment(b));CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node; -CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"\x3c!--"+this.$.nodeValue+"--\x3e"}});"use strict";(function(){var b={},h={},g;for(g in CKEDITOR.dtd.$blockLimit)g in CKEDITOR.dtd.$list||(b[g]=1);for(g in CKEDITOR.dtd.$block)g in CKEDITOR.dtd.$blockLimit||g in CKEDITOR.dtd.$empty||(h[g]=1);CKEDITOR.dom.elementPath=function(f,a){var g=null,k=null,l=[],d=f,e;a=a||f.getDocument().getBody();d||(d=a);do if(d.type==CKEDITOR.NODE_ELEMENT){l.push(d); -if(!this.lastElement&&(this.lastElement=d,d.is(CKEDITOR.dtd.$object)||"false"==d.getAttribute("contenteditable")))continue;if(d.equals(a))break;if(!k&&(e=d.getName(),"true"==d.getAttribute("contenteditable")?k=d:!g&&h[e]&&(g=d),b[e])){if(e=!g&&"div"==e){a:{e=d.getChildren();for(var c=0,n=e.count();c<n;c++){var w=e.getItem(c);if(w.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[w.getName()]){e=!0;break a}}e=!1}e=!e}e?g=d:k=d}}while(d=d.getParent());k||(k=a);this.block=g;this.blockLimit=k;this.root= -a;this.elements=l}})();CKEDITOR.dom.elementPath.prototype={compare:function(b){var h=this.elements;b=b&&b.elements;if(!b||h.length!=b.length)return!1;for(var g=0;g<h.length;g++)if(!h[g].equals(b[g]))return!1;return!0},contains:function(b,h,g){var f=0,a;"string"==typeof b&&(a=function(a){return a.getName()==b});b instanceof CKEDITOR.dom.element?a=function(a){return a.equals(b)}:CKEDITOR.tools.isArray(b)?a=function(a){return-1<CKEDITOR.tools.indexOf(b,a.getName())}:"function"==typeof b?a=b:"object"== -typeof b&&(a=function(a){return a.getName()in b});var m=this.elements,k=m.length;h&&(g?f+=1:--k);g&&(m=Array.prototype.slice.call(m,0),m.reverse());for(;f<k;f++)if(a(m[f]))return m[f];return null},isContextFor:function(b){var h;return b in CKEDITOR.dtd.$block?(h=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!h.getDtd()[b]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}};CKEDITOR.dom.text=function(b,h){"string"== +g)};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(b,h){var g=this._.styleStateChangeCallbacks;g||(g=this._.styleStateChangeCallbacks=[],this.on("selectionChange",function(b){for(var a=0;a<g.length;a++){var h=g[a],l=h.style.checkActive(b.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;h.fn.call(this,l)}}));g.push({style:b,fn:h})},applyStyle:function(b){b.apply(this)},removeStyle:function(b){b.remove(this)},getStylesSet:function(b){if(this._.stylesDefinitions)b(this._.stylesDefinitions); +else{var h=this,g=h.config.stylesCombo_stylesSet||h.config.stylesSet;if(!1===g)b(null);else if(g instanceof Array)h._.stylesDefinitions=g,b(g);else{g||(g="default");var g=g.split(":"),e=g[0];CKEDITOR.stylesSet.addExternal(e,g[1]?g.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(e,function(a){h._.stylesDefinitions=a[e];b(h._.stylesDefinitions)})}}}});(function(){if(window.Promise)CKEDITOR.tools.promise=Promise;else{var b=CKEDITOR.getUrl("vendor/promise.js");if("function"=== +typeof window.define&&window.define.amd&&"function"===typeof window.require)return window.require([b],function(b){CKEDITOR.tools.promise=b});CKEDITOR.scriptLoader.load(b,function(h){if(!h)return CKEDITOR.error("no-vendor-lib",{path:b});if("undefined"!==typeof window.ES6Promise)return CKEDITOR.tools.promise=ES6Promise})}})();(function(){function b(b,a,m){b.once("selectionCheck",function(b){if(!h){var e=b.data.getRanges()[0];m.equals(e)?b.cancel():a.equals(e)&&(g=!0)}},null,null,-1)}var h=!0,g=!1;CKEDITOR.dom.selection.setupEditorOptimization= +function(b){b.on("selectionCheck",function(a){a.data&&!g&&a.data.optimizeInElementEnds();g=!1});b.on("contentDom",function(){var a=b.editable();a&&(a.attachListener(a,"keydown",function(a){this._.shiftPressed=a.data.$.shiftKey},this),a.attachListener(a,"keyup",function(a){this._.shiftPressed=a.data.$.shiftKey},this))})};CKEDITOR.dom.selection.prototype.optimizeInElementEnds=function(){var e=this.getRanges()[0],a=this.root.editor,g;if(this.root.editor._.shiftPressed||this.isFake||e.isCollapsed||e.startContainer.equals(e.endContainer))g= +!1;else if(0===e.endOffset)g=!0;else{g=e.startContainer.type===CKEDITOR.NODE_TEXT;var l=e.endContainer.type===CKEDITOR.NODE_TEXT,k=g?e.startContainer.getLength():e.startContainer.getChildCount();g=e.startOffset===k||g^l}g&&(g=e.clone(),e.shrink(CKEDITOR.SHRINK_TEXT,!1,{skipBogus:!CKEDITOR.env.webkit}),h=!1,b(a,e,g),e.select(),h=!0)}})();CKEDITOR.dom.comment=function(b,h){"string"==typeof b&&(b=(h?h.$:document).createComment(b));CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"\x3c!--"+this.$.nodeValue+"--\x3e"}});"use strict";(function(){var b={},h={},g;for(g in CKEDITOR.dtd.$blockLimit)g in CKEDITOR.dtd.$list||(b[g]=1);for(g in CKEDITOR.dtd.$block)g in CKEDITOR.dtd.$blockLimit||g in CKEDITOR.dtd.$empty||(h[g]=1);CKEDITOR.dom.elementPath=function(e,a){var g=null,l=null,k=[],c=e,f;a=a||e.getDocument().getBody();c||(c=a);do if(c.type==CKEDITOR.NODE_ELEMENT){k.push(c); +if(!this.lastElement&&(this.lastElement=c,c.is(CKEDITOR.dtd.$object)||"false"==c.getAttribute("contenteditable")))continue;if(c.equals(a))break;if(!l&&(f=c.getName(),"true"==c.getAttribute("contenteditable")?l=c:!g&&h[f]&&(g=c),b[f])){if(f=!g&&"div"==f){a:{f=c.getChildren();for(var d=0,n=f.count();d<n;d++){var w=f.getItem(d);if(w.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[w.getName()]){f=!0;break a}}f=!1}f=!f}f?g=c:l=c}}while(c=c.getParent());l||(l=a);this.block=g;this.blockLimit=l;this.root= +a;this.elements=k}})();CKEDITOR.dom.elementPath.prototype={compare:function(b){var h=this.elements;b=b&&b.elements;if(!b||h.length!=b.length)return!1;for(var g=0;g<h.length;g++)if(!h[g].equals(b[g]))return!1;return!0},contains:function(b,h,g){var e=0,a;"string"==typeof b&&(a=function(a){return a.getName()==b});b instanceof CKEDITOR.dom.element?a=function(a){return a.equals(b)}:CKEDITOR.tools.isArray(b)?a=function(a){return-1<CKEDITOR.tools.indexOf(b,a.getName())}:"function"==typeof b?a=b:"object"== +typeof b&&(a=function(a){return a.getName()in b});var m=this.elements,l=m.length;h&&(g?e+=1:--l);g&&(m=Array.prototype.slice.call(m,0),m.reverse());for(;e<l;e++)if(a(m[e]))return m[e];return null},isContextFor:function(b){var h;return b in CKEDITOR.dtd.$block?(h=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!h.getDtd()[b]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}};CKEDITOR.dom.text=function(b,h){"string"== typeof b&&(b=(h?h.$:document).createTextNode(b));this.$=b};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(b){this.$.nodeValue=b},isEmpty:function(b){var h=this.getText();b&&(h=CKEDITOR.tools.trim(h));return!h||h===CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE},split:function(b){var h=this.$.parentNode,g=h.childNodes.length, -f=this.getLength(),a=this.getDocument(),m=new CKEDITOR.dom.text(this.$.splitText(b),a);h.childNodes.length==g&&(b>=f?(m=a.createText(""),m.insertAfter(this)):(b=a.createText(""),b.insertAfter(m),b.remove()));return m},substring:function(b,h){return"number"!=typeof h?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,h)}});(function(){function b(b,f,a){var h=b.serializable,k=f[a?"endContainer":"startContainer"],l=a?"endOffset":"startOffset",d=h?f.document.getById(b.startNode):b.startNode;b=h? -f.document.getById(b.endNode):b.endNode;k.equals(d.getPrevious())?(f.startOffset=f.startOffset-k.getLength()-b.getPrevious().getLength(),k=b.getNext()):k.equals(b.getPrevious())&&(f.startOffset-=k.getLength(),k=b.getNext());k.equals(d.getParent())&&f[l]++;k.equals(b.getParent())&&f[l]++;f[a?"endContainer":"startContainer"]=k;return f}CKEDITOR.dom.rangeList=function(b){if(b instanceof CKEDITOR.dom.rangeList)return b;b?b instanceof CKEDITOR.dom.range&&(b=[b]):b=[];return CKEDITOR.tools.extend(b,h)}; -var h={createIterator:function(){var b=this,f=CKEDITOR.dom.walker.bookmark(),a=[],h;return{getNextRange:function(k){h=void 0===h?0:h+1;var l=b[h];if(l&&1<b.length){if(!h)for(var d=b.length-1;0<=d;d--)a.unshift(b[d].createBookmark(!0));if(k)for(var e=0;b[h+e+1];){var c=l.document;k=0;d=c.getById(a[e].endNode);for(c=c.getById(a[e+1].startNode);;){d=d.getNextSourceNode(!1);if(c.equals(d))k=1;else if(f(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary())continue;break}if(!k)break;e++}for(l.moveToBookmark(a.shift());e--;)d= -b[++h],d.moveToBookmark(a.shift()),l.setEnd(d.endContainer,d.endOffset)}return l}}},createBookmarks:function(g){for(var f=[],a,h=0;h<this.length;h++){f.push(a=this[h].createBookmark(g,!0));for(var k=h+1;k<this.length;k++)this[k]=b(a,this[k]),this[k]=b(a,this[k],!0)}return f},createBookmarks2:function(b){for(var f=[],a=0;a<this.length;a++)f.push(this[a].createBookmark2(b));return f},moveToBookmarks:function(b){for(var f=0;f<this.length;f++)this[f].moveToBookmark(b[f])}}})();(function(){function b(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]|| -"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function h(a){var c=CKEDITOR.skin["ua_"+a],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,c){return a>c?-1:1}),f=0,g;f<c.length;f++)if(g=c[f],d.ie&&(g.replace(/^ie/,"")==d.version||d.quirks&&"iequirks"==g)&&(g="ie"),d[g]){a+="_"+c[f];break}return CKEDITOR.getUrl(b()+a+".css")}function g(a,c){m[a]||(CKEDITOR.document.appendStyleSheet(h(a)),m[a]=1);c&&c()}function f(a){var c=a.getById(k);c||(c=a.getHead().append("style"),c.setAttribute("id", -k),c.setAttribute("type","text/css"));return c}function a(a,c,d){var b,f,g;if(CKEDITOR.env.webkit)for(c=c.split("}").slice(0,-1),f=0;f<c.length;f++)c[f]=c[f].split("{");for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(f=0;f<c.length;f++){g=c[f][1];for(b=0;b<d.length;b++)g=g.replace(d[b][0],d[b][1]);a[h].$.sheet.addRule(c[f][0],g)}else{g=c;for(b=0;b<d.length;b++)g=g.replace(d[b][0],d[b][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?a[h].$.styleSheet.cssText+=g:a[h].$.innerHTML+=g}}var m={};CKEDITOR.skin= -{path:b,loadPart:function(a,c){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b()+"skin.js"),function(){g(a,c)}):g(a,c)},getPath:function(a){return CKEDITOR.getUrl(h(a))},icons:{},addIcon:function(a,c,d,b){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:c,offset:d||0,bgsize:b||"16px"})},getIconStyle:function(a,c,d,b,f){var g;a&&(a=a.toLowerCase(),c&&(g=this.icons[a+"-rtl"]),g||(g=this.icons[a]));a=d||g&&g.path||"";b=b||g&&g.offset;f=f||g&&g.bgsize|| -"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+b+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(b){var c=f(CKEDITOR.document);return(this.setUiColor=function(b){this.uiColor=b;var e=CKEDITOR.skin.chameleon,f="",g="";"function"==typeof e&&(f=e(this,"editor"),g=e(this,"panel"));b=[[d,b]];a([c],f,b);a(l,g,b)}).call(this,b)}});var k="cke_ui_color", -l=[],d=/\$color/g;CKEDITOR.on("instanceLoaded",function(b){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var c=b.editor;b=function(b){b=(b.data[0]||b.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!b.getById("cke_ui_color")){var e=f(b);l.push(e);c.on("destroy",function(){l=CKEDITOR.tools.array.filter(l,function(a){return e!==a})});(b=c.getUiColor())&&a([e],CKEDITOR.skin.chameleon(c,"panel"),[[d,b]])}};c.on("panelShow",b);c.on("menuShow",b);c.config.uiColor&&c.setUiColor(c.config.uiColor)}})})(); -(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var b=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{var h=b.getComputedStyle("border-top-color"),g=b.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!h||h!=g)}catch(f){CKEDITOR.env.hc=!1}b.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); -CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending)for(delete CKEDITOR._.pending,h=0;h<b.length;h++)CKEDITOR.editor.prototype.constructor.apply(b[h][0],b[h][1]),CKEDITOR.add(b[h][0])})();CKEDITOR.skin.name="moono-lisa";CKEDITOR.skin.ua_editor="ie,iequirks,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie8";CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,f){for(var a=b.match(/[^#]./g),h=0;3>h;h++){var k=h,l;l=parseInt(a[h],16);l=("0"+(0>f?0|l*(1+f): -0|l+(255-l)*f).toString(16)).slice(-2);a[k]=l}return"#"+a.join("")}}(),h={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover,{id} a.cke_path_item:focus,{id} a.cke_path_item:active [background-color:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "), +e=this.getLength(),a=this.getDocument(),m=new CKEDITOR.dom.text(this.$.splitText(b),a);h.childNodes.length==g&&(b>=e?(m=a.createText(""),m.insertAfter(this)):(b=a.createText(""),b.insertAfter(m),b.remove()));return m},substring:function(b,h){return"number"!=typeof h?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,h)}});(function(){function b(b,e,a){var h=b.serializable,l=e[a?"endContainer":"startContainer"],k=a?"endOffset":"startOffset",c=h?e.document.getById(b.startNode):b.startNode;b=h? +e.document.getById(b.endNode):b.endNode;l.equals(c.getPrevious())?(e.startOffset=e.startOffset-l.getLength()-b.getPrevious().getLength(),l=b.getNext()):l.equals(b.getPrevious())&&(e.startOffset-=l.getLength(),l=b.getNext());l.equals(c.getParent())&&e[k]++;l.equals(b.getParent())&&e[k]++;e[a?"endContainer":"startContainer"]=l;return e}CKEDITOR.dom.rangeList=function(b){if(b instanceof CKEDITOR.dom.rangeList)return b;b?b instanceof CKEDITOR.dom.range&&(b=[b]):b=[];return CKEDITOR.tools.extend(b,h)}; +var h={createIterator:function(){var b=this,e=CKEDITOR.dom.walker.bookmark(),a=[],h;return{getNextRange:function(l){h=void 0===h?0:h+1;var k=b[h];if(k&&1<b.length){if(!h)for(var c=b.length-1;0<=c;c--)a.unshift(b[c].createBookmark(!0));if(l)for(var f=0;b[h+f+1];){var d=k.document;l=0;c=d.getById(a[f].endNode);for(d=d.getById(a[f+1].startNode);;){c=c.getNextSourceNode(!1);if(d.equals(c))l=1;else if(e(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())continue;break}if(!l)break;f++}for(k.moveToBookmark(a.shift());f--;)c= +b[++h],c.moveToBookmark(a.shift()),k.setEnd(c.endContainer,c.endOffset)}return k}}},createBookmarks:function(g){for(var e=[],a,h=0;h<this.length;h++){e.push(a=this[h].createBookmark(g,!0));for(var l=h+1;l<this.length;l++)this[l]=b(a,this[l]),this[l]=b(a,this[l],!0)}return e},createBookmarks2:function(b){for(var e=[],a=0;a<this.length;a++)e.push(this[a].createBookmark2(b));return e},moveToBookmarks:function(b){for(var e=0;e<this.length;e++)this[e].moveToBookmark(b[e])}}})();(function(){function b(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]|| +"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function h(a){var c=CKEDITOR.skin["ua_"+a],e=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,c){return a>c?-1:1}),g=0,h;g<c.length;g++)if(h=c[g],e.ie&&(h.replace(/^ie/,"")==e.version||e.quirks&&"iequirks"==h)&&(h="ie"),e[h]){a+="_"+c[g];break}return CKEDITOR.getUrl(b()+a+".css")}function g(a,c){m[a]||(CKEDITOR.document.appendStyleSheet(h(a)),m[a]=1);c&&c()}function e(a){var c=a.getById(l);c||(c=a.getHead().append("style"),c.setAttribute("id", +l),c.setAttribute("type","text/css"));return c}function a(a,c,b){var e,g,h;if(CKEDITOR.env.webkit)for(c=c.split("}").slice(0,-1),g=0;g<c.length;g++)c[g]=c[g].split("{");for(var k=0;k<a.length;k++)if(CKEDITOR.env.webkit)for(g=0;g<c.length;g++){h=c[g][1];for(e=0;e<b.length;e++)h=h.replace(b[e][0],b[e][1]);a[k].$.sheet.addRule(c[g][0],h)}else{h=c;for(e=0;e<b.length;e++)h=h.replace(b[e][0],b[e][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?a[k].$.styleSheet.cssText+=h:a[k].$.innerHTML+=h}}var m={};CKEDITOR.skin= +{path:b,loadPart:function(a,c){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b()+"skin.js"),function(){g(a,c)}):g(a,c)},getPath:function(a){return CKEDITOR.getUrl(h(a))},icons:{},addIcon:function(a,c,b,e){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:c,offset:b||0,bgsize:e||"16px"})},getIconStyle:function(a,c,b,e,g){var h;a&&(a=a.toLowerCase(),c&&(h=this.icons[a+"-rtl"]),h||(h=this.icons[a]));a=b||h&&h.path||"";e=e||h&&h.offset;g=g||h&&h.bgsize|| +"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+e+"px;background-size:"+g+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(b){var d=e(CKEDITOR.document);return(this.setUiColor=function(b){this.uiColor=b;var f=CKEDITOR.skin.chameleon,e="",g="";"function"==typeof f&&(e=f(this,"editor"),g=f(this,"panel"));b=[[c,b]];a([d],e,b);a(k,g,b)}).call(this,b)}});var l="cke_ui_color", +k=[],c=/\$color/g;CKEDITOR.on("instanceLoaded",function(b){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var d=b.editor;b=function(b){b=(b.data[0]||b.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!b.getById("cke_ui_color")){var f=e(b);k.push(f);d.on("destroy",function(){k=CKEDITOR.tools.array.filter(k,function(a){return f!==a})});(b=d.getUiColor())&&a([f],CKEDITOR.skin.chameleon(d,"panel"),[[c,b]])}};d.on("panelShow",b);d.on("menuShow",b);d.config.uiColor&&d.setUiColor(d.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var b=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{var h=b.getComputedStyle("border-top-color"),g=b.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!h||h!=g)}catch(e){CKEDITOR.env.hc=!1}b.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); +CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending)for(delete CKEDITOR._.pending,h=0;h<b.length;h++)CKEDITOR.editor.prototype.constructor.apply(b[h][0],b[h][1]),CKEDITOR.add(b[h][0])})();CKEDITOR.skin.name="moono-lisa";CKEDITOR.skin.ua_editor="ie,iequirks,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie8";CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),h=0;3>h;h++){var l=h,k;k=parseInt(a[h],16);k=("0"+(0>e?0|k*(1+e): +0|k+(255-k)*e).toString(16)).slice(-2);a[l]=k}return"#"+a.join("")}}(),h={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover,{id} a.cke_path_item:focus,{id} a.cke_path_item:active [background-color:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "), panel:new CKEDITOR.template(".cke_panel_grouptitle [background-color:{lightBackground};border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active [background-color:{menubuttonHover};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; -return function(g,f){var a=b(g.uiColor,.4),a={id:"."+g.id,defaultBorder:b(a,-.2),toolbarElementsBorder:b(a,-.25),defaultBackground:a,lightBackground:b(a,.8),darkBackground:b(a,-.15),ckeButtonOn:b(a,.4),ckeResizer:b(a,-.4),ckeColorauto:b(a,.8),dialogBody:b(a,.7),dialogTab:b(a,.65),dialogTabSelected:"#FFF",dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-.6),menubuttonHover:b(a,.1),menubuttonIcon:b(a,.5),menubuttonIconHover:b(a,.3)};return h[f].output(a).replace(/\[/g,"{").replace(/\]/g,"}")}}(); -CKEDITOR.plugins.add("dialogui",{onLoad:function(){var b=function(a){this._||(this._={});this._["default"]=this._.initValue=a["default"]||"";this._.required=a.required||!1;for(var b=[this._],c=1;c<arguments.length;c++)b.push(arguments[c]);b.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,b);return this._},h={build:function(a,b,c){return new CKEDITOR.ui.dialog.textInput(a,b,c)}},g={build:function(a,b,c){return new CKEDITOR.ui.dialog[b.type](a,b,c)}},f={isChanged:function(){return this.getValue()!= +return function(g,e){var a=b(g.uiColor,.4),a={id:"."+g.id,defaultBorder:b(a,-.2),toolbarElementsBorder:b(a,-.25),defaultBackground:a,lightBackground:b(a,.8),darkBackground:b(a,-.15),ckeButtonOn:b(a,.4),ckeResizer:b(a,-.4),ckeColorauto:b(a,.8),dialogBody:b(a,.7),dialogTab:b(a,.65),dialogTabSelected:"#FFF",dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-.6),menubuttonHover:b(a,.1),menubuttonIcon:b(a,.5),menubuttonIconHover:b(a,.3)};return h[e].output(a).replace(/\[/g,"{").replace(/\]/g,"}")}}(); +CKEDITOR.plugins.add("dialogui",{onLoad:function(){var b=function(a){this._||(this._={});this._["default"]=this._.initValue=a["default"]||"";this._.required=a.required||!1;for(var b=[this._],d=1;d<arguments.length;d++)b.push(arguments[d]);b.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,b);return this._},h={build:function(a,b,d){return new CKEDITOR.ui.dialog.textInput(a,b,d)}},g={build:function(a,b,d){return new CKEDITOR.ui.dialog[b.type](a,b,d)}},e={isChanged:function(){return this.getValue()!= this.getInitValue()},reset:function(a){this.setValue(this.getInitValue(),a)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},a=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(a,b){this._.domOnChangeRegistered||(a.on("load",function(){this.getInputElement().on("change",function(){a.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, -this)},this),this._.domOnChangeRegistered=!0);this.on("change",b)}},!0),m=/^on([A-Z]\w+)/,k=function(a){for(var b in a)(m.test(b)||"title"==b||"type"==b)&&delete a[b];return a},l=function(a){a=a.data.getKeystroke();a==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker("ltr"):a==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker("rtl")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(a,e,c,f){if(!(4>arguments.length)){var g=b.call(this,e);g.labelId=CKEDITOR.tools.getNextId()+ -"_label";this._.children=[];var h={role:e.role||"presentation"};e.includeLabel&&(h["aria-labelledby"]=g.labelId);CKEDITOR.ui.dialog.uiElement.call(this,a,e,c,"div",null,h,function(){var c=[],b=e.required?" cke_required":"";"horizontal"!=e.labelLayout?c.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label'+b+'" ',' id\x3d"'+g.labelId+'"',g.inputId?' for\x3d"'+g.inputId+'"':"",(e.labelStyle?' style\x3d"'+e.labelStyle+'"':"")+"\x3e",e.label,"\x3c/label\x3e",'\x3cdiv class\x3d"cke_dialog_ui_labeled_content"', -e.controlStyle?' style\x3d"'+e.controlStyle+'"':"",' role\x3d"presentation"\x3e',f.call(this,a,e),"\x3c/div\x3e"):(b={type:"hbox",widths:e.widths,padding:0,children:[{type:"html",html:'\x3clabel class\x3d"cke_dialog_ui_labeled_label'+b+'" id\x3d"'+g.labelId+'" for\x3d"'+g.inputId+'"'+(e.labelStyle?' style\x3d"'+e.labelStyle+'"':"")+"\x3e"+CKEDITOR.tools.htmlEncode(e.label)+"\x3c/label\x3e"},{type:"html",html:'\x3cspan class\x3d"cke_dialog_ui_labeled_content"'+(e.controlStyle?' style\x3d"'+e.controlStyle+ -'"':"")+"\x3e"+f.call(this,a,e)+"\x3c/span\x3e"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(a,b,c));return c.join("")})}},textInput:function(a,e,c){if(!(3>arguments.length)){b.call(this,e);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",g={"class":"cke_dialog_ui_input_"+e.type,id:f,type:e.type};e.validate&&(this.validate=e.validate);e.maxLength&&(g.maxlength=e.maxLength);e.size&&(g.size=e.size);e.inputStyle&&(g.style=e.inputStyle);var h=this,k=!1;a.on("load",function(){h.getInputElement().on("keydown", -function(a){13==a.data.getKeystroke()&&(k=!0)});h.getInputElement().on("keyup",function(c){13==c.data.getKeystroke()&&k&&(a.getButton("ok")&&setTimeout(function(){a.getButton("ok").click()},0),k=!1);h.bidi&&l.call(h,c)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,a,e,c,function(){var a=['\x3cdiv class\x3d"cke_dialog_ui_input_',e.type,'" role\x3d"presentation"'];e.width&&a.push('style\x3d"width:'+e.width+'" ');a.push("\x3e\x3cinput ");g["aria-labelledby"]=this._.labelId;this._.required&& -(g["aria-required"]=this._.required);for(var c in g)a.push(c+'\x3d"'+g[c]+'" ');a.push(" /\x3e\x3c/div\x3e");return a.join("")})}},textarea:function(a,e,c){if(!(3>arguments.length)){b.call(this,e);var f=this,g=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",h={};e.validate&&(this.validate=e.validate);h.rows=e.rows||5;h.cols=e.cols||20;h["class"]="cke_dialog_ui_input_textarea "+(e["class"]||"");"undefined"!=typeof e.inputStyle&&(h.style=e.inputStyle);e.dir&&(h.dir=e.dir);if(f.bidi)a.on("load", -function(){f.getInputElement().on("keyup",l)},f);CKEDITOR.ui.dialog.labeledElement.call(this,a,e,c,function(){h["aria-labelledby"]=this._.labelId;this._.required&&(h["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',g,'" '],c;for(c in h)a.push(c+'\x3d"'+CKEDITOR.tools.htmlEncode(h[c])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(f._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(a, -e,c){if(!(3>arguments.length)){var f=b.call(this,e,{"default":!!e["default"]});e.validate&&(this.validate=e.validate);CKEDITOR.ui.dialog.uiElement.call(this,a,e,c,"span",null,null,function(){var c=CKEDITOR.tools.extend({},e,{id:e.id?e.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),b=[],g=CKEDITOR.tools.getNextId()+"_label",h={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":g};k(c);e["default"]&&(h.checked="checked");"undefined"!=typeof c.inputStyle&&(c.style=c.inputStyle); -f.checkbox=new CKEDITOR.ui.dialog.uiElement(a,c,b,"input",null,h);b.push(' \x3clabel id\x3d"',g,'" for\x3d"',h.id,'"'+(e.labelStyle?' style\x3d"'+e.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(e.label),"\x3c/label\x3e");return b.join("")})}},radio:function(a,e,c){if(!(3>arguments.length)){b.call(this,e);this._["default"]||(this._["default"]=this._.initValue=e.items[0][1]);e.validate&&(this.validate=e.validate);var f=[],g=this;e.role="radiogroup";e.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this, -a,e,c,function(){for(var c=[],b=[],h=(e.id?e.id:CKEDITOR.tools.getNextId())+"_radio",l=0;l<e.items.length;l++){var m=e.items[l],t=void 0!==m[2]?m[2]:m[0],y=void 0!==m[1]?m[1]:m[0],v=CKEDITOR.tools.getNextId()+"_radio_input",x=v+"_label",v=CKEDITOR.tools.extend({},e,{id:v,title:null,type:null},!0),t=CKEDITOR.tools.extend({},v,{title:t},!0),B={type:"radio","class":"cke_dialog_ui_radio_input",name:h,value:y,"aria-labelledby":x},D=[];g._["default"]==y&&(B.checked="checked");k(v);k(t);"undefined"!=typeof v.inputStyle&& -(v.style=v.inputStyle);v.keyboardFocusable=!0;f.push(new CKEDITOR.ui.dialog.uiElement(a,v,D,"input",null,B));D.push(" ");new CKEDITOR.ui.dialog.uiElement(a,t,D,"label",null,{id:x,"for":B.id},m[0]);c.push(D.join(""))}new CKEDITOR.ui.dialog.hbox(a,f,c,b);return b.join("")});this._.children=f}},button:function(a,e,c){if(arguments.length){"function"==typeof e&&(e=e(a.getParentEditor()));b.call(this,e,{disabled:e.disabled||!1});CKEDITOR.event.implementOn(this);var f=this;a.on("load",function(){var a=this.getElement(); -(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var g=CKEDITOR.tools.extend({},e);delete g.style;var h=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,a,g,c,"a",null,{style:e.style,href:"javascript:void(0)",title:e.label,hidefocus:"true","class":e["class"],role:"button","aria-labelledby":h},'\x3cspan id\x3d"'+h+'" class\x3d"cke_dialog_ui_button"\x3e'+ -CKEDITOR.tools.htmlEncode(e.label)+"\x3c/span\x3e")}},select:function(a,e,c){if(!(3>arguments.length)){var f=b.call(this,e);e.validate&&(this.validate=e.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,a,e,c,function(){var c=CKEDITOR.tools.extend({},e,{id:e.id?e.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),b=[],g=[],h={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};b.push('\x3cdiv class\x3d"cke_dialog_ui_input_', -e.type,'" role\x3d"presentation"');e.width&&b.push('style\x3d"width:'+e.width+'" ');b.push("\x3e");void 0!==e.size&&(h.size=e.size);void 0!==e.multiple&&(h.multiple=e.multiple);k(c);for(var l=0,m;l<e.items.length&&(m=e.items[l]);l++)g.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==m[1]?m[1]:m[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(m[0]));"undefined"!=typeof c.inputStyle&&(c.style=c.inputStyle);f.select=new CKEDITOR.ui.dialog.uiElement(a,c,b,"select",null, -h,g.join(""));b.push("\x3c/div\x3e");return b.join("")})}},file:function(a,e,c){if(!(3>arguments.length)){void 0===e["default"]&&(e["default"]="");var f=CKEDITOR.tools.extend(b.call(this,e),{definition:e,buttons:[]});e.validate&&(this.validate=e.validate);a.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,a,e,c,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var a=['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"', -f.frameId,'" title\x3d"',e.label,'" src\x3d"javascript:void('];a.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");a.push(')"\x3e\x3c/iframe\x3e');return a.join("")})}},fileButton:function(a,e,c){var f=this;if(!(3>arguments.length)){b.call(this,e);e.validate&&(this.validate=e.validate);var g=CKEDITOR.tools.extend({},e),h=g.onClick;g.className=(g.className?g.className+" ":"")+"cke_dialog_ui_button";g.onClick=function(c){var b= -e["for"];c=h?h.call(this,c):!1;!1!==c&&("xhr"!==c&&a.getContentElement(b[0],b[1]).submit(),this.disable())};a.on("load",function(){a.getContentElement(e["for"][0],e["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,a,g,c)}},html:function(){var a=/^\s*<[\w:]+\s+([^>]*)?>/,b=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,c=/\/$/;return function(f,g,h){if(!(3>arguments.length)){var k=[],l=g.html;"\x3c"!=l.charAt(0)&&(l="\x3cspan\x3e"+l+"\x3c/span\x3e");var m=g.focus;if(m){var u=this.focus; -this.focus=function(){("function"==typeof m?m:u).call(this);this.fire("focus")};g.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,g,k,"span",null,null,"");k=k.join("").match(a);l=l.match(b)||["","",""];c.test(l[1])&&(l[1]=l[1].slice(0,-1),l[2]="/"+l[2]);h.push([l[1]," ",k[1]||"",l[2]].join(""))}}}(),fieldset:function(a,b,c,f,g){var h=g.label;this._={children:b};CKEDITOR.ui.dialog.uiElement.call(this,a,g,f,"fieldset",null,null,function(){var a= -[];h&&a.push("\x3clegend"+(g.labelStyle?' style\x3d"'+g.labelStyle+'"':"")+"\x3e"+h+"\x3c/legend\x3e");for(var d=0;d<c.length;d++)a.push(c[d]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(a){var b=CKEDITOR.document.getById(this._.labelId);1>b.getChildCount()?(new CKEDITOR.dom.text(a,CKEDITOR.document)).appendTo(b):b.getChild(0).$.nodeValue= +this)},this),this._.domOnChangeRegistered=!0);this.on("change",b)}},!0),m=/^on([A-Z]\w+)/,l=function(a){for(var b in a)(m.test(b)||"title"==b||"type"==b)&&delete a[b];return a},k=function(a){a=a.data.getKeystroke();a==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker("ltr"):a==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker("rtl")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(a,f,d,e){if(!(4>arguments.length)){var g=b.call(this,f);g.labelId=CKEDITOR.tools.getNextId()+ +"_label";this._.children=[];var h={role:f.role||"presentation"};f.includeLabel&&(h["aria-labelledby"]=g.labelId);CKEDITOR.ui.dialog.uiElement.call(this,a,f,d,"div",null,h,function(){var d=[],b=f.required?" cke_required":"";"horizontal"!=f.labelLayout?d.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label'+b+'" ',' id\x3d"'+g.labelId+'"',g.inputId?' for\x3d"'+g.inputId+'"':"",(f.labelStyle?' style\x3d"'+f.labelStyle+'"':"")+"\x3e",f.label,"\x3c/label\x3e",'\x3cdiv class\x3d"cke_dialog_ui_labeled_content"', +f.controlStyle?' style\x3d"'+f.controlStyle+'"':"",' role\x3d"presentation"\x3e',e.call(this,a,f),"\x3c/div\x3e"):(b={type:"hbox",widths:f.widths,padding:0,children:[{type:"html",html:'\x3clabel class\x3d"cke_dialog_ui_labeled_label'+b+'" id\x3d"'+g.labelId+'" for\x3d"'+g.inputId+'"'+(f.labelStyle?' style\x3d"'+f.labelStyle+'"':"")+"\x3e"+CKEDITOR.tools.htmlEncode(f.label)+"\x3c/label\x3e"},{type:"html",html:'\x3cspan class\x3d"cke_dialog_ui_labeled_content"'+(f.controlStyle?' style\x3d"'+f.controlStyle+ +'"':"")+"\x3e"+e.call(this,a,f)+"\x3c/span\x3e"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(a,b,d));return d.join("")})}},textInput:function(a,f,d){if(!(3>arguments.length)){b.call(this,f);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",g={"class":"cke_dialog_ui_input_"+f.type,id:e,type:f.type};f.validate&&(this.validate=f.validate);f.maxLength&&(g.maxlength=f.maxLength);f.size&&(g.size=f.size);f.inputStyle&&(g.style=f.inputStyle);var h=this,l=!1;a.on("load",function(){h.getInputElement().on("keydown", +function(a){13==a.data.getKeystroke()&&(l=!0)});h.getInputElement().on("keyup",function(d){13==d.data.getKeystroke()&&l&&(a.getButton("ok")&&setTimeout(function(){a.getButton("ok").click()},0),l=!1);h.bidi&&k.call(h,d)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,a,f,d,function(){var a=['\x3cdiv class\x3d"cke_dialog_ui_input_',f.type,'" role\x3d"presentation"'];f.width&&a.push('style\x3d"width:'+f.width+'" ');a.push("\x3e\x3cinput ");g["aria-labelledby"]=this._.labelId;this._.required&& +(g["aria-required"]=this._.required);for(var c in g)a.push(c+'\x3d"'+g[c]+'" ');a.push(" /\x3e\x3c/div\x3e");return a.join("")})}},textarea:function(a,f,d){if(!(3>arguments.length)){b.call(this,f);var e=this,g=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",h={};f.validate&&(this.validate=f.validate);h.rows=f.rows||5;h.cols=f.cols||20;h["class"]="cke_dialog_ui_input_textarea "+(f["class"]||"");"undefined"!=typeof f.inputStyle&&(h.style=f.inputStyle);f.dir&&(h.dir=f.dir);if(e.bidi)a.on("load", +function(){e.getInputElement().on("keyup",k)},e);CKEDITOR.ui.dialog.labeledElement.call(this,a,f,d,function(){h["aria-labelledby"]=this._.labelId;this._.required&&(h["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',g,'" '],c;for(c in h)a.push(c+'\x3d"'+CKEDITOR.tools.htmlEncode(h[c])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(e._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(a, +f,d){if(!(3>arguments.length)){var e=b.call(this,f,{"default":!!f["default"]});f.validate&&(this.validate=f.validate);CKEDITOR.ui.dialog.uiElement.call(this,a,f,d,"span",null,null,function(){var d=CKEDITOR.tools.extend({},f,{id:f.id?f.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),b=[],g=CKEDITOR.tools.getNextId()+"_label",h={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":g};l(d);f["default"]&&(h.checked="checked");"undefined"!=typeof d.inputStyle&&(d.style=d.inputStyle); +e.checkbox=new CKEDITOR.ui.dialog.uiElement(a,d,b,"input",null,h);b.push(' \x3clabel id\x3d"',g,'" for\x3d"',h.id,'"'+(f.labelStyle?' style\x3d"'+f.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(f.label),"\x3c/label\x3e");return b.join("")})}},radio:function(a,f,d){if(!(3>arguments.length)){b.call(this,f);this._["default"]||(this._["default"]=this._.initValue=f.items[0][1]);f.validate&&(this.validate=f.validate);var e=[],g=this;f.role="radiogroup";f.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this, +a,f,d,function(){for(var d=[],b=[],h=(f.id?f.id:CKEDITOR.tools.getNextId())+"_radio",k=0;k<f.items.length;k++){var m=f.items[k],t=void 0!==m[2]?m[2]:m[0],z=void 0!==m[1]?m[1]:m[0],y=CKEDITOR.tools.getNextId()+"_radio_input",u=y+"_label",y=CKEDITOR.tools.extend({},f,{id:y,title:null,type:null},!0),t=CKEDITOR.tools.extend({},y,{title:t},!0),B={type:"radio","class":"cke_dialog_ui_radio_input",name:h,value:z,"aria-labelledby":u},C=[];g._["default"]==z&&(B.checked="checked");l(y);l(t);"undefined"!=typeof y.inputStyle&& +(y.style=y.inputStyle);y.keyboardFocusable=!0;e.push(new CKEDITOR.ui.dialog.uiElement(a,y,C,"input",null,B));C.push(" ");new CKEDITOR.ui.dialog.uiElement(a,t,C,"label",null,{id:u,"for":B.id},m[0]);d.push(C.join(""))}new CKEDITOR.ui.dialog.hbox(a,e,d,b);return b.join("")});this._.children=e}},button:function(a,f,d){if(arguments.length){"function"==typeof f&&(f=f(a.getParentEditor()));b.call(this,f,{disabled:f.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;a.on("load",function(){var a=this.getElement(); +(function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var g=CKEDITOR.tools.extend({},f);delete g.style;var h=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,a,g,d,"a",null,{style:f.style,href:"javascript:void(0)",title:f.label,hidefocus:"true","class":f["class"],role:"button","aria-labelledby":h},'\x3cspan id\x3d"'+h+'" class\x3d"cke_dialog_ui_button"\x3e'+ +CKEDITOR.tools.htmlEncode(f.label)+"\x3c/span\x3e")}},select:function(a,f,d){if(!(3>arguments.length)){var e=b.call(this,f);f.validate&&(this.validate=f.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,a,f,d,function(){var d=CKEDITOR.tools.extend({},f,{id:f.id?f.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),b=[],g=[],h={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};b.push('\x3cdiv class\x3d"cke_dialog_ui_input_', +f.type,'" role\x3d"presentation"');f.width&&b.push('style\x3d"width:'+f.width+'" ');b.push("\x3e");void 0!==f.size&&(h.size=f.size);void 0!==f.multiple&&(h.multiple=f.multiple);l(d);for(var k=0,m;k<f.items.length&&(m=f.items[k]);k++)g.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==m[1]?m[1]:m[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(m[0]));"undefined"!=typeof d.inputStyle&&(d.style=d.inputStyle);e.select=new CKEDITOR.ui.dialog.uiElement(a,d,b,"select",null, +h,g.join(""));b.push("\x3c/div\x3e");return b.join("")})}},file:function(a,f,d){if(!(3>arguments.length)){void 0===f["default"]&&(f["default"]="");var e=CKEDITOR.tools.extend(b.call(this,f),{definition:f,buttons:[]});f.validate&&(this.validate=f.validate);a.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,a,f,d,function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var a=['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"', +e.frameId,'" title\x3d"',f.label,'" src\x3d"javascript:void('];a.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");a.push(')"\x3e\x3c/iframe\x3e');return a.join("")})}},fileButton:function(a,f,d){var e=this;if(!(3>arguments.length)){b.call(this,f);f.validate&&(this.validate=f.validate);var g=CKEDITOR.tools.extend({},f),h=g.onClick;g.className=(g.className?g.className+" ":"")+"cke_dialog_ui_button";g.onClick=function(d){var b= +f["for"];d=h?h.call(this,d):!1;!1!==d&&("xhr"!==d&&a.getContentElement(b[0],b[1]).submit(),this.disable())};a.on("load",function(){a.getContentElement(f["for"][0],f["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,a,g,d)}},html:function(){var a=/^\s*<[\w:]+\s+([^>]*)?>/,b=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(e,g,h){if(!(3>arguments.length)){var k=[],l=g.html;"\x3c"!=l.charAt(0)&&(l="\x3cspan\x3e"+l+"\x3c/span\x3e");var m=g.focus;if(m){var x=this.focus; +this.focus=function(){("function"==typeof m?m:x).call(this);this.fire("focus")};g.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,e,g,k,"span",null,null,"");k=k.join("").match(a);l=l.match(b)||["","",""];d.test(l[1])&&(l[1]=l[1].slice(0,-1),l[2]="/"+l[2]);h.push([l[1]," ",k[1]||"",l[2]].join(""))}}}(),fieldset:function(a,b,d,e,g){var h=g.label;this._={children:b};CKEDITOR.ui.dialog.uiElement.call(this,a,g,e,"fieldset",null,null,function(){var a= +[];h&&a.push("\x3clegend"+(g.labelStyle?' style\x3d"'+g.labelStyle+'"':"")+"\x3e"+h+"\x3c/legend\x3e");for(var c=0;c<d.length;c++)a.push(d[c]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(a){var b=CKEDITOR.document.getById(this._.labelId);1>b.getChildCount()?(new CKEDITOR.dom.text(a,CKEDITOR.document)).appendTo(b):b.getChild(0).$.nodeValue= a;return this},getLabel:function(){var a=CKEDITOR.document.getById(this._.labelId);return!a||1>a.getChildCount()?"":a.getChild(0).getText()},eventProcessors:a},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return this._.disabled?!1:this.fire("click",{dialog:this._.dialog})},enable:function(){this._.disabled=!1;var a=this.getElement();a&&a.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")}, isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(a,b){this.on("click",function(){b.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, focus:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&b.$.focus()},0)},select:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&(b.$.focus(),b.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(a){if(this.bidi){var b=a&&a.charAt(0);(b=""==b?"ltr":""==b?"rtl":null)&&(a=a.slice(1));this.setDirectionMarker(b)}a||(a="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)}, -getValue:function(){var a=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&a){var b=this.getDirectionMarker();b&&(a=("ltr"==b?"":"")+a)}return a},setDirectionMarker:function(a){var b=this.getInputElement();a?b.setAttributes({dir:a,"data-cke-dir-marker":a}):this.getDirectionMarker()&&b.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},f,!0);CKEDITOR.ui.dialog.textarea.prototype= -new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(a,b,c){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),g=this.getInputElement().$;f.$.text=a;f.$.value=void 0===b||null===b?a:b;void 0===c||null===c?CKEDITOR.env.ie?g.add(f.$):g.add(f.$,null):g.add(f.$,c);return this},remove:function(a){this.getInputElement().$.remove(a); -return this},clear:function(){for(var a=this.getInputElement().$;0<a.length;)a.remove(0);return this},keyboardFocusable:!0},f,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(a,b){this.getInputElement().$.checked=a;!b&&this.fire("change",{value:a})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(d, -b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);d.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(d){d=d.data.$;"checked"==d.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",b);return null}},keyboardFocusable:!0},f,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(a,b){for(var c=this._.children,f,g=0;g<c.length&&(f=c[g]);g++)f.getElement().$.checked= -f.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(d,b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);d.on("load",function(){for(var a= -this._.children,d=this,b=0;b<a.length;b++)a[b].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&d.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",b);return null}}},f,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,f,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<a.$.forms.length?new CKEDITOR.dom.element(a.$.forms[0].elements[0]): -this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,f=function(a,c,d,b){a.on("formLoaded",function(){a.getInputElement().on(d,b,a)})},g;for(g in a)if(c=g.match(b))this.eventProcessors[g]?this.eventProcessors[g].call(this,this._.dialog,a[g]):f(this,this._.dialog,c[1].toLowerCase(),a[g]);return this},reset:function(){function a(){c.$.open(); -var d="";f.size&&(d=f.size-(CKEDITOR.env.ie?7:0));var t=b.frameId+"_input";c.$.write(['\x3chtml dir\x3d"'+l+'" lang\x3d"'+m+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e','\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+l+'" lang\x3d"'+m+'" action\x3d"',CKEDITOR.tools.htmlEncode(f.action),'"\x3e\x3clabel id\x3d"',b.labelId,'" for\x3d"',t,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(f.label), -'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',t,'" aria-labelledby\x3d"',b.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(f.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<d?d:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+h+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","\x3c/script\x3e"].join("")); -c.$.close();for(d=0;d<g.length;d++)g[d].enable()}var b=this._,c=CKEDITOR.document.getById(b.frameId).getFrameDocument(),f=b.definition,g=b.buttons,h=this.formLoadedNumber,k=this.formUnloadNumber,l=b.dialog._.editor.lang.dir,m=b.dialog._.editor.langCode;h||(h=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(h); +getValue:function(){var a=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&a){var b=this.getDirectionMarker();b&&(a=("ltr"==b?"":"")+a)}return a},setDirectionMarker:function(a){var b=this.getInputElement();a?b.setAttributes({dir:a,"data-cke-dir-marker":a}):this.getDirectionMarker()&&b.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.textarea.prototype= +new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(a,b,d){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),g=this.getInputElement().$;e.$.text=a;e.$.value=void 0===b||null===b?a:b;void 0===d||null===d?CKEDITOR.env.ie?g.add(e.$):g.add(e.$,null):g.add(e.$,d);return this},remove:function(a){this.getInputElement().$.remove(a); +return this},clear:function(){for(var a=this.getInputElement().$;0<a.length;)a.remove(0);return this},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(a,b){this.getInputElement().$.checked=a;!b&&this.fire("change",{value:a})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(c, +b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);c.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(c){c=c.data.$;"checked"==c.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",b);return null}},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(a,b){for(var d=this._.children,e,g=0;g<d.length&&(e=d[g]);g++)e.getElement().$.checked= +e.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(c,b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);c.on("load",function(){for(var a= +this._.children,c=this,b=0;b<a.length;b++)a[b].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&c.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",b);return null}}},e,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,e,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<a.$.forms.length?new CKEDITOR.dom.element(a.$.forms[0].elements[0]): +this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,d,e=function(a,c,d,b){a.on("formLoaded",function(){a.getInputElement().on(d,b,a)})},g;for(g in a)if(d=g.match(b))this.eventProcessors[g]?this.eventProcessors[g].call(this,this._.dialog,a[g]):e(this,this._.dialog,d[1].toLowerCase(),a[g]);return this},reset:function(){function a(){d.$.open(); +var c="";e.size&&(c=e.size-(CKEDITOR.env.ie?7:0));var t=b.frameId+"_input";d.$.write(['\x3chtml dir\x3d"'+l+'" lang\x3d"'+m+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e','\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+l+'" lang\x3d"'+m+'" action\x3d"',CKEDITOR.tools.htmlEncode(e.action),'"\x3e\x3clabel id\x3d"',b.labelId,'" for\x3d"',t,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(e.label), +'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',t,'" aria-labelledby\x3d"',b.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(e.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<c?c:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+h+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","\x3c/script\x3e"].join("")); +d.$.close();for(c=0;c<g.length;c++)g[c].enable()}var b=this._,d=CKEDITOR.document.getById(b.frameId).getFrameDocument(),e=b.definition,g=b.buttons,h=this.formLoadedNumber,k=this.formUnloadNumber,l=b.dialog._.editor.lang.dir,m=b.dialog._.editor.langCode;h||(h=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(h); CKEDITOR.tools.removeFunction(k)}));CKEDITOR.env.gecko?setTimeout(a,500):a()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(a,b){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",b)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype= new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",h);CKEDITOR.dialog.addUIElement("password",h);CKEDITOR.dialog.addUIElement("tel",h);CKEDITOR.dialog.addUIElement("textarea",g);CKEDITOR.dialog.addUIElement("checkbox",g);CKEDITOR.dialog.addUIElement("radio",g);CKEDITOR.dialog.addUIElement("button",g);CKEDITOR.dialog.addUIElement("select",g);CKEDITOR.dialog.addUIElement("file",g);CKEDITOR.dialog.addUIElement("fileButton", -g);CKEDITOR.dialog.addUIElement("html",g);CKEDITOR.dialog.addUIElement("fieldset",{build:function(a,b,c){for(var f=b.children,g,h=[],k=[],l=0;l<f.length&&(g=f[l]);l++){var m=[];h.push(m);k.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,m))}return new CKEDITOR.ui.dialog[b.type](a,k,h,c,b)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;CKEDITOR.DIALOG_STATE_IDLE=1;CKEDITOR.DIALOG_STATE_BUSY=2;(function(){function b(){for(var a= -this._.tabIdList.length,c=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,d=c-1;d>c-a;d--)if(this._.tabs[this._.tabIdList[d%a]][0].$.offsetHeight)return this._.tabIdList[d%a];return null}function h(){for(var a=this._.tabIdList.length,c=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),d=c+1;d<c+a;d++)if(this._.tabs[this._.tabIdList[d%a]][0].$.offsetHeight)return this._.tabIdList[d%a];return null}function g(a,c){for(var d=a.$.getElementsByTagName("input"),b=0,e=d.length;b< -e;b++){var f=new CKEDITOR.dom.element(d[b]);"text"==f.getAttribute("type").toLowerCase()&&(c?(f.setAttribute("value",f.getCustomData("fake_value")||""),f.removeCustomData("fake_value")):(f.setCustomData("fake_value",f.getAttribute("value")),f.setAttribute("value","")))}}function f(a,c){var d=this.getInputElement();d&&(a?d.removeAttribute("aria-invalid"):d.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());c&&alert(c);this.fire("validated",{valid:a,msg:c})}function a(){var a= -this.getInputElement();a&&a.removeAttribute("aria-invalid")}function m(a){var c=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",u).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),d=c.getChild([0,0,0,0,0]),b=d.getChild(0),e=d.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(d); -!CKEDITOR.env.ie||CKEDITOR.env.quirks||CKEDITOR.env.edge||(a="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"'+a+'" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(d.getParent()));b.unselectable();e.unselectable();return{element:c,parts:{dialog:c.getChild(0),title:b,close:e,tabs:d.getChild(2),contents:d.getChild([3,0,0,0]), -footer:d.getChild([3,0,1,0])}}}function k(a,c,d){this.element=c;this.focusIndex=d;this.tabIndex=0;this.isFocusable=function(){return!c.getAttribute("disabled")&&c.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};c.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});c.on("focus",function(){this.fire("mouseover")});c.on("blur",function(){this.fire("mouseout")})}function l(a){function c(){a.layout()}var d=CKEDITOR.document.getWindow(); -d.on("resize",c);a.on("hide",function(){d.removeListener("resize",c)})}function d(a,c){this._={dialog:a};CKEDITOR.tools.extend(this,c)}function e(a){function c(d){var k=a.getSize(),l=a.parts.dialog.getParent().getClientSize(),n=d.data.$.screenX,m=d.data.$.screenY,q=n-b.x,t=m-b.y;b={x:n,y:m};e.x+=q;e.y+=t;n=e.x+h[3]<g?-h[3]:e.x-h[1]>l.width-k.width-g?l.width-k.width+("rtl"==f.lang.dir?0:h[1]):e.x;k=e.y+h[0]<g?-h[0]:e.y-h[2]>l.height-k.height-g?l.height-k.height+h[2]:e.y;n=Math.floor(n);k=Math.floor(k); -a.move(n,k,1);d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mousemove",c);CKEDITOR.document.removeListener("mouseup",d);if(CKEDITOR.env.ie6Compat){var a=A.getChild(0).getFrameDocument();a.removeListener("mousemove",c);a.removeListener("mouseup",d)}}var b=null,e=null,f=a.getParentEditor(),g=f.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof g&&(g=20);a.parts.title.on("mousedown",function(f){if(!a._.moved){var g=a._.element;g.getFirst().setStyle("position", -"absolute");g.removeStyle("display");a._.moved=!0;a.layout()}b={x:f.data.$.screenX,y:f.data.$.screenY};CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",d);e=a.getPosition();CKEDITOR.env.ie6Compat&&(g=A.getChild(0).getFrameDocument(),g.on("mousemove",c),g.on("mouseup",d));f.data.preventDefault()},a)}function c(a){function c(d){var q="rtl"==f.lang.dir,t=m.width,p=m.height,w=t+(d.data.$.screenX-l.x)*(q?-1:1)*(a._.moved?1:2),N=p+(d.data.$.screenY-l.y)*(a._.moved?1:2),v=a._.element.getFirst(), -v=q&&parseInt(v.getComputedStyle("right")),Y=a.getPosition();Y.x=Y.x||0;Y.y=Y.y||0;Y.y+N>k.height&&(N=k.height-Y.y);(q?v:Y.x)+w>k.width&&(w=k.width-(q?v:Y.x));N=Math.floor(N);w=Math.floor(w);if(e==CKEDITOR.DIALOG_RESIZE_WIDTH||e==CKEDITOR.DIALOG_RESIZE_BOTH)t=Math.max(b.minWidth||0,w-g);if(e==CKEDITOR.DIALOG_RESIZE_HEIGHT||e==CKEDITOR.DIALOG_RESIZE_BOTH)p=Math.max(b.minHeight||0,N-h);a.resize(t,p);a._.moved&&n(a,a._.position.x,a._.position.y);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup", -d);CKEDITOR.document.removeListener("mousemove",c);q&&(q.remove(),q=null);if(CKEDITOR.env.ie6Compat){var a=A.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",c)}}var b=a.definition,e=b.resizable;if(e!=CKEDITOR.DIALOG_RESIZE_NONE){var f=a.getParentEditor(),g,h,k,l,m,q,t=CKEDITOR.tools.addFunction(function(b){function e(a){return a.isVisible()}m=a.getSize();var f=a.parts.contents,n=f.$.getElementsByTagName("iframe").length,t=!(CKEDITOR.env.gecko||CKEDITOR.env.ie&& -CKEDITOR.env.quirks);n&&(q=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%; left:0; top:0;"\x3e\x3c/div\x3e'),f.append(q));h=m.height-a.parts.contents.getFirst(e).getSize("height",t);g=m.width-a.parts.contents.getFirst(e).getSize("width",1);l={x:b.screenX,y:b.screenY};k=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&& -(f=A.getChild(0).getFrameDocument(),f.on("mousemove",c),f.on("mouseup",d));b.preventDefault&&b.preventDefault()});a.on("load",function(){var c="";e==CKEDITOR.DIALOG_RESIZE_WIDTH?c=" cke_resizer_horizontal":e==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(c=" cke_resizer_vertical");c=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+c+" cke_resizer_"+f.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(f.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+t+', event )"\x3e'+("ltr"== -f.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(c,1)});f.on("destroy",function(){CKEDITOR.tools.removeFunction(t)})}}function n(a,c,d){var b=a.parts.dialog.getParent().getClientSize(),e=a.getSize(),f=a._.viewportRatio,g=Math.max(b.width-e.width,0),b=Math.max(b.height-e.height,0);f.width=g?c/g:f.width;f.height=b?d/b:f.height;a._.viewportRatio=f}function w(a){a.data.preventDefault(1)}function z(a){var c=a.config,d=CKEDITOR.skinName||a.config.skin,b=c.dialog_backgroundCoverColor||("moono-lisa"== -d?"black":"white"),d=c.dialog_backgroundCoverOpacity,e=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(b,d,e),f=D[c];CKEDITOR.document.getBody().addClass("cke_dialog_open");f?f.show():(e=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",e,"; top: 0px; left: 0px; ","; width: 100%; height: 100%;",CKEDITOR.env.ie6Compat?"":"background-color: "+b,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(b="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+ -b+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",e.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'),e.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+b+"' );document.close();")+"})())"),e.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),e.push("\x3c/div\x3e"),f=CKEDITOR.dom.element.createFromHtml(e.join("")), -f.setOpacity(void 0!==d?d:.5),f.on("keydown",w),f.on("keypress",w),f.on("keyup",w),f.appendTo(CKEDITOR.document.getBody()),D[c]=f);a.focusManager.add(f);A=f;CKEDITOR.env.mac&&CKEDITOR.env.webkit||f.focus()}function r(a){CKEDITOR.document.getBody().removeClass("cke_dialog_open");A&&(a.focusManager.remove(A),A.hide())}var p=CKEDITOR.tools.cssLength,q=!CKEDITOR.env.ie||CKEDITOR.env.edge,u='\x3cdiv class\x3d"cke_reset_all cke_dialog_container {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" style\x3d"'+ -(q?"display:flex":"")+'" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"'+(q?"margin:auto":"position:absolute")+'" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e'; -CKEDITOR.dialog=function(d,g){function k(){var a=A._.focusList;a.sort(function(a,c){return a.tabIndex!=c.tabIndex?c.tabIndex-a.tabIndex:a.focusIndex-c.focusIndex});for(var c=a.length,d=0;d<c;d++)a[d].focusIndex=d}function l(a){var c=A._.focusList;a=a||0;if(!(1>c.length)){var d=A._.currentFocusIndex;A._.tabBarMode&&0>a&&(d=0);try{c[d].getInputElement().$.blur()}catch(b){}var e=d,f=1<A._.pageCount;do{e+=a;if(f&&!A._.tabBarMode&&(e==c.length||-1==e)){A._.tabBarMode=!0;A._.tabs[A._.currentTabId][0].focus(); -A._.currentFocusIndex=-1;return}e=(e+c.length)%c.length;if(e==d)break}while(a&&!c[e].isFocusable());c[e].focus();"text"==c[e].type&&c[e].select()}}function n(a){if(A==CKEDITOR.dialog._.currentTop){var c=a.data.getKeystroke(),e="rtl"==d.lang.dir,f=[37,38,39,40];r=x=0;if(9==c||c==CKEDITOR.SHIFT+9)l(c==CKEDITOR.SHIFT+9?-1:1),r=1;else if(c==CKEDITOR.ALT+121&&!A._.tabBarMode&&1<A.getPageCount())A._.tabBarMode=!0,A._.tabs[A._.currentTabId][0].focus(),A._.currentFocusIndex=-1,r=1;else if(-1!=CKEDITOR.tools.indexOf(f, -c)&&A._.tabBarMode)c=-1!=CKEDITOR.tools.indexOf([e?39:37,38],c)?b.call(A):h.call(A),A.selectPage(c),A._.tabs[c][0].focus(),r=1;else if(13!=c&&32!=c||!A._.tabBarMode)if(13==c)c=a.data.getTarget(),c.is("a","button","select","textarea")||c.is("input")&&"button"==c.$.type||((c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),r=1),x=1;else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),x=1;else return;else this.selectPage(this._.currentTabId), -this._.tabBarMode=!1,this._.currentFocusIndex=-1,l(1),r=1;q(a)}}function q(a){r?a.data.preventDefault(1):x&&a.data.stopPropagation()}var p=CKEDITOR.dialog._.dialogDefinitions[g],w=CKEDITOR.tools.clone(t),v=d.config.dialog_buttonsOrder||"OS",u=d.lang.dir,y={},r,x;("OS"==v&&CKEDITOR.env.mac||"rtl"==v&&"ltr"==u||"ltr"==v&&"rtl"==u)&&w.buttons.reverse();p=CKEDITOR.tools.extend(p(d),w);p=CKEDITOR.tools.clone(p);p=new B(this,p);w=m(d);this._={editor:d,element:w.element,name:g,model:null,contentSize:{width:0, -height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},viewportRatio:{width:.5,height:.5},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=w.parts;CKEDITOR.tools.setTimeout(function(){d.fire("ariaWidget",this.parts.contents)},0,this);w={top:0,visibility:"hidden"};CKEDITOR.env.ie6Compat&&(w.position="absolute");w["rtl"==u?"right":"left"]=0;this.parts.dialog.setStyles(w);CKEDITOR.event.call(this); -this.definition=p=CKEDITOR.fire("dialogDefinition",{name:g,definition:p,dialog:this},d).definition;if(!("removeDialogTabs"in d._)&&d.config.removeDialogTabs){w=d.config.removeDialogTabs.split(";");for(u=0;u<w.length;u++)if(v=w[u].split(":"),2==v.length){var z=v[0];y[z]||(y[z]=[]);y[z].push(v[1])}d._.removeDialogTabs=y}if(d._.removeDialogTabs&&(y=d._.removeDialogTabs[g]))for(u=0;u<y.length;u++)p.removeContents(y[u]);if(p.onLoad)this.on("load",p.onLoad);if(p.onShow)this.on("show",p.onShow);if(p.onHide)this.on("hide", -p.onHide);if(p.onOk)this.on("ok",function(a){d.fire("saveSnapshot");setTimeout(function(){d.fire("saveSnapshot")},0);!1===p.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(p.onCancel)this.on("cancel",function(a){!1===p.onCancel.call(this,a)&&(a.data.hide=!1)});var A=this,G=function(a){var c=A._.contents,d=!1,b;for(b in c)for(var e in c[b])if(d=a.call(this,c[b][e]))return};this.on("ok",function(a){G(function(c){if(c.validate){var d=c.validate(this),b="string"==typeof d|| -!1===d;b&&(a.data.hide=!1,a.stop());f.call(c,!b,"string"==typeof d?d:void 0);return b}})},this,null,0);this.on("cancel",function(a){G(function(c){if(c.isChanged())return d.config.dialog_noConfirmCancel||confirm(d.lang.common.confirmCancel)||(a.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=l;var D=this._.element;d.focusManager.add(D,1);this.on("show",function(){D.on("keydown", -n,this);if(CKEDITOR.env.gecko)D.on("keypress",q,this)});this.on("hide",function(){D.removeListener("keydown",n);CKEDITOR.env.gecko&&D.removeListener("keypress",q);G(function(c){a.apply(c)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",n,this,null,0)});this.on("show",function(){k();var a=1<A._.pageCount;d.config.dialog_startupFocusTab&&a?(A._.tabBarMode=!0,A._.tabs[A._.currentTabId][0].focus(),A._.currentFocusIndex=-1):this._.hasFocus|| -(this._.currentFocusIndex=a?-1:this._.focusList.length-1,p.onFocus?(a=p.onFocus.call(this))&&a.focus():l(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),c=a.getFirst();c.remove();c.appendTo(a)},this);e(this);c(this);(new CKEDITOR.dom.text(p.title,CKEDITOR.document)).appendTo(this.parts.title);for(u=0;u<p.contents.length;u++)(y=p.contents[u])&&this.addPage(y);this.parts.tabs.on("click",function(a){var c=a.data.getTarget();c.hasClass("cke_dialog_tab")&& -(c=c.$.id,this.selectPage(c.substring(4,c.lastIndexOf("_"))),this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,l(1)),a.data.preventDefault())},this);u=[];y=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:p.buttons},u).getChild();this.parts.footer.setHtml(u.join(""));for(u=0;u<y.length;u++)this._.buttons[y[u].id]=y[u]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(a, -c){if(!this._.contentSize||this._.contentSize.width!=a||this._.contentSize.height!=c){CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:c},this._.editor);this.fire("resize",{width:a,height:c},this._.editor);this.parts.contents.setStyles({width:a+"px",height:c+"px"});if("rtl"==this._.editor.lang.dir&&this._.position){var d=this.parts.dialog.getParent().getClientSize().width;this._.position.x=d-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)}this._.contentSize= -{width:a,height:c}}},getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,c,d){var b=this._.element.getFirst(),e="rtl"==this._.editor.lang.dir;CKEDITOR.env.ie&&b.setStyle("zoom","100%");var f=this.parts.dialog.getParent().getClientSize(),g=this.getSize(),h=this._.viewportRatio,k=Math.max(f.width-g.width,0),f=Math.max(f.height-g.height,0);this._.position&&this._.position.x==a&&this._.position.y==c?(a=Math.floor(k*h.width),c= -Math.floor(f*h.height)):n(this,a,c);this._.position={x:a,y:c};e&&(a=k-a);c={top:(0<c?c:0)+"px"};c[e?"right":"left"]=(0<a?a:0)+"px";b.setStyles(c);d&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,c=this.definition;a.getParent()&&a.getParent().equals(CKEDITOR.document.getBody())?a.setStyle("display",q?"flex":"block"):a.appendTo(CKEDITOR.document.getBody());this.resize(this._.contentSize&&this._.contentSize.width||c.width|| -c.minWidth,this._.contentSize&&this._.contentSize.height||c.height||c.minHeight);this.reset();null===this._.currentTabId&&this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,z(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop, -this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);a.on("keydown",C);a.on("keyup",I);this._.hasFocus=!1;for(var d in c.contents)if(c.contents[d]){var a=c.contents[d],b=this._.tabs[a.id],e=a.requiredContent,f=0;if(b){for(var g in this._.contents[a.id]){var h=this._.contents[a.id][g];"hbox"!=h.type&&"vbox"!=h.type&&h.getInputElement()&&(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)? -h.disable():(h.enable(),f++))}!f||e&&!this._.editor.activeFilter.check(e)?b[0].addClass("cke_dialog_tab_disabled"):b[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();l(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)}, -layout:function(){var a=this.parts.dialog;if(this._.moved||!q){var c=this.getSize(),d=CKEDITOR.document.getWindow().getViewPaneSize(),b;this._.moved&&this._.position?(b=this._.position.x,c=this._.position.y):(b=(d.width-c.width)/2,c=(d.height-c.height)/2);CKEDITOR.env.ie6Compat||(a.setStyle("position","absolute"),a.removeStyle("margin"));b=Math.floor(b);c=Math.floor(c);this.move(b,c)}},foreach:function(a){for(var c in this._.contents)for(var d in this._.contents[c])a.call(this,this._.contents[c][d]); -return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(c){c.setup&&c.setup.apply(c,a)})},commitContent:function(){var a=arguments;this.foreach(function(c){CKEDITOR.env.ie&&this._.currentFocusIndex==c.focusIndex&&c.getInputElement().$.blur();c.commit&&c.commit.apply(c,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide", -this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(F(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var c=this._.parentDialog.getElement().getFirst();c.setStyle("z-index",parseInt(c.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else r(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-= -10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",C);a.removeListener("keyup",I);var d=this._.editor;d.focus();setTimeout(function(){d.focusManager.unlock();CKEDITOR.env.iOS&&d.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var c=[],d=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+ -'"':"",b=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},c),e=this._.contents[a.id]={},f=b.getChild(),g=0;b=f.shift();)b.notAllowed||"hbox"==b.type||"vbox"==b.type||g++,e[b.id]=b,"function"==typeof b.getChild&&f.push.apply(f,b.getChild());g||(a.hidden=!0);c=CKEDITOR.dom.element.createFromHtml(c.join(""));c.setAttribute("role","tabpanel");c.setStyle("min-height", -"100%");b=CKEDITOR.env;e="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();d=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",d,a.hidden?' style\x3d"display:none"':"",' id\x3d"',e,'"',b.gecko&&!b.hc?"":' href\x3d"javascript:void(0)"',' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e',a.label,"\x3c/a\x3e"].join(""));c.setAttribute("aria-labelledby",e);this._.tabs[a.id]=[d,c];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++; -this._.lastTab=d;this.updateStyle();c.setAttribute("name",a.id);c.appendTo(this.parts.contents);d.unselectable();this.parts.tabs.append(d);a.accessKey&&(J(this,this,"CTRL+"+a.accessKey,H,M),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var c in this._.tabs){var d=this._.tabs[c][0],b=this._.tabs[c][1];c!=a&&(d.removeClass("cke_dialog_tab_selected"), -b.hide());b.setAttribute("aria-hidden",c!=a)}var e=this._.tabs[a];e[0].addClass("cke_dialog_tab_selected");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(g(e[1]),e[1].show(),setTimeout(function(){g(e[1],1)},0)):e[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var c=this._.tabs[a]&&this._.tabs[a][0];c&&1!=this._.pageCount&& -c.isVisible()&&(a==this._.currentTabId&&this.selectPage(b.call(this)),c.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,c){var d=this._.contents[a];return d&&d[c]},getValueOf:function(a,c){return this.getContentElement(a,c).getValue()},setValueOf:function(a,c,d){return this.getContentElement(a, -c).setValue(d)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,c){if("undefined"==typeof c)c=this._.focusList.length, -this._.focusList.push(new k(this,a,c));else{this._.focusList.splice(c,0,new k(this,a,c));for(var d=c+1;d<this._.focusList.length;d++)this._.focusList[d].focusIndex++}},setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var c=this.getParentEditor().lang.dir,d={attributes:{"class":"cke_dialog_spinner"},styles:{"float":"rtl"==c?"right":"left"}};d.styles["margin-"+("rtl"==c?"left":"right")]="8px";this.parts.spinner=CKEDITOR.document.createElement("div", -d);this.parts.spinner.setHtml("\x26#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok").enable());this.fire("state",a)}},getModel:function(a){return this._.model?this._.model:this.definition.getModel?this.definition.getModel(a):null},setModel:function(a){this._.model=a},getMode:function(a){if(this.definition.getMode)return this.definition.getMode(a); +g);CKEDITOR.dialog.addUIElement("html",g);CKEDITOR.dialog.addUIElement("fieldset",{build:function(a,b,d){for(var e=b.children,g,h=[],k=[],l=0;l<e.length&&(g=e[l]);l++){var m=[];h.push(m);k.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,m))}return new CKEDITOR.ui.dialog[b.type](a,k,h,d,b)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;CKEDITOR.DIALOG_STATE_IDLE=1;CKEDITOR.DIALOG_STATE_BUSY=2;(function(){function b(a){a._.tabBarMode= +!0;a._.tabs[a._.currentTabId][0].focus();a._.currentFocusIndex=-1}function h(){for(var a=this._.tabIdList.length,c=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,d=c-1;d>c-a;d--)if(this._.tabs[this._.tabIdList[d%a]][0].$.offsetHeight)return this._.tabIdList[d%a];return null}function g(){for(var a=this._.tabIdList.length,c=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),d=c+1;d<c+a;d++)if(this._.tabs[this._.tabIdList[d%a]][0].$.offsetHeight)return this._.tabIdList[d%a]; +return null}function e(a,c){for(var d=a.$.getElementsByTagName("input"),b=0,f=d.length;b<f;b++){var e=new CKEDITOR.dom.element(d[b]);"text"==e.getAttribute("type").toLowerCase()&&(c?(e.setAttribute("value",e.getCustomData("fake_value")||""),e.removeCustomData("fake_value")):(e.setCustomData("fake_value",e.getAttribute("value")),e.setAttribute("value","")))}}function a(a,c){var d=this.getInputElement();d&&(a?d.removeAttribute("aria-invalid"):d.setAttribute("aria-invalid",!0));a||(this.select?this.select(): +this.focus());c&&alert(c);this.fire("validated",{valid:a,msg:c})}function m(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function l(a){var c=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",I).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),d=c.getChild([0,0,0,0,0]),b=d.getChild(0), +f=d.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(d);!CKEDITOR.env.ie||CKEDITOR.env.quirks||CKEDITOR.env.edge||(a="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"'+a+'" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(d.getParent()));b.unselectable();f.unselectable();return{element:c, +parts:{dialog:c.getChild(0),title:b,close:f,tabs:d.getChild(2),contents:d.getChild([3,0,0,0]),footer:d.getChild([3,0,1,0])}}}function k(a,c,d){this.element=c;this.focusIndex=d;this.tabIndex=0;this.isFocusable=function(){return!c.getAttribute("disabled")&&c.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};c.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});c.on("focus",function(){this.fire("mouseover")});c.on("blur",function(){this.fire("mouseout")})} +function c(a){function c(){a.layout()}var d=CKEDITOR.document.getWindow();d.on("resize",c);a.on("hide",function(){d.removeListener("resize",c)})}function f(a,c){this.dialog=a;for(var b=c.contents,f=0,e;e=b[f];f++)b[f]=e&&new d(a,e);CKEDITOR.tools.extend(this,c)}function d(a,c){this._={dialog:a};CKEDITOR.tools.extend(this,c)}function n(a){function c(d){var k=a.getSize(),l=a.parts.dialog.getParent().getClientSize(),n=d.data.$.screenX,m=d.data.$.screenY,q=n-b.x,t=m-b.y;b={x:n,y:m};f.x+=q;f.y+=t;n=f.x+ +h[3]<g?-h[3]:f.x-h[1]>l.width-k.width-g?l.width-k.width+("rtl"==e.lang.dir?0:h[1]):f.x;k=f.y+h[0]<g?-h[0]:f.y-h[2]>l.height-k.height-g?l.height-k.height+h[2]:f.y;n=Math.floor(n);k=Math.floor(k);a.move(n,k,1);d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mousemove",c);CKEDITOR.document.removeListener("mouseup",d);if(CKEDITOR.env.ie6Compat){var a=E.getChild(0).getFrameDocument();a.removeListener("mousemove",c);a.removeListener("mouseup",d)}}var b=null,f=null,e=a.getParentEditor(), +g=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof g&&(g=20);a.parts.title.on("mousedown",function(e){if(!a._.moved){var g=a._.element;g.getFirst().setStyle("position","absolute");g.removeStyle("display");a._.moved=!0;a.layout()}b={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",d);f=a.getPosition();CKEDITOR.env.ie6Compat&&(g=E.getChild(0).getFrameDocument(),g.on("mousemove",c),g.on("mouseup",d));e.data.preventDefault()}, +a)}function w(a){function c(d){var m="rtl"==e.lang.dir,q=n.width,t=n.height,r=q+(d.data.$.screenX-l.x)*(m?-1:1)*(a._.moved?1:2),Q=t+(d.data.$.screenY-l.y)*(a._.moved?1:2),P=a._.element.getFirst(),P=m&&parseInt(P.getComputedStyle("right"),10),u=a.getPosition();u.x=u.x||0;u.y=u.y||0;u.y+Q>k.height&&(Q=k.height-u.y);(m?P:u.x)+r>k.width&&(r=k.width-(m?P:u.x));Q=Math.floor(Q);r=Math.floor(r);if(f==CKEDITOR.DIALOG_RESIZE_WIDTH||f==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(b.minWidth||0,r-g);if(f==CKEDITOR.DIALOG_RESIZE_HEIGHT|| +f==CKEDITOR.DIALOG_RESIZE_BOTH)t=Math.max(b.minHeight||0,Q-h);a.resize(q,t);a._.moved&&v(a,a._.position.x,a._.position.y);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",c);m&&(m.remove(),m=null);if(CKEDITOR.env.ie6Compat){var a=E.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",c)}}var b=a.definition,f=b.resizable;if(f!=CKEDITOR.DIALOG_RESIZE_NONE){var e= +a.getParentEditor(),g,h,k,l,n,m,q=CKEDITOR.tools.addFunction(function(b){function f(a){return a.isVisible()}n=a.getSize();var e=a.parts.contents,q=e.$.getElementsByTagName("iframe").length,t=!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks);q&&(m=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%; left:0; top:0;"\x3e\x3c/div\x3e'),e.append(m));h=n.height-a.parts.contents.getFirst(f).getSize("height",t); +g=n.width-a.parts.contents.getFirst(f).getSize("width",1);l={x:b.screenX,y:b.screenY};k=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(e=E.getChild(0).getFrameDocument(),e.on("mousemove",c),e.on("mouseup",d));b.preventDefault&&b.preventDefault()});a.on("load",function(){var c="";f==CKEDITOR.DIALOG_RESIZE_WIDTH?c=" cke_resizer_horizontal":f==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(c=" cke_resizer_vertical");c=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+ +c+" cke_resizer_"+e.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(e.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+q+', event )"\x3e'+("ltr"==e.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(c,1)});e.on("destroy",function(){CKEDITOR.tools.removeFunction(q)})}}function v(a,c,d){var b=a.parts.dialog.getParent().getClientSize(),f=a.getSize(),e=a._.viewportRatio,g=Math.max(b.width-f.width,0),b=Math.max(b.height-f.height,0);e.width=g?c/g:e.width;e.height=b?d/b:e.height; +a._.viewportRatio=e}function p(a){a.data.preventDefault(1)}function r(a){var c=a.config,d=CKEDITOR.skinName||a.config.skin,b=c.dialog_backgroundCoverColor||("moono-lisa"==d?"black":"white"),d=c.dialog_backgroundCoverOpacity,f=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(b,d,f),e=H[c];CKEDITOR.document.getBody().addClass("cke_dialog_open");e?e.show():(f=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",f,"; top: 0px; left: 0px; ","; width: 100%; height: 100%;", +CKEDITOR.env.ie6Compat?"":"background-color: "+b,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(b="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+b+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",f.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'),f.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+b+"' );document.close();")+"})())"),f.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')), +f.push("\x3c/div\x3e"),e=CKEDITOR.dom.element.createFromHtml(f.join("")),e.setOpacity(void 0!==d?d:.5),e.on("keydown",p),e.on("keypress",p),e.on("keyup",p),e.appendTo(CKEDITOR.document.getBody()),H[c]=e);a.focusManager.add(e);E=e;CKEDITOR.env.mac&&CKEDITOR.env.webkit||e.focus()}function q(a){CKEDITOR.document.getBody().removeClass("cke_dialog_open");E&&(a.focusManager.remove(E),E.hide())}function x(a){var c=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,b=a.data.$.shiftKey,f=String.fromCharCode(a.data.$.keyCode); +(c=J[(c?"CTRL+":"")+(d?"ALT+":"")+(b?"SHIFT+":"")+f])&&c.length&&(c=c[c.length-1],c.keydown&&c.keydown.call(c.uiElement,c.dialog,c.key),a.data.preventDefault())}function t(a){var c=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,b=a.data.$.shiftKey,f=String.fromCharCode(a.data.$.keyCode);(c=J[(c?"CTRL+":"")+(d?"ALT+":"")+(b?"SHIFT+":"")+f])&&c.length&&(c=c[c.length-1],c.keyup&&(c.keyup.call(c.uiElement,c.dialog,c.key),a.data.preventDefault()))}function z(a,c,d,b,f){(J[d]||(J[d]=[])).push({uiElement:a, +dialog:c,key:d,keyup:f||a.accessKeyUp,keydown:b||a.accessKeyDown})}function y(a){for(var c in J){for(var d=J[c],b=d.length-1;0<=b;b--)d[b].dialog!=a&&d[b].uiElement!=a||d.splice(b,1);0===d.length&&delete J[c]}}function u(a,c){a._.accessKeyMap[c]&&a.selectPage(a._.accessKeyMap[c])}function B(){}var C=CKEDITOR.tools.cssLength,A,E,G=!CKEDITOR.env.ie||CKEDITOR.env.edge,I='\x3cdiv class\x3d"cke_reset_all cke_dialog_container {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" style\x3d"'+(G?"display:flex": +"")+'" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"'+(G?"margin:auto":"position:absolute")+'" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e'; +CKEDITOR.dialog=function(c,d){function e(){var a=E._.focusList;a.sort(function(a,c){return a.tabIndex!=c.tabIndex?c.tabIndex-a.tabIndex:a.focusIndex-c.focusIndex});for(var c=a.length,d=0;d<c;d++)a[d].focusIndex=d}function k(a){var c=E._.focusList;a=a||0;if(!(1>c.length)){var d=E._.currentFocusIndex;E._.tabBarMode&&0>a&&(d=0);try{c[d].getInputElement().$.blur()}catch(b){}var f=d,e=1<E._.pageCount;do{f+=a;if(e&&!E._.tabBarMode&&(f==c.length||-1==f)){E._.tabBarMode=!0;E._.tabs[E._.currentTabId][0].focus(); +E._.currentFocusIndex=-1;return}f=(f+c.length)%c.length;if(f==d)break}while(a&&!c[f].isFocusable());c[f].focus();"text"==c[f].type&&c[f].select()}}function q(a){if(E==CKEDITOR.dialog._.currentTop){var d=a.data.getKeystroke(),f="rtl"==c.lang.dir,e=[37,38,39,40];z=v=0;if(9==d||d==CKEDITOR.SHIFT+9)k(d==CKEDITOR.SHIFT+9?-1:1),z=1;else if(d==CKEDITOR.ALT+121&&!E._.tabBarMode&&1<E.getPageCount())b(E),z=1;else if(-1!=CKEDITOR.tools.indexOf(e,d)&&E._.tabBarMode)d=-1!=CKEDITOR.tools.indexOf([f?39:37,38],d)? +h.call(E):g.call(E),E.selectPage(d),E._.tabs[d][0].focus(),z=1;else if(13!=d&&32!=d||!E._.tabBarMode)if(13==d)d=a.data.getTarget(),d.is("a","button","select","textarea")||d.is("input")&&"button"==d.$.type||((d=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(d.click,0,d),z=1),v=1;else if(27==d)(d=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(d.click,0,d):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),v=1;else return;else this.selectPage(this._.currentTabId),this._.tabBarMode=!1,this._.currentFocusIndex= +-1,k(1),z=1;t(a)}}function t(a){z?a.data.preventDefault(1):v&&a.data.stopPropagation()}var r=CKEDITOR.dialog._.dialogDefinitions[d],u=CKEDITOR.tools.clone(A),x=c.config.dialog_buttonsOrder||"OS",y=c.lang.dir,p={},z,v;("OS"==x&&CKEDITOR.env.mac||"rtl"==x&&"ltr"==y||"ltr"==x&&"rtl"==y)&&u.buttons.reverse();r=CKEDITOR.tools.extend(r(c),u);r=CKEDITOR.tools.clone(r);r=new f(this,r);u=l(c);this._={editor:c,element:u.element,name:d,model:null,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{}, +buttons:{},accessKeyMap:{},viewportRatio:{width:.5,height:.5},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=u.parts;CKEDITOR.tools.setTimeout(function(){c.fire("ariaWidget",this.parts.contents)},0,this);u={top:0,visibility:"hidden"};CKEDITOR.env.ie6Compat&&(u.position="absolute");u["rtl"==y?"right":"left"]=0;this.parts.dialog.setStyles(u);CKEDITOR.event.call(this);this.definition=r=CKEDITOR.fire("dialogDefinition", +{name:d,definition:r,dialog:this},c).definition;if(!("removeDialogTabs"in c._)&&c.config.removeDialogTabs){u=c.config.removeDialogTabs.split(";");for(y=0;y<u.length;y++)if(x=u[y].split(":"),2==x.length){var B=x[0];p[B]||(p[B]=[]);p[B].push(x[1])}c._.removeDialogTabs=p}if(c._.removeDialogTabs&&(p=c._.removeDialogTabs[d]))for(y=0;y<p.length;y++)r.removeContents(p[y]);if(r.onLoad)this.on("load",r.onLoad);if(r.onShow)this.on("show",r.onShow);if(r.onHide)this.on("hide",r.onHide);if(r.onOk)this.on("ok", +function(a){c.fire("saveSnapshot");setTimeout(function(){c.fire("saveSnapshot")},0);!1===r.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(r.onCancel)this.on("cancel",function(a){!1===r.onCancel.call(this,a)&&(a.data.hide=!1)});var E=this,C=function(a){var c=E._.contents,d=!1,b;for(b in c)for(var f in c[b])if(d=a.call(this,c[b][f]))return};this.on("ok",function(c){C(function(d){if(d.validate){var b=d.validate(this),f="string"==typeof b||!1===b;f&&(c.data.hide=!1,c.stop()); +a.call(d,!f,"string"==typeof b?b:void 0);return f}})},this,null,0);this.on("cancel",function(a){C(function(d){if(d.isChanged())return c.config.dialog_noConfirmCancel||confirm(c.lang.common.confirmCancel)||(a.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=k;var I=this._.element;c.focusManager.add(I,1);this.on("show",function(){I.on("keydown",q,this);if(CKEDITOR.env.gecko)I.on("keypress", +t,this)});this.on("hide",function(){I.removeListener("keydown",q);CKEDITOR.env.gecko&&I.removeListener("keypress",t);C(function(a){m.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",q,this,null,0)});this.on("show",function(){e();var a=1<E._.pageCount;c.config.dialog_startupFocusTab&&a?(E._.tabBarMode=!0,E._.tabs[E._.currentTabId][0].focus(),E._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=a?-1:this._.focusList.length- +1,r.onFocus?(a=r.onFocus.call(this))&&a.focus():k(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),c=a.getFirst();c.remove();c.appendTo(a)},this);n(this);w(this);(new CKEDITOR.dom.text(r.title,CKEDITOR.document)).appendTo(this.parts.title);for(y=0;y<r.contents.length;y++)(p=r.contents[y])&&this.addPage(p);this.parts.tabs.on("click",function(a){var c=a.data.getTarget();c.hasClass("cke_dialog_tab")&&(c=c.$.id,this.selectPage(c.substring(4,c.lastIndexOf("_"))), +b(this),a.data.preventDefault())},this);y=[];p=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:r.buttons},y).getChild();this.parts.footer.setHtml(y.join(""));for(y=0;y<p.length;y++)this._.buttons[p[y].id]=p[y]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(a,c){if(!this._.contentSize||this._.contentSize.width!=a||this._.contentSize.height!=c){CKEDITOR.dialog.fire("resize", +{dialog:this,width:a,height:c},this._.editor);this.fire("resize",{width:a,height:c},this._.editor);this.parts.contents.setStyles({width:a+"px",height:c+"px"});if("rtl"==this._.editor.lang.dir&&this._.position){var d=this.parts.dialog.getParent().getClientSize().width;this._.position.x=d-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)}this._.contentSize={width:a,height:c}}},getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight|| +0}},move:function(a,c,d){var b=this._.element.getFirst(),f="rtl"==this._.editor.lang.dir;CKEDITOR.env.ie&&b.setStyle("zoom","100%");var e=this.parts.dialog.getParent().getClientSize(),g=this.getSize(),h=this._.viewportRatio,k=Math.max(e.width-g.width,0),e=Math.max(e.height-g.height,0);this._.position&&this._.position.x==a&&this._.position.y==c?(a=Math.floor(k*h.width),c=Math.floor(e*h.height)):v(this,a,c);this._.position={x:a,y:c};f&&(a=k-a);c={top:(0<c?c:0)+"px"};c[f?"right":"left"]=(0<a?a:0)+"px"; +b.setStyles(c);d&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,d=this.definition,b=CKEDITOR.document.getBody(),f=this._.editor.config.baseFloatZIndex;a.getParent()&&a.getParent().equals(b)?a.setStyle("display",G?"flex":"block"):a.appendTo(b);this.resize(this._.contentSize&&this._.contentSize.width||d.width||d.minWidth,this._.contentSize&&this._.contentSize.height||d.height||d.minHeight);this.reset();null===this._.currentTabId&& +this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=f);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);this.getElement().setStyle("z-index",CKEDITOR.dialog._.currentZIndex);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,r(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,b=this._.parentDialog.getElement().getFirst(),b.$.style.zIndex-= +Math.floor(f/2),this._.parentDialog.getElement().setStyle("z-index",b.$.style.zIndex),CKEDITOR.dialog._.currentTop=this);a.on("keydown",x);a.on("keyup",t);this._.hasFocus=!1;for(var e in d.contents)if(d.contents[e]){var a=d.contents[e],f=this._.tabs[a.id],b=a.requiredContent,g=0;if(f){for(var h in this._.contents[a.id]){var k=this._.contents[a.id][h];"hbox"!=k.type&&"vbox"!=k.type&&k.getInputElement()&&(k.requiredContent&&!this._.editor.activeFilter.check(k.requiredContent)?k.disable():(k.enable(), +g++))}!g||b&&!this._.editor.activeFilter.check(b)?f[0].addClass("cke_dialog_tab_disabled"):f[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();c(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a= +this.parts.dialog;if(this._.moved||!G){var c=this.getSize(),d=CKEDITOR.document.getWindow().getViewPaneSize(),b;this._.moved&&this._.position?(b=this._.position.x,c=this._.position.y):(b=(d.width-c.width)/2,c=(d.height-c.height)/2);CKEDITOR.env.ie6Compat||(a.setStyle("position","absolute"),a.removeStyle("margin"));b=Math.floor(b);c=Math.floor(c);this.move(b,c)}},foreach:function(a){for(var c in this._.contents)for(var d in this._.contents[c])a.call(this,this._.contents[c][d]);return this},reset:function(){var a= +function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(c){c.setup&&c.setup.apply(c,a)})},commitContent:function(){var a=arguments;this.foreach(function(c){CKEDITOR.env.ie&&this._.currentFocusIndex==c.focusIndex&&c.getInputElement().$.blur();c.commit&&c.commit.apply(c,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]); +var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(y(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var c=this._.parentDialog.getElement().getFirst();this._.parentDialog.getElement().removeStyle("z-index");c.setStyle("z-index",parseInt(c.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else q(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-= +10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",x);a.removeListener("keyup",t);var d=this._.editor;d.focus();setTimeout(function(){d.focusManager.unlock();CKEDITOR.env.iOS&&d.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var c=[],d=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+ +'"':"",b=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},c),f=this._.contents[a.id]={},e=b.getChild(),g=0;b=e.shift();)b.notAllowed||"hbox"==b.type||"vbox"==b.type||g++,f[b.id]=b,"function"==typeof b.getChild&&e.push.apply(e,b.getChild());g||(a.hidden=!0);c=CKEDITOR.dom.element.createFromHtml(c.join(""));c.setAttribute("role","tabpanel");c.setStyle("min-height", +"100%");b=CKEDITOR.env;f="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();d=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",d,a.hidden?' style\x3d"display:none"':"",' id\x3d"',f,'"',b.gecko&&!b.hc?"":' href\x3d"javascript:void(0)"',' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e',a.label,"\x3c/a\x3e"].join(""));c.setAttribute("aria-labelledby",f);this._.tabs[a.id]=[d,c];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++; +this._.lastTab=d;this.updateStyle();c.setAttribute("name",a.id);c.appendTo(this.parts.contents);d.unselectable();this.parts.tabs.append(d);a.accessKey&&(z(this,this,"CTRL+"+a.accessKey,B,u),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var c in this._.tabs){var d=this._.tabs[c][0],b=this._.tabs[c][1];c!=a&&(d.removeClass("cke_dialog_tab_selected"), +d.removeAttribute("aria-selected"),b.hide());b.setAttribute("aria-hidden",c!=a)}var f=this._.tabs[a];f[0].addClass("cke_dialog_tab_selected");f[0].setAttribute("aria-selected",!0);CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(e(f[1]),f[1].show(),setTimeout(function(){e(f[1],1)},0)):f[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var c= +this._.tabs[a]&&this._.tabs[a][0];c&&1!=this._.pageCount&&c.isVisible()&&(a==this._.currentTabId&&this.selectPage(h.call(this)),c.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,c){var d=this._.contents[a];return d&&d[c]},getValueOf:function(a,c){return this.getContentElement(a,c).getValue()}, +setValueOf:function(a,c,d){return this.getContentElement(a,c).setValue(d)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a, +c){if("undefined"==typeof c)c=this._.focusList.length,this._.focusList.push(new k(this,a,c));else{this._.focusList.splice(c,0,new k(this,a,c));for(var d=c+1;d<this._.focusList.length;d++)this._.focusList[d].focusIndex++}},setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var c=this.getParentEditor().lang.dir,d={attributes:{"class":"cke_dialog_spinner"},styles:{"float":"rtl"==c?"right":"left"}};d.styles["margin-"+("rtl"==c?"left":"right")]= +"8px";this.parts.spinner=CKEDITOR.document.createElement("div",d);this.parts.spinner.setHtml("\x26#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok").enable());this.fire("state",a)}},getModel:function(a){return this._.model?this._.model:this.definition.getModel?this.definition.getModel(a):null},setModel:function(a){this._.model=a},getMode:function(a){if(this.definition.getMode)return this.definition.getMode(a); a=this.getModel(a);return!a||a instanceof CKEDITOR.dom.element&&!a.getParent()?CKEDITOR.dialog.CREATION_MODE:CKEDITOR.dialog.EDITING_MODE}};CKEDITOR.tools.extend(CKEDITOR.dialog,{CREATION_MODE:0,EDITING_MODE:1,add:function(a,c){this._.dialogDefinitions[a]&&"function"!=typeof c||(this._.dialogDefinitions[a]=c)},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,c,d){a=a.config.removeDialogTabs;return!(a&&a.match(new RegExp("(?:^|;)"+ c+":"+d+"(?:$|;)","i")))},okButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(c){return CKEDITOR.tools.extend(function(d){return a(d,c)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"cancel",type:"button", label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;!1!==a.fire("cancel",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(c){return CKEDITOR.tools.extend(function(d){return a(d,c)},{type:"button"},!0)};return a}(),addUIElement:function(a,c){this._.uiElementBuilders[a]=c}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype); -var t={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},y=function(a,c,d){for(var b=0,e;e=a[b];b++)if(e.id==c||d&&e[d]&&(e=y(e[d],c,d)))return e;return null},v=function(a,c,d,b,e){if(d){for(var f=0,g;g=a[f];f++){if(g.id==d)return a.splice(f,0,c),c;if(b&&g[b]&&(g=v(g[b],c,d,b,!0)))return g}if(e)return null}a.push(c);return c},x=function(a,c,d){for(var b=0,e;e=a[b];b++){if(e.id==c)return a.splice(b,1);if(d&&e[d]&&(e=x(e[d], -c,d)))return e}return null},B=function(a,c){this.dialog=a;for(var b=c.contents,e=0,f;f=b[e];e++)b[e]=f&&new d(a,f);CKEDITOR.tools.extend(this,c)};B.prototype={getContents:function(a){return y(this.contents,a)},getButton:function(a){return y(this.buttons,a)},addContents:function(a,c){return v(this.contents,a,c)},addButton:function(a,c){return v(this.buttons,a,c)},removeContents:function(a){x(this.contents,a)},removeButton:function(a){x(this.buttons,a)}};d.prototype={get:function(a){return y(this.elements, -a,"children")},add:function(a,c){return v(this.elements,a,c,"children")},remove:function(a){x(this.elements,a,"children")}};var D={},A,G={},C=function(a){var c=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,b=a.data.$.shiftKey,e=String.fromCharCode(a.data.$.keyCode);(c=G[(c?"CTRL+":"")+(d?"ALT+":"")+(b?"SHIFT+":"")+e])&&c.length&&(c=c[c.length-1],c.keydown&&c.keydown.call(c.uiElement,c.dialog,c.key),a.data.preventDefault())},I=function(a){var c=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey, -b=a.data.$.shiftKey,e=String.fromCharCode(a.data.$.keyCode);(c=G[(c?"CTRL+":"")+(d?"ALT+":"")+(b?"SHIFT+":"")+e])&&c.length&&(c=c[c.length-1],c.keyup&&(c.keyup.call(c.uiElement,c.dialog,c.key),a.data.preventDefault()))},J=function(a,c,d,b,e){(G[d]||(G[d]=[])).push({uiElement:a,dialog:c,key:d,keyup:e||a.accessKeyUp,keydown:b||a.accessKeyDown})},F=function(a){for(var c in G){for(var d=G[c],b=d.length-1;0<=b;b--)d[b].dialog!=a&&d[b].uiElement!=a||d.splice(b,1);0===d.length&&delete G[c]}},M=function(a, -c){a._.accessKeyMap[c]&&a.selectPage(a._.accessKeyMap[c])},H=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,c,d,b,e,f,g){if(!(4>arguments.length)){var h=(b.call?b(c):b)||"div",k=["\x3c",h," "],l=(e&&e.call?e(c):e)||{},n=(f&&f.call?f(c):f)||{},m=(g&&g.call?g.call(this,a,c):g)||"",q=this.domId=n.id||CKEDITOR.tools.getNextId()+"_uiElement";c.requiredContent&&!a.getParentEditor().filter.check(c.requiredContent)&&(l.display="none",this.notAllowed=!0);n.id=q;var t={};c.type&&(t["cke_dialog_ui_"+ -c.type]=1);c.className&&(t[c.className]=1);c.disabled&&(t.cke_disabled=1);for(var p=n["class"]&&n["class"].split?n["class"].split(" "):[],q=0;q<p.length;q++)p[q]&&(t[p[q]]=1);p=[];for(q in t)p.push(q);n["class"]=p.join(" ");c.title&&(n.title=c.title);t=(c.style||"").split(";");c.align&&(p=c.align,l["margin-left"]="left"==p?0:"auto",l["margin-right"]="right"==p?0:"auto");for(q in l)t.push(q+":"+l[q]);c.hidden&&t.push("display:none");for(q=t.length-1;0<=q;q--)""===t[q]&&t.splice(q,1);0<t.length&&(n.style= -(n.style?n.style+"; ":"")+t.join("; "));for(q in n)k.push(q+'\x3d"'+CKEDITOR.tools.htmlEncode(n[q])+'" ');k.push("\x3e",m,"\x3c/",h,"\x3e");d.push(k.join(""));(this._||(this._={})).dialog=a;"boolean"==typeof c.isChanged&&(this.isChanged=function(){return c.isChanged});"function"==typeof c.isChanged&&(this.isChanged=c.isChanged);"function"==typeof c.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(d){a.call(this,c.setValue.call(this,d))}}));"function"==typeof c.getValue&& -(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return c.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);this.registerEvents(c);this.accessKeyUp&&this.accessKeyDown&&c.accessKey&&J(this,a,"CTRL+"+c.accessKey);var w=this;a.on("load",function(){var c=w.getInputElement();if(c){var d=w.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?"cke_dialog_ui_focused":"";c.on("focus",function(){a._.tabBarMode=!1;a._.hasFocus=!0;w.fire("focus"); -d&&this.addClass(d)});c.on("blur",function(){w.fire("blur");d&&this.removeClass(d)})}});CKEDITOR.tools.extend(this,c);this.keyboardFocusable&&(this.tabIndex=c.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=w.focusIndex}))}},hbox:function(a,c,d,b,e){if(!(4>arguments.length)){this._||(this._={});var f=this._.children=c,g=e&&e.widths||null,h=e&&e.height||null,k,l={role:"presentation"};e&&e.align&&(l.align=e.align);CKEDITOR.ui.dialog.uiElement.call(this, -a,e||{type:"hbox"},b,"table",{},l,function(){var a=['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(k=0;k<d.length;k++){var c="cke_dialog_ui_hbox_child",b=[];0===k&&(c="cke_dialog_ui_hbox_first");k==d.length-1&&(c="cke_dialog_ui_hbox_last");a.push('\x3ctd class\x3d"',c,'" role\x3d"presentation" ');g?g[k]&&b.push("width:"+p(g[k])):b.push("width:"+Math.floor(100/d.length)+"%");h&&b.push("height:"+p(h));e&&void 0!==e.padding&&b.push("padding:"+p(e.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&& -f[k].align&&b.push("text-align:"+f[k].align);0<b.length&&a.push('style\x3d"'+b.join("; ")+'" ');a.push("\x3e",d[k],"\x3c/td\x3e")}a.push("\x3c/tr\x3e\x3c/tbody\x3e");return a.join("")})}},vbox:function(a,c,d,b,e){if(!(3>arguments.length)){this._||(this._={});var f=this._.children=c,g=e&&e.width||null,h=e&&e.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,e||{type:"vbox"},b,"div",null,{role:"presentation"},function(){var c=['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" ']; -c.push('style\x3d"');e&&e.expand&&c.push("height:100%;");c.push("width:"+p(g||"100%"),";");CKEDITOR.env.webkit&&c.push("float:none;");c.push('"');c.push('align\x3d"',CKEDITOR.tools.htmlEncode(e&&e.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');c.push("\x3e\x3ctbody\x3e");for(var b=0;b<d.length;b++){var k=[];c.push('\x3ctr\x3e\x3ctd role\x3d"presentation" ');g&&k.push("width:"+p(g||"100%"));h?k.push("height:"+p(h[b])):e&&e.expand&&k.push("height:"+Math.floor(100/d.length)+"%"); -e&&void 0!==e.padding&&k.push("padding:"+p(e.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f[b].align&&k.push("text-align:"+f[b].align);0<k.length&&c.push('style\x3d"',k.join("; "),'" ');c.push(' class\x3d"cke_dialog_ui_vbox_child"\x3e',d[b],"\x3c/td\x3e\x3c/tr\x3e")}c.push("\x3c/tbody\x3e\x3c/table\x3e");return c.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog}, -setValue:function(a,c){this.getInputElement().setValue(a);!c&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return!1},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus(); -return this},registerEvents:function(a){var c=/^on([A-Z]\w+)/,d,b=function(a,c,d,b){c.on("load",function(){a.getInputElement().on(d,b,a)})},e;for(e in a)if(d=e.match(c))this.eventProcessors[e]?this.eventProcessors[e].call(this,this._.dialog,a[e]):b(this,this._.dialog,d[1].toLowerCase(),a[e]);return this},eventProcessors:{onLoad:function(a,c){a.on("load",c,this)},onShow:function(a,c){a.on("show",c,this)},onHide:function(a,c){a.on("hide",c,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){}, -disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled");a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return this.isEnabled()&&this.isVisible()?!0:!1}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, -{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,d){for(var b=c.children,e,f=[],g=[],h=0;h<b.length&&(e=b[h]);h++){var k=[];f.push(k);g.push(CKEDITOR.dialog._.uiElementBuilders[e.type].build(a,e,k))}return new CKEDITOR.ui.dialog[c.type](a, -g,f,d,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,c){this.dialogName=a;CKEDITOR.tools.extend(this,c,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){var c=this.tabId;a.openDialog(this.dialogName,function(a){c&&a.selectPage(c)})},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,c=/^\d*$/,d=/^\d*(?:\.\d+)?$/,b=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,e=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, -f=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var c=this&&this.getValue?this.getValue():a[0],d,b=CKEDITOR.VALIDATE_AND,e=[],f;for(f=0;f<a.length;f++)if("function"==typeof a[f])e.push(a[f]);else break;f<a.length&&"string"==typeof a[f]&&(d=a[f],f++);f<a.length&&"number"==typeof a[f]&&(b=a[f]);var g=b==CKEDITOR.VALIDATE_AND?!0:!1;for(f=0;f<e.length;f++)g=b==CKEDITOR.VALIDATE_AND?g&& -e[f](c):g||e[f](c);return g?!0:d}},regex:function(a,c){return function(d){d=this&&this.getValue?this.getValue():d;return a.test(d)?!0:c}},notEmpty:function(c){return this.regex(a,c)},integer:function(a){return this.regex(c,a)},number:function(a){return this.regex(d,a)},cssLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return b.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return f.test(CKEDITOR.tools.trim(a))}, -a)},equals:function(a,c){return this.functions(function(c){return c==a},c)},notEqual:function(a,c){return this.functions(function(c){return c!=a},c)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var c;c=CKEDITOR.dialog._.currentTop;)c.hide();for(var d in D)D[d].remove();D={}}a=a.editor._.storedDialogs;for(var b in a)a[b].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,c,d){var b=null,e=CKEDITOR.dialog._.dialogDefinitions[a]; -null===CKEDITOR.dialog._.currentTop&&z(this);if("function"==typeof e)e=this._.storedDialogs||(this._.storedDialogs={}),b=e[a]||(e[a]=new CKEDITOR.dialog(this,a)),b.setModel(d),c&&c.call(b,b),b.show();else{if("failed"==e)throw r(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof e&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed"); +A={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]};var L=function(a,c,d){for(var b=0,f;f=a[b];b++)if(f.id==c||d&&f[d]&&(f=L(f[d],c,d)))return f;return null},F=function(a,c,d,b,f){if(d){for(var e=0,g;g=a[e];e++){if(g.id==d)return a.splice(e,0,c),c;if(b&&g[b]&&(g=F(g[b],c,d,b,!0)))return g}if(f)return null}a.push(c);return c},M=function(a,c,d){for(var b=0,f;f=a[b];b++){if(f.id==c)return a.splice(b,1);if(d&&f[d]&&(f=M(f[d], +c,d)))return f}return null};f.prototype={getContents:function(a){return L(this.contents,a)},getButton:function(a){return L(this.buttons,a)},addContents:function(a,c){return F(this.contents,a,c)},addButton:function(a,c){return F(this.buttons,a,c)},removeContents:function(a){M(this.contents,a)},removeButton:function(a){M(this.buttons,a)}};d.prototype={get:function(a){return L(this.elements,a,"children")},add:function(a,c){return F(this.elements,a,c,"children")},remove:function(a){M(this.elements,a, +"children")}};var H={},J={};(function(){CKEDITOR.ui.dialog={uiElement:function(a,c,d,b,f,e,g){if(!(4>arguments.length)){var h=(b.call?b(c):b)||"div",k=["\x3c",h," "],l=(f&&f.call?f(c):f)||{},n=(e&&e.call?e(c):e)||{},m=(g&&g.call?g.call(this,a,c):g)||"",q=this.domId=n.id||CKEDITOR.tools.getNextId()+"_uiElement";c.requiredContent&&!a.getParentEditor().filter.check(c.requiredContent)&&(l.display="none",this.notAllowed=!0);n.id=q;var r={};c.type&&(r["cke_dialog_ui_"+c.type]=1);c.className&&(r[c.className]= +1);c.disabled&&(r.cke_disabled=1);for(var t=n["class"]&&n["class"].split?n["class"].split(" "):[],q=0;q<t.length;q++)t[q]&&(r[t[q]]=1);t=[];for(q in r)t.push(q);n["class"]=t.join(" ");c.title&&(n.title=c.title);r=(c.style||"").split(";");c.align&&(t=c.align,l["margin-left"]="left"==t?0:"auto",l["margin-right"]="right"==t?0:"auto");for(q in l)r.push(q+":"+l[q]);c.hidden&&r.push("display:none");for(q=r.length-1;0<=q;q--)""===r[q]&&r.splice(q,1);0<r.length&&(n.style=(n.style?n.style+"; ":"")+r.join("; ")); +for(q in n)k.push(q+'\x3d"'+CKEDITOR.tools.htmlEncode(n[q])+'" ');k.push("\x3e",m,"\x3c/",h,"\x3e");d.push(k.join(""));(this._||(this._={})).dialog=a;"boolean"==typeof c.isChanged&&(this.isChanged=function(){return c.isChanged});"function"==typeof c.isChanged&&(this.isChanged=c.isChanged);"function"==typeof c.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(d){a.call(this,c.setValue.call(this,d))}}));"function"==typeof c.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue, +function(a){return function(){return c.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);this.registerEvents(c);this.accessKeyUp&&this.accessKeyDown&&c.accessKey&&z(this,a,"CTRL+"+c.accessKey);var u=this;a.on("load",function(){var c=u.getInputElement();if(c){var d=u.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?"cke_dialog_ui_focused":"";c.on("focus",function(){a._.tabBarMode=!1;a._.hasFocus=!0;u.fire("focus");d&&this.addClass(d)});c.on("blur",function(){u.fire("blur"); +d&&this.removeClass(d)})}});CKEDITOR.tools.extend(this,c);this.keyboardFocusable&&(this.tabIndex=c.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=u.focusIndex}))}},hbox:function(a,c,d,b,f){if(!(4>arguments.length)){this._||(this._={});var e=this._.children=c,g=f&&f.widths||null,h=f&&f.height||null,k,l={role:"presentation"};f&&f.align&&(l.align=f.align);CKEDITOR.ui.dialog.uiElement.call(this,a,f||{type:"hbox"},b,"table",{},l,function(){var a= +['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(k=0;k<d.length;k++){var c="cke_dialog_ui_hbox_child",b=[];0===k&&(c="cke_dialog_ui_hbox_first");k==d.length-1&&(c="cke_dialog_ui_hbox_last");a.push('\x3ctd class\x3d"',c,'" role\x3d"presentation" ');g?g[k]&&b.push("width:"+C(g[k])):b.push("width:"+Math.floor(100/d.length)+"%");h&&b.push("height:"+C(h));f&&void 0!==f.padding&&b.push("padding:"+C(f.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&e[k].align&&b.push("text-align:"+e[k].align); +0<b.length&&a.push('style\x3d"'+b.join("; ")+'" ');a.push("\x3e",d[k],"\x3c/td\x3e")}a.push("\x3c/tr\x3e\x3c/tbody\x3e");return a.join("")})}},vbox:function(a,c,d,b,f){if(!(3>arguments.length)){this._||(this._={});var e=this._.children=c,g=f&&f.width||null,h=f&&f.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,f||{type:"vbox"},b,"div",null,{role:"presentation"},function(){var c=['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" '];c.push('style\x3d"');f&&f.expand&&c.push("height:100%;"); +c.push("width:"+C(g||"100%"),";");CKEDITOR.env.webkit&&c.push("float:none;");c.push('"');c.push('align\x3d"',CKEDITOR.tools.htmlEncode(f&&f.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');c.push("\x3e\x3ctbody\x3e");for(var b=0;b<d.length;b++){var k=[];c.push('\x3ctr\x3e\x3ctd role\x3d"presentation" ');g&&k.push("width:"+C(g||"100%"));h?k.push("height:"+C(h[b])):f&&f.expand&&k.push("height:"+Math.floor(100/d.length)+"%");f&&void 0!==f.padding&&k.push("padding:"+C(f.padding));CKEDITOR.env.ie&& +CKEDITOR.env.quirks&&e[b].align&&k.push("text-align:"+e[b].align);0<k.length&&c.push('style\x3d"',k.join("; "),'" ');c.push(' class\x3d"cke_dialog_ui_vbox_child"\x3e',d[b],"\x3c/td\x3e\x3c/tr\x3e")}c.push("\x3c/tbody\x3e\x3c/table\x3e");return c.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,c){this.getInputElement().setValue(a); +!c&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return!1},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var c= +/^on([A-Z]\w+)/,d,b=function(a,c,d,b){c.on("load",function(){a.getInputElement().on(d,b,a)})},f;for(f in a)if(d=f.match(c))this.eventProcessors[f]?this.eventProcessors[f].call(this,this._.dialog,a[f]):b(this,this._.dialog,d[1].toLowerCase(),a[f]);return this},eventProcessors:{onLoad:function(a,c){a.on("load",c,this)},onShow:function(a,c){a.on("show",c,this)},onHide:function(a,c){a.on("hide",c,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement(); +this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled");a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return this.isEnabled()&&this.isVisible()?!0:!1}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, +{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,d){for(var b=c.children,f,e=[],g=[],h=0;h<b.length&&(f=b[h]);h++){var k=[];e.push(k);g.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,f,k))}return new CKEDITOR.ui.dialog[c.type](a, +g,e,d,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,c){this.dialogName=a;CKEDITOR.tools.extend(this,c,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){var c=this.tabId;a.openDialog(this.dialogName,function(a){c&&a.selectPage(c)})},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,c=/^\d*$/,d=/^\d*(?:\.\d+)?$/,b=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,f=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, +e=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var c=this&&this.getValue?this.getValue():a[0],d,b=CKEDITOR.VALIDATE_AND,f=[],e;for(e=0;e<a.length;e++)if("function"==typeof a[e])f.push(a[e]);else break;e<a.length&&"string"==typeof a[e]&&(d=a[e],e++);e<a.length&&"number"==typeof a[e]&&(b=a[e]);var g=b==CKEDITOR.VALIDATE_AND?!0:!1;for(e=0;e<f.length;e++)g=b==CKEDITOR.VALIDATE_AND?g&& +f[e](c):g||f[e](c);return g?!0:d}},regex:function(a,c){return function(d){d=this&&this.getValue?this.getValue():d;return a.test(d)?!0:c}},notEmpty:function(c){return this.regex(a,c)},integer:function(a){return this.regex(c,a)},number:function(a){return this.regex(d,a)},cssLength:function(a){return this.functions(function(a){return f.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return b.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))}, +a)},equals:function(a,c){return this.functions(function(c){return c==a},c)},notEqual:function(a,c){return this.functions(function(c){return c!=a},c)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var c;c=CKEDITOR.dialog._.currentTop;)c.hide();for(var d in H)H[d].remove();H={}}a=a.editor._.storedDialogs;for(var b in a)a[b].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,c,d){var b=null,f=CKEDITOR.dialog._.dialogDefinitions[a]; +null===CKEDITOR.dialog._.currentTop&&r(this);if("function"==typeof f)f=this._.storedDialogs||(this._.storedDialogs={}),b=f[a]||(f[a]=new CKEDITOR.dialog(this,a)),b.setModel(d),c&&c.call(b,b),b.show();else{if("failed"==f)throw q(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof f&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(f),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed"); this.openDialog(a,c,d)},this,0,1)}CKEDITOR.skin.loadPart("dialog");if(b)b.once("hide",function(){b.setModel(null)},null,null,999);return b}})})();var ka=!1;CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(b){ka||(CKEDITOR.document.appendStyleSheet(this.path+"styles/dialog.css"),ka=!0);b.on("doubleclick",function(h){h.data.dialog&&b.openDialog(h.data.dialog)},null,null,999)}});(function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1, cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-au":1,"en-gb":1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var h=this;b.addCommand("a11yHelp",{exec:function(){var g=b.langCode,g=h.availableLangs[g]?g:h.availableLangs[g.replace(/-.*/,"")]?g.replace(/-.*/,""): "en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(h.path+"dialogs/lang/"+g+".js"),function(){b.lang.a11yhelp=h.langEntries[g];b.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");b.on("ariaEditorHelpLabel",function(g){g.data.label=b.lang.common.editorHelp})}})})();CKEDITOR.plugins.add("about",{requires:"dialog",init:function(b){var h=b.addCommand("about",new CKEDITOR.dialogCommand("about")); -h.modes={wysiwyg:1,source:1};h.canUndo=!1;h.readOnly=1;b.ui.addButton&&b.ui.addButton("About",{label:b.lang.about.dlgTitle,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}});"use strict";(function(){function b(b){function g(){m=b.document;k=m[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();l=CKEDITOR.env.quirks?m.getBody():m.getDocumentElement();var a=CKEDITOR.env.quirks?l:l.findOne("body");a&&(a.setStyle("height","auto"),a.setStyle("min-height",CKEDITOR.env.safari? -"0%":"auto"));d=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",m)}function f(){w&&l.setStyle("overflow-y","hidden");var f=b.window.getViewPaneSize().height,g;k.append(d);g=d.getDocumentPosition(m).y+d.$.offsetHeight;d.remove();g+=e;g=Math.max(g,c);g=Math.min(g,n);g!=f&&a!=g&&(g=b.fire("autoGrow",{currentHeight:f,newHeight:g}).newHeight,b.resize(b.container.getStyle("width"), -g,!0),a=g);w||(g<n&&l.$.scrollHeight>l.$.clientHeight?l.setStyle("overflow-y","hidden"):l.removeStyle("overflow-y"))}var a,m,k,l,d,e=b.config.autoGrow_bottomSpace||0,c=void 0!==b.config.autoGrow_minHeight?b.config.autoGrow_minHeight:200,n=b.config.autoGrow_maxHeight||Infinity,w=!b.config.autoGrow_maxHeight;b.addCommand("autogrow",{exec:f,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var z={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},r;for(r in z)b.on(r,function(c){"wysiwyg"== -c.editor.mode&&setTimeout(function(){var c=b.getCommand("maximize");!b.window||c&&c.state==CKEDITOR.TRISTATE_ON?a=null:(f(),w||f())},100)});b.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?l.removeStyle("overflow-y"):f())});b.on("contentDom",g);g();b.config.autoGrow_onStartup&&b.editable().isVisible()&&b.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(h){if(h.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)h.on("instanceReady", -function(){h.editable().isInline()?h.ui.space("contents").setStyle("height","auto"):b(h)})}})})();CKEDITOR.plugins.add("basicstyles",{init:function(b){var h=0,g=function(a,g,d,e){if(e){e=new CKEDITOR.style(e);var c=f[d];c.unshift(e);b.attachStyleStateChange(e,function(a){!b.readOnly&&b.getCommand(d).setState(a)});b.addCommand(d,new CKEDITOR.styleCommand(e,{contentForms:c}));b.ui.addButton&&b.ui.addButton(a,{label:g,command:d,toolbar:"basicstyles,"+(h+=10)})}},f={bold:["strong","b",["span",function(a){a= +h.modes={wysiwyg:1,source:1};h.canUndo=!1;h.readOnly=1;b.ui.addButton&&b.ui.addButton("About",{label:b.lang.about.dlgTitle,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}});"use strict";(function(){function b(b){function g(){m=b.document;l=m[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();k=CKEDITOR.env.quirks?m.getBody():m.getDocumentElement();var a=CKEDITOR.env.quirks?k:k.findOne("body");a&&(a.setStyle("height","auto"),a.setStyle("min-height",CKEDITOR.env.safari? +"0%":"auto"));c=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",m)}function e(){w&&k.setStyle("overflow-y","hidden");var e=b.window.getViewPaneSize().height,g;l.append(c);g=c.getDocumentPosition(m).y+c.$.offsetHeight;c.remove();g+=f;g=Math.max(g,d);g=Math.min(g,n);g!=e&&a!=g&&(g=b.fire("autoGrow",{currentHeight:e,newHeight:g}).newHeight,b.resize(b.container.getStyle("width"), +g,!0),a=g);w||(g<n&&k.$.scrollHeight>k.$.clientHeight?k.setStyle("overflow-y","hidden"):k.removeStyle("overflow-y"))}var a,m,l,k,c,f=b.config.autoGrow_bottomSpace||0,d=void 0!==b.config.autoGrow_minHeight?b.config.autoGrow_minHeight:200,n=b.config.autoGrow_maxHeight||Infinity,w=!b.config.autoGrow_maxHeight;b.addCommand("autogrow",{exec:e,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var v={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},p;for(p in v)b.on(p,function(c){"wysiwyg"== +c.editor.mode&&setTimeout(function(){var c=b.getCommand("maximize");!b.window||c&&c.state==CKEDITOR.TRISTATE_ON?a=null:(e(),w||e())},100)});b.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?k.removeStyle("overflow-y"):e())});b.on("contentDom",g);g();b.config.autoGrow_onStartup&&b.editable().isVisible()&&b.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(h){if(h.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)h.on("instanceReady", +function(){h.editable().isInline()?h.ui.space("contents").setStyle("height","auto"):b(h)})}})})();CKEDITOR.plugins.add("basicstyles",{init:function(b){var h=0,g=function(a,g,c,f){if(f){f=new CKEDITOR.style(f);var d=e[c];d.unshift(f);b.attachStyleStateChange(f,function(a){!b.readOnly&&b.getCommand(c).setState(a)});b.addCommand(c,new CKEDITOR.styleCommand(f,{contentForms:d}));b.ui.addButton&&b.ui.addButton(a,{label:g,command:c,toolbar:"basicstyles,"+(h+=10)})}},e={bold:["strong","b",["span",function(a){a= a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},a=b.config,m=b.lang.basicstyles;g("Bold",m.bold,"bold",a.coreStyles_bold);g("Italic",m.italic,"italic",a.coreStyles_italic);g("Underline",m.underline,"underline", a.coreStyles_underline);g("Strike",m.strike,"strike",a.coreStyles_strike);g("Subscript",m.subscript,"subscript",a.coreStyles_subscript);g("Superscript",m.superscript,"superscript",a.coreStyles_superscript);b.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike= -{element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){var b={exec:function(b){var g=b.getCommand("blockquote").state,f=b.getSelection(),a=f&&f.getRanges()[0];if(a){var m=f.createBookmarks();if(CKEDITOR.env.ie){var k=m[0].startNode,l=m[0].endNode,d;if(k&&"blockquote"==k.getParent().getName())for(d=k;d=d.getNext();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){k.move(d,!0);break}if(l&&"blockquote"== -l.getParent().getName())for(d=l;d=d.getPrevious();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){l.move(d);break}}var e=a.createIterator();e.enlargeBr=b.config.enterMode!=CKEDITOR.ENTER_BR;if(g==CKEDITOR.TRISTATE_OFF){for(k=[];g=e.getNextParagraph();)k.push(g);1>k.length&&(g=b.document.createElement(b.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),l=m.shift(),a.insertNode(g),g.append(new CKEDITOR.dom.text("",b.document)),a.moveToBookmark(l),a.selectNodeContents(g),a.collapse(!0),l=a.createBookmark(), -k.push(g),m.unshift(l));d=k[0].getParent();a=[];for(l=0;l<k.length;l++)g=k[l],d=d.getCommonAncestor(g.getParent());for(g={table:1,tbody:1,tr:1,ol:1,ul:1};g[d.getName()];)d=d.getParent();for(l=null;0<k.length;){for(g=k.shift();!g.getParent().equals(d);)g=g.getParent();g.equals(l)||a.push(g);l=g}for(;0<a.length;)if(g=a.shift(),"blockquote"==g.getName()){for(l=new CKEDITOR.dom.documentFragment(b.document);g.getFirst();)l.append(g.getFirst().remove()),k.push(l.getLast());l.replace(g)}else k.push(g);a= -b.document.createElement("blockquote");for(a.insertBefore(k[0]);0<k.length;)g=k.shift(),a.append(g)}else if(g==CKEDITOR.TRISTATE_ON){l=[];for(d={};g=e.getNextParagraph();){for(k=a=null;g.getParent();){if("blockquote"==g.getParent().getName()){a=g.getParent();k=g;break}g=g.getParent()}a&&k&&!k.getCustomData("blockquote_moveout")&&(l.push(k),CKEDITOR.dom.element.setMarker(d,k,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(d);g=[];k=[];for(d={};0<l.length;)e=l.shift(),a=e.getParent(), -e.getPrevious()?e.getNext()?(e.breakParent(e.getParent()),k.push(e.getNext())):e.remove().insertAfter(a):e.remove().insertBefore(a),a.getCustomData("blockquote_processed")||(k.push(a),CKEDITOR.dom.element.setMarker(d,a,"blockquote_processed",!0)),g.push(e);CKEDITOR.dom.element.clearAllMarkers(d);for(l=k.length-1;0<=l;l--){a=k[l];a:{d=a;for(var e=0,c=d.getChildCount(),n=void 0;e<c&&(n=d.getChild(e));e++)if(n.type==CKEDITOR.NODE_ELEMENT&&n.isBlockBoundary()){d=!1;break a}d=!0}d&&a.remove()}if(b.config.enterMode== -CKEDITOR.ENTER_BR)for(a=!0;g.length;)if(e=g.shift(),"div"==e.getName()){l=new CKEDITOR.dom.documentFragment(b.document);!a||!e.getPrevious()||e.getPrevious().type==CKEDITOR.NODE_ELEMENT&&e.getPrevious().isBlockBoundary()||l.append(b.document.createElement("br"));for(a=e.getNext()&&!(e.getNext().type==CKEDITOR.NODE_ELEMENT&&e.getNext().isBlockBoundary());e.getFirst();)e.getFirst().remove().appendTo(l);a&&l.append(b.document.createElement("br"));l.replace(e);a=!1}}f.selectBookmarks(m);b.focus()}},refresh:function(b, -g){this.setState(b.elementPath(g.block||g.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(h){h.blockless||(h.addCommand("blockquote",b),h.ui.addButton&&h.ui.addButton("Blockquote",{label:h.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})})();"use strict";(function(){function b(b,f){CKEDITOR.tools.extend(this,f,{editor:b, -id:"cke-"+CKEDITOR.tools.getUniqueId(),area:b._.notificationArea});f.type||(this.type="info");this.element=this._createElement();b.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(this.element)}function h(b){var f=this;this.editor=b;this.notifications=[];this.element=this._createElement();this._uiBuffer=CKEDITOR.tools.eventsBuffer(10,this._layout,this);this._changeBuffer=CKEDITOR.tools.eventsBuffer(500,this._layout,this);b.on("destroy",function(){f._removeListeners();f.element.remove()})} -CKEDITOR.plugins.add("notification",{init:function(b){function f(a){var b=new CKEDITOR.dom.element("div");b.setStyles({position:"fixed","margin-left":"-9999px"});b.setAttributes({"aria-live":"assertive","aria-atomic":"true"});b.setText(a);CKEDITOR.document.getBody().append(b);setTimeout(function(){b.remove()},100)}b._.notificationArea=new h(b);b.showNotification=function(a,f,h){var l,d;"progress"==f?l=h:d=h;a=new CKEDITOR.plugins.notification(b,{message:a,type:f,progress:l,duration:d});a.show();return a}; -b.on("key",function(a){if(27==a.data.keyCode){var h=b._.notificationArea.notifications;h.length&&(f(b.lang.notification.closed),h[h.length-1].hide(),a.cancel())}})}});b.prototype={show:function(){!1!==this.editor.fire("notificationShow",{notification:this})&&(this.area.add(this),this._hideAfterTimeout())},update:function(b){var f=!0;!1===this.editor.fire("notificationUpdate",{notification:this,options:b})&&(f=!1);var a=this.element,h=a.findOne(".cke_notification_message"),k=a.findOne(".cke_notification_progress"), -l=b.type;a.removeAttribute("role");b.progress&&"progress"!=this.type&&(l="progress");l&&(a.removeClass(this._getClass()),a.removeAttribute("aria-label"),this.type=l,a.addClass(this._getClass()),a.setAttribute("aria-label",this.type),"progress"!=this.type||k?"progress"!=this.type&&k&&k.remove():(k=this._createProgressElement(),k.insertBefore(h)));void 0!==b.message&&(this.message=b.message,h.setHtml(this.message));void 0!==b.progress&&(this.progress=b.progress,k&&k.setStyle("width",this._getPercentageProgress())); -f&&b.important&&(a.setAttribute("role","alert"),this.isVisible()||this.area.add(this));this.duration=b.duration;this._hideAfterTimeout()},hide:function(){!1!==this.editor.fire("notificationHide",{notification:this})&&this.area.remove(this)},isVisible:function(){return 0<=CKEDITOR.tools.indexOf(this.area.notifications,this)},_createElement:function(){var b=this,f,a,h=this.editor.lang.common.close;f=new CKEDITOR.dom.element("div");f.addClass("cke_notification");f.addClass(this._getClass());f.setAttributes({id:this.id, -role:"alert","aria-label":this.type});"progress"==this.type&&f.append(this._createProgressElement());a=new CKEDITOR.dom.element("p");a.addClass("cke_notification_message");a.setHtml(this.message);f.append(a);a=CKEDITOR.dom.element.createFromHtml('\x3ca class\x3d"cke_notification_close" href\x3d"javascript:void(0)" title\x3d"'+h+'" role\x3d"button" tabindex\x3d"-1"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e');f.append(a);a.on("click",function(){b.editor.focus();b.hide()});return f}, -_getClass:function(){return"progress"==this.type?"cke_notification_info":"cke_notification_"+this.type},_createProgressElement:function(){var b=new CKEDITOR.dom.element("span");b.addClass("cke_notification_progress");b.setStyle("width",this._getPercentageProgress());return b},_getPercentageProgress:function(){return Math.round(100*(this.progress||0))+"%"},_hideAfterTimeout:function(){var b=this,f;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId);if("number"==typeof this.duration)f=this.duration; -else if("info"==this.type||"success"==this.type)f="number"==typeof this.editor.config.notification_duration?this.editor.config.notification_duration:5E3;f&&(b._hideTimeoutId=setTimeout(function(){b.hide()},f))}};h.prototype={add:function(b){this.notifications.push(b);this.element.append(b.element);1==this.element.getChildCount()&&(CKEDITOR.document.getBody().append(this.element),this._attachListeners());this._layout()},remove:function(b){var f=CKEDITOR.tools.indexOf(this.notifications,b);0>f||(this.notifications.splice(f, -1),b.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var b=this.editor,f=b.config,a=new CKEDITOR.dom.element("div");a.addClass("cke_notifications_area");a.setAttribute("id","cke_notifications_area_"+b.name);a.setStyle("z-index",f.baseFloatZIndex-2);return a},_attachListeners:function(){var b=CKEDITOR.document.getWindow(),f=this.editor;b.on("scroll",this._uiBuffer.input);b.on("resize",this._uiBuffer.input);f.on("change",this._changeBuffer.input); -f.on("floatingSpaceLayout",this._layout,this,null,20);f.on("blur",this._layout,this,null,20)},_removeListeners:function(){var b=CKEDITOR.document.getWindow(),f=this.editor;b.removeListener("scroll",this._uiBuffer.input);b.removeListener("resize",this._uiBuffer.input);f.removeListener("change",this._changeBuffer.input);f.removeListener("floatingSpaceLayout",this._layout);f.removeListener("blur",this._layout)},_layout:function(){function b(){f.setStyle("left",u(t+h.width-n-w))}var f=this.element,a= -this.editor,h=a.ui.contentsElement.getClientRect(),k=a.ui.contentsElement.getDocumentPosition(),l,d,e=f.getClientRect(),c,n=this._notificationWidth,w=this._notificationMargin;c=CKEDITOR.document.getWindow();var z=c.getScrollPosition(),r=c.getViewPaneSize(),p=CKEDITOR.document.getBody(),q=p.getDocumentPosition(),u=CKEDITOR.tools.cssLength;n&&w||(c=this.element.getChild(0),n=this._notificationWidth=c.getClientRect().width,w=this._notificationMargin=parseInt(c.getComputedStyle("margin-left"),10)+parseInt(c.getComputedStyle("margin-right"), -10));a.toolbar&&(l=a.ui.space("top"),d=l.getClientRect());l&&l.isVisible()&&d.bottom>h.top&&d.bottom<h.bottom-e.height?f.setStyles({position:"fixed",top:u(d.bottom)}):0<h.top?f.setStyles({position:"absolute",top:u(k.y)}):k.y+h.height-e.height>z.y?f.setStyles({position:"fixed",top:0}):f.setStyles({position:"absolute",top:u(k.y+h.height-e.height)});var t="fixed"==f.getStyle("position")?h.left:"static"!=p.getComputedStyle("position")?k.x-q.x:k.x;h.width<n+w?k.x+n+w>z.x+r.width?b():f.setStyle("left", -u(t)):k.x+n+w>z.x+r.width?f.setStyle("left",u(t)):k.x+h.width/2+n/2+w>z.x+r.width?f.setStyle("left",u(t-k.x+z.x+r.width-n-w)):0>h.left+h.width-n-w?b():0>h.left+h.width/2-n/2?f.setStyle("left",u(t-k.x+z.x)):f.setStyle("left",u(t+h.width/2-n/2-w/2))}};CKEDITOR.plugins.notification=b})();(function(){var b='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"'; +{element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){var b={exec:function(b){var g=b.getCommand("blockquote").state,e=b.getSelection(),a=e&&e.getRanges()[0];if(a){var m=e.createBookmarks();if(CKEDITOR.env.ie){var l=m[0].startNode,k=m[0].endNode,c;if(l&&"blockquote"==l.getParent().getName())for(c=l;c=c.getNext();)if(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()){l.move(c,!0);break}if(k&&"blockquote"== +k.getParent().getName())for(c=k;c=c.getPrevious();)if(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()){k.move(c);break}}var f=a.createIterator();f.enlargeBr=b.config.enterMode!=CKEDITOR.ENTER_BR;if(g==CKEDITOR.TRISTATE_OFF){for(l=[];g=f.getNextParagraph();)l.push(g);1>l.length&&(g=b.document.createElement(b.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),k=m.shift(),a.insertNode(g),g.append(new CKEDITOR.dom.text("",b.document)),a.moveToBookmark(k),a.selectNodeContents(g),a.collapse(!0),k=a.createBookmark(), +l.push(g),m.unshift(k));c=l[0].getParent();a=[];for(k=0;k<l.length;k++)g=l[k],c=c.getCommonAncestor(g.getParent());for(g={table:1,tbody:1,tr:1,ol:1,ul:1};g[c.getName()];)c=c.getParent();for(k=null;0<l.length;){for(g=l.shift();!g.getParent().equals(c);)g=g.getParent();g.equals(k)||a.push(g);k=g}for(;0<a.length;)if(g=a.shift(),"blockquote"==g.getName()){for(k=new CKEDITOR.dom.documentFragment(b.document);g.getFirst();)k.append(g.getFirst().remove()),l.push(k.getLast());k.replace(g)}else l.push(g);a= +b.document.createElement("blockquote");for(a.insertBefore(l[0]);0<l.length;)g=l.shift(),a.append(g)}else if(g==CKEDITOR.TRISTATE_ON){k=[];for(c={};g=f.getNextParagraph();){for(l=a=null;g.getParent();){if("blockquote"==g.getParent().getName()){a=g.getParent();l=g;break}g=g.getParent()}a&&l&&!l.getCustomData("blockquote_moveout")&&(k.push(l),CKEDITOR.dom.element.setMarker(c,l,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(c);g=[];l=[];for(c={};0<k.length;)f=k.shift(),a=f.getParent(), +f.getPrevious()?f.getNext()?(f.breakParent(f.getParent()),l.push(f.getNext())):f.remove().insertAfter(a):f.remove().insertBefore(a),a.getCustomData("blockquote_processed")||(l.push(a),CKEDITOR.dom.element.setMarker(c,a,"blockquote_processed",!0)),g.push(f);CKEDITOR.dom.element.clearAllMarkers(c);for(k=l.length-1;0<=k;k--){a=l[k];a:{c=a;for(var f=0,d=c.getChildCount(),n=void 0;f<d&&(n=c.getChild(f));f++)if(n.type==CKEDITOR.NODE_ELEMENT&&n.isBlockBoundary()){c=!1;break a}c=!0}c&&a.remove()}if(b.config.enterMode== +CKEDITOR.ENTER_BR)for(a=!0;g.length;)if(f=g.shift(),"div"==f.getName()){k=new CKEDITOR.dom.documentFragment(b.document);!a||!f.getPrevious()||f.getPrevious().type==CKEDITOR.NODE_ELEMENT&&f.getPrevious().isBlockBoundary()||k.append(b.document.createElement("br"));for(a=f.getNext()&&!(f.getNext().type==CKEDITOR.NODE_ELEMENT&&f.getNext().isBlockBoundary());f.getFirst();)f.getFirst().remove().appendTo(k);a&&k.append(b.document.createElement("br"));k.replace(f);a=!1}}e.selectBookmarks(m);b.focus()}},refresh:function(b, +g){this.setState(b.elementPath(g.block||g.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(h){h.blockless||(h.addCommand("blockquote",b),h.ui.addButton&&h.ui.addButton("Blockquote",{label:h.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})})();"use strict";(function(){function b(b,e){CKEDITOR.tools.extend(this,e,{editor:b, +id:"cke-"+CKEDITOR.tools.getUniqueId(),area:b._.notificationArea});e.type||(this.type="info");this.element=this._createElement();b.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(this.element)}function h(b){var e=this;this.editor=b;this.notifications=[];this.element=this._createElement();this._uiBuffer=CKEDITOR.tools.eventsBuffer(10,this._layout,this);this._changeBuffer=CKEDITOR.tools.eventsBuffer(500,this._layout,this);b.on("destroy",function(){e._removeListeners();e.element.remove()})} +CKEDITOR.plugins.add("notification",{init:function(b){function e(a){var b=new CKEDITOR.dom.element("div");b.setStyles({position:"fixed","margin-left":"-9999px"});b.setAttributes({"aria-live":"assertive","aria-atomic":"true"});b.setText(a);CKEDITOR.document.getBody().append(b);setTimeout(function(){b.remove()},100)}b._.notificationArea=new h(b);b.showNotification=function(a,e,h){var k,c;"progress"==e?k=h:c=h;a=new CKEDITOR.plugins.notification(b,{message:a,type:e,progress:k,duration:c});a.show();return a}; +b.on("key",function(a){if(27==a.data.keyCode){var h=b._.notificationArea.notifications;h.length&&(e(b.lang.notification.closed),h[h.length-1].hide(),a.cancel())}})}});b.prototype={show:function(){!1!==this.editor.fire("notificationShow",{notification:this})&&(this.area.add(this),this._hideAfterTimeout())},update:function(b){var e=!0;!1===this.editor.fire("notificationUpdate",{notification:this,options:b})&&(e=!1);var a=this.element,h=a.findOne(".cke_notification_message"),l=a.findOne(".cke_notification_progress"), +k=b.type;a.removeAttribute("role");b.progress&&"progress"!=this.type&&(k="progress");k&&(a.removeClass(this._getClass()),a.removeAttribute("aria-label"),this.type=k,a.addClass(this._getClass()),a.setAttribute("aria-label",this.type),"progress"!=this.type||l?"progress"!=this.type&&l&&l.remove():(l=this._createProgressElement(),l.insertBefore(h)));void 0!==b.message&&(this.message=b.message,h.setHtml(this.message));void 0!==b.progress&&(this.progress=b.progress,l&&l.setStyle("width",this._getPercentageProgress())); +e&&b.important&&(a.setAttribute("role","alert"),this.isVisible()||this.area.add(this));this.duration=b.duration;this._hideAfterTimeout()},hide:function(){!1!==this.editor.fire("notificationHide",{notification:this})&&this.area.remove(this)},isVisible:function(){return 0<=CKEDITOR.tools.indexOf(this.area.notifications,this)},_createElement:function(){var b=this,e,a,h=this.editor.lang.common.close;e=new CKEDITOR.dom.element("div");e.addClass("cke_notification");e.addClass(this._getClass());e.setAttributes({id:this.id, +role:"alert","aria-label":this.type});"progress"==this.type&&e.append(this._createProgressElement());a=new CKEDITOR.dom.element("p");a.addClass("cke_notification_message");a.setHtml(this.message);e.append(a);a=CKEDITOR.dom.element.createFromHtml('\x3ca class\x3d"cke_notification_close" href\x3d"javascript:void(0)" title\x3d"'+h+'" role\x3d"button" tabindex\x3d"-1"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e');e.append(a);a.on("click",function(){b.editor.focus();b.hide()});return e}, +_getClass:function(){return"progress"==this.type?"cke_notification_info":"cke_notification_"+this.type},_createProgressElement:function(){var b=new CKEDITOR.dom.element("span");b.addClass("cke_notification_progress");b.setStyle("width",this._getPercentageProgress());return b},_getPercentageProgress:function(){return Math.round(100*(this.progress||0))+"%"},_hideAfterTimeout:function(){var b=this,e;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId);if("number"==typeof this.duration)e=this.duration; +else if("info"==this.type||"success"==this.type)e="number"==typeof this.editor.config.notification_duration?this.editor.config.notification_duration:5E3;e&&(b._hideTimeoutId=setTimeout(function(){b.hide()},e))}};h.prototype={add:function(b){this.notifications.push(b);this.element.append(b.element);1==this.element.getChildCount()&&(CKEDITOR.document.getBody().append(this.element),this._attachListeners());this._layout()},remove:function(b){var e=CKEDITOR.tools.indexOf(this.notifications,b);0>e||(this.notifications.splice(e, +1),b.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var b=this.editor,e=b.config,a=new CKEDITOR.dom.element("div");a.addClass("cke_notifications_area");a.setAttribute("id","cke_notifications_area_"+b.name);a.setStyle("z-index",e.baseFloatZIndex-2);return a},_attachListeners:function(){var b=CKEDITOR.document.getWindow(),e=this.editor;b.on("scroll",this._uiBuffer.input);b.on("resize",this._uiBuffer.input);e.on("change",this._changeBuffer.input); +e.on("floatingSpaceLayout",this._layout,this,null,20);e.on("blur",this._layout,this,null,20)},_removeListeners:function(){var b=CKEDITOR.document.getWindow(),e=this.editor;b.removeListener("scroll",this._uiBuffer.input);b.removeListener("resize",this._uiBuffer.input);e.removeListener("change",this._changeBuffer.input);e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function b(){e.setStyle("left",x(t+h.width-n-w))}var e=this.element,a= +this.editor,h=a.ui.contentsElement.getClientRect(),l=a.ui.contentsElement.getDocumentPosition(),k,c,f=e.getClientRect(),d,n=this._notificationWidth,w=this._notificationMargin;d=CKEDITOR.document.getWindow();var v=d.getScrollPosition(),p=d.getViewPaneSize(),r=CKEDITOR.document.getBody(),q=r.getDocumentPosition(),x=CKEDITOR.tools.cssLength;n&&w||(d=this.element.getChild(0),n=this._notificationWidth=d.getClientRect().width,w=this._notificationMargin=parseInt(d.getComputedStyle("margin-left"),10)+parseInt(d.getComputedStyle("margin-right"), +10));a.toolbar&&(k=a.ui.space("top"),c=k.getClientRect());k&&k.isVisible()&&c.bottom>h.top&&c.bottom<h.bottom-f.height?e.setStyles({position:"fixed",top:x(c.bottom)}):0<h.top?e.setStyles({position:"absolute",top:x(l.y)}):l.y+h.height-f.height>v.y?e.setStyles({position:"fixed",top:0}):e.setStyles({position:"absolute",top:x(l.y+h.height-f.height)});var t="fixed"==e.getStyle("position")?h.left:"static"!=r.getComputedStyle("position")?l.x-q.x:l.x;h.width<n+w?l.x+n+w>v.x+p.width?b():e.setStyle("left", +x(t)):l.x+n+w>v.x+p.width?e.setStyle("left",x(t)):l.x+h.width/2+n/2+w>v.x+p.width?e.setStyle("left",x(t-l.x+v.x+p.width-n-w)):0>h.left+h.width-n-w?b():0>h.left+h.width/2-n/2?e.setStyle("left",x(t-l.x+v.x)):e.setStyle("left",x(t+h.width/2-n/2-w/2))}};CKEDITOR.plugins.notification=b})();(function(){var b='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"'; CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(b+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(b+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var h="";CKEDITOR.env.ie&&(h='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var b=b+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"'+h+'CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"')+ -'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',g=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),f=CKEDITOR.addTemplate("button",b);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON, -CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){function h(){var c=a.mode;c&&(c=this.modes[c]?void 0!==l[c]?l[c]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,c=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED: -c,this.setState(c),this.refresh&&this.refresh())}var l=null,d=CKEDITOR.env,e=this._.id=CKEDITOR.tools.getNextId(),c="",n=this.command,w,z,r;this._.editor=a;var p={id:e,button:this,editor:a,focus:function(){CKEDITOR.document.getById(e).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},q=CKEDITOR.tools.addFunction(function(a){if(p.onkey)return a=new CKEDITOR.dom.event(a),!1!==p.onkey(p,a.getKeystroke())}),u=CKEDITOR.tools.addFunction(function(a){var c;p.onfocus&& -(c=!1!==p.onfocus(p,new CKEDITOR.dom.event(a)));return c}),t=0;p.clickFn=w=CKEDITOR.tools.addFunction(function(){t&&(a.unlockSelection(1),t=0);p.execute();d.iOS&&a.focus()});this.modes?(l={},a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(l[a.mode]=this._.state)},this),a.on("activeFilterChange",h,this),a.on("mode",h,this),!this.readOnly&&a.on("readOnly",h,this)):n&&(n=a.getCommand(n))&&(n.on("state",function(){this.setState(n.state)},this),c+=n.state==CKEDITOR.TRISTATE_ON? -"on":n.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");var y;if(this.directional)a.on("contentDirChanged",function(c){var d=CKEDITOR.document.getById(this._.id),b=d.getFirst();c=c.data;c!=a.lang.dir?d.addClass("cke_"+c):d.removeClass("cke_ltr").removeClass("cke_rtl");b.setAttribute("style",CKEDITOR.skin.getIconStyle(y,"rtl"==c,this.icon,this.iconOffset))},this);n?(z=a.getCommandKeystroke(n))&&(r=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,z)):c+="off";z=this.name||this.command;var v= -null,x=this.icon;y=z;this.icon&&!/\./.test(this.icon)?(y=this.icon,x=null):(this.icon&&(v=this.icon),CKEDITOR.env.hidpi&&this.iconHiDpi&&(v=this.iconHiDpi));v?(CKEDITOR.skin.addIcon(v,v),x=null):v=y;c={id:e,name:z,iconName:y,label:this.label,cls:(this.hasArrow?"cke_button_expandable ":"")+(this.className||""),state:c,ariaDisabled:"disabled"==c?"true":"false",title:this.title+(r?" ("+r.display+")":""),ariaShortcut:r?a.lang.common.keyboardShortcut+" "+r.aria:"",titleJs:d.gecko&&!d.hc?"":(this.title|| -"").replace("'",""),hasArrow:"string"===typeof this.hasArrow&&this.hasArrow||(this.hasArrow?"true":"false"),keydownFn:q,focusFn:u,clickFn:w,style:CKEDITOR.skin.getIconStyle(v,"rtl"==a.lang.dir,x,this.iconOffset),arrowHtml:this.hasArrow?g.output():""};f.output(c,b);if(this.onRender)this.onRender();return p},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),b.setAttribute("aria-disabled",a==CKEDITOR.TRISTATE_DISABLED), +'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',g=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),e=CKEDITOR.addTemplate("button",b);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON, +CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){function h(){var c=a.mode;c&&(c=this.modes[c]?void 0!==k[c]?k[c]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,c=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED: +c,this.setState(c),this.refresh&&this.refresh())}var k=null,c=CKEDITOR.env,f=this._.id=CKEDITOR.tools.getNextId(),d="",n=this.command,w,v,p;this._.editor=a;var r={id:f,button:this,editor:a,focus:function(){CKEDITOR.document.getById(f).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},q=CKEDITOR.tools.addFunction(function(a){if(r.onkey)return a=new CKEDITOR.dom.event(a),!1!==r.onkey(r,a.getKeystroke())}),x=CKEDITOR.tools.addFunction(function(a){var c;r.onfocus&& +(c=!1!==r.onfocus(r,new CKEDITOR.dom.event(a)));return c}),t=0;r.clickFn=w=CKEDITOR.tools.addFunction(function(){t&&(a.unlockSelection(1),t=0);r.execute();c.iOS&&a.focus()});this.modes?(k={},a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(k[a.mode]=this._.state)},this),a.on("activeFilterChange",h,this),a.on("mode",h,this),!this.readOnly&&a.on("readOnly",h,this)):n&&(n=a.getCommand(n))&&(n.on("state",function(){this.setState(n.state)},this),d+=n.state==CKEDITOR.TRISTATE_ON? +"on":n.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");var z;if(this.directional)a.on("contentDirChanged",function(c){var d=CKEDITOR.document.getById(this._.id),b=d.getFirst();c=c.data;c!=a.lang.dir?d.addClass("cke_"+c):d.removeClass("cke_ltr").removeClass("cke_rtl");b.setAttribute("style",CKEDITOR.skin.getIconStyle(z,"rtl"==c,this.icon,this.iconOffset))},this);n?(v=a.getCommandKeystroke(n))&&(p=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,v)):d+="off";v=this.name||this.command;var y= +null,u=this.icon;z=v;this.icon&&!/\./.test(this.icon)?(z=this.icon,u=null):(this.icon&&(y=this.icon),CKEDITOR.env.hidpi&&this.iconHiDpi&&(y=this.iconHiDpi));y?(CKEDITOR.skin.addIcon(y,y),u=null):y=z;d={id:f,name:v,iconName:z,label:this.label,cls:(this.hasArrow?"cke_button_expandable ":"")+(this.className||""),state:d,ariaDisabled:"disabled"==d?"true":"false",title:this.title+(p?" ("+p.display+")":""),ariaShortcut:p?a.lang.common.keyboardShortcut+" "+p.aria:"",titleJs:c.gecko&&!c.hc?"":(this.title|| +"").replace("'",""),hasArrow:"string"===typeof this.hasArrow&&this.hasArrow||(this.hasArrow?"true":"false"),keydownFn:q,focusFn:x,clickFn:w,style:CKEDITOR.skin.getIconStyle(y,"rtl"==a.lang.dir,u,this.iconOffset),arrowHtml:this.hasArrow?g.output():""};e.output(d,b);if(this.onRender)this.onRender();return r},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),b.setAttribute("aria-disabled",a==CKEDITOR.TRISTATE_DISABLED), this.hasArrow?b.setAttribute("aria-expanded",a==CKEDITOR.TRISTATE_ON):a===CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;this.allowedContent||this.requiredContent||!this.command||(b=a.getCommand(this.command)||b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();(function(){function b(a){function b(){for(var c= -f(),d=CKEDITOR.tools.clone(a.config.toolbarGroups)||h(a),e=0;e<d.length;e++){var m=d[e];if("/"!=m){"string"==typeof m&&(m=d[e]={name:m});var p,q=m.groups;if(q)for(var u=0;u<q.length;u++)p=q[u],(p=c[p])&&g(m,p);(p=c[m.name])&&g(m,p)}}return d}function f(){var c={},d,b,e;for(d in a.ui.items)b=a.ui.items[d],e=b.toolbar||"others",e=e.split(","),b=e[0],e=parseInt(e[1]||-1,10),c[b]||(c[b]=[]),c[b].push({name:d,order:e});for(b in c)c[b]=c[b].sort(function(a,c){return a.order==c.order?0:0>c.order?-1:0>a.order? -1:a.order<c.order?-1:1});return c}function g(c,d){if(d.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var b;b=d.shift();)b="string"==typeof b?b:b.name,e&&-1!=CKEDITOR.tools.indexOf(e,b)||(b=a.ui.create(b))&&a.addFeature(b)&&c.items.push(b)}}function d(a){var c=[],d,b,e;for(d=0;d<a.length;++d)b=a[d],e={},"/"==b?c.push(b):CKEDITOR.tools.isArray(b)?(g(e,CKEDITOR.tools.clone(b)),c.push(e)):b.items&&(g(e,CKEDITOR.tools.clone(b.items)),e.name=b.name,c.push(e));return c}var e=a.config.removeButtons, -e=e&&e.split(","),c=a.config.toolbar;"string"==typeof c&&(c=a.config["toolbar_"+c]);return a.toolbar=c?d(c):b()}function h(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"}, -"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var g=function(){this.toolbars=[];this.focusCommandExecuted=!1};g.prototype.focus=function(){for(var a=0,b;b=this.toolbars[a++];)for(var f=0,g;g=b.items[f++];)if(g.focus){g.focus();return}};var f={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar", -{requires:"button",init:function(a){var h,k=function(b,d){var e,c="rtl"==a.lang.dir,f=a.config.toolbarGroupCycling,g=c?37:39,c=c?39:37,f=void 0===f||f;switch(d){case 9:case CKEDITOR.SHIFT+9:for(;!e||!e.items.length;)if(e=9==d?(e?e.next:b.toolbar.next)||a.toolbox.toolbars[0]:(e?e.previous:b.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],e.items.length)for(b=e.items[h?e.items.length-1:0];b&&!b.focus;)(b=h?b.previous:b.next)||(e=0);b&&b.focus();return!1;case g:e=b;do e=e.next,!e&& -f&&(e=b.toolbar.items[0]);while(e&&!e.focus);e?e.focus():k(b,9);return!1;case 40:return b.button&&b.button.hasArrow?b.execute():k(b,40==d?g:c),!1;case c:case 38:e=b;do e=e.previous,!e&&f&&(e=b.toolbar.items[b.toolbar.items.length-1]);while(e&&!e.focus);e?e.focus():(h=1,k(b,CKEDITOR.SHIFT+9),h=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return b.execute(),!1}return!0};a.on("uiSpace",function(f){if(f.data.space==a.config.toolbarLocation){f.removeListener();a.toolbox=new g;var d=CKEDITOR.tools.getNextId(), -e=['\x3cspan id\x3d"',d,'" class\x3d"cke_voice_label"\x3e',a.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+a.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',d,'" onmousedown\x3d"return false;"\x3e'],d=!1!==a.config.toolbarStartupExpanded,c,h;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&e.push('\x3cspan class\x3d"cke_toolbox_main"'+(d?"\x3e":' style\x3d"display:none"\x3e'));for(var m=a.toolbox.toolbars,z=b(a),r=z.length, -p=0;p<r;p++){var q,u=0,t,y=z[p],v="/"!==y&&("/"===z[p+1]||p==r-1),x;if(y)if(c&&(e.push("\x3c/span\x3e"),h=c=0),"/"===y)e.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{x=y.items||y;for(var B=0;B<x.length;B++){var D=x[B],A;if(D){var G=function(c){c=c.render(a,e);C=u.items.push(c)-1;0<C&&(c.previous=u.items[C-1],c.previous.next=c);c.toolbar=u;c.onkey=k;c.onfocus=function(){a.toolbox.focusCommandExecuted||a.focus()}};if(D.type==CKEDITOR.UI_SEPARATOR)h=c&&D;else{A=!1!==D.canGroup; -if(!u){q=CKEDITOR.tools.getNextId();u={id:q,items:[]};t=y.name&&(a.lang.toolbar.toolbarGroups[y.name]||y.name);e.push('\x3cspan id\x3d"',q,'" class\x3d"cke_toolbar'+(v?' cke_toolbar_last"':'"'),t?' aria-labelledby\x3d"'+q+'_label"':"",' role\x3d"toolbar"\x3e');t&&e.push('\x3cspan id\x3d"',q,'_label" class\x3d"cke_voice_label"\x3e',t,"\x3c/span\x3e");e.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var C=m.push(u)-1;0<C&&(u.previous=m[C-1],u.previous.next=u)}A?c||(e.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'), -c=1):c&&(e.push("\x3c/span\x3e"),c=0);h&&(G(h),h=0);G(D)}}}c&&(e.push("\x3c/span\x3e"),h=c=0);u&&e.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}a.config.toolbarCanCollapse&&e.push("\x3c/span\x3e");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var I=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(I)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var c= -a.ui.space("toolbar_collapser"),d=c.getPrevious(),b=a.ui.space("contents"),e=d.getParent(),f=parseInt(b.$.style.height,10),g=e.$.offsetHeight,h=c.hasClass("cke_toolbox_collapser_min");h?(d.show(),c.removeClass("cke_toolbox_collapser_min"),c.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(d.hide(),c.addClass("cke_toolbox_collapser_min"),c.setAttribute("title",a.lang.toolbar.toolbarExpand));c.getFirst().setText(h?"▲":"◀");b.setStyle("height",f-(e.$.offsetHeight-g)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight, -contentsHeight:b.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");e.push('\x3ca title\x3d"'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id\x3d"'+a.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');d||e.push(" cke_toolbox_collapser_min");e.push('" onclick\x3d"CKEDITOR.tools.callFunction('+I+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e', -"\x3c/a\x3e")}e.push("\x3c/span\x3e");f.data.html+=e.join("")}});a.on("destroy",function(){if(this.toolbox){var a,d=0,b,c,f;for(a=this.toolbox.toolbars;d<a.length;d++)for(c=a[d].items,b=0;b<c.length;b++)f=c[b],f.clickFn&&CKEDITOR.tools.removeFunction(f.clickFn),f.keyDownFn&&CKEDITOR.tools.removeFunction(f.keyDownFn)}});a.on("uiReady",function(){var b=a.ui.space("toolbox");b&&a.focusManager.add(b,1)});a.addCommand("toolbarFocus",f);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR, -{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,b,f){var g=h(this.editor),d=0===b,e={name:a};if(f){if(f=CKEDITOR.tools.search(g,function(a){return a.name==f})){!f.groups&&(f.groups=[]);if(b&&(b=CKEDITOR.tools.indexOf(f.groups,b),0<=b)){f.groups.splice(b+1,0,a);return}d?f.groups.splice(0,0,a):f.groups.push(a); -return}b=null}b&&(b=CKEDITOR.tools.indexOf(g,function(a){return a.name==b}));d?g.splice(0,0,a):"number"==typeof b?g.splice(b+1,0,e):g.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";CKEDITOR.config.toolbarLocation="top";"use strict";(function(){function b(a,d,b){d.type||(d.type="auto");if(b&&!1===a.fire("beforePaste",d)||!d.dataValue&&d.dataTransfer.isEmpty())return!1;d.dataValue||(d.dataValue="");if(CKEDITOR.env.gecko&&"drop"==d.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus()}); -return a.fire("paste",d)}function h(a){function d(){var b=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var e=function(d){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==d.name||A.initPasteDataTransfer(d,a),d.data.preventDefault())};b.on("copy",e);b.on("cut",e);b.on("cut",function(){a.readOnly||a.extractSelectedHtml()},null,null,999)}b.on(A.mainPasteEvent,function(a){"beforepaste"==A.mainPasteEvent&&G||x(a)});"beforepaste"==A.mainPasteEvent&&(b.on("paste",function(a){C|| -(g(),a.data.preventDefault(),x(a),k("paste"))}),b.on("contextmenu",h,null,null,0),b.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||h()},null,null,0));b.on("beforecut",function(){!G&&l(a)});var f;b.attachListener(CKEDITOR.env.ie?b:a.document.getDocumentElement(),"mouseup",function(){f=setTimeout(B,0)});a.on("destroy",function(){clearTimeout(f)});b.on("keyup",B)}function e(d){return{type:d,canUndo:"cut"==d,startDisabled:!0,fakeKeystroke:"cut"==d?CKEDITOR.CTRL+88:CKEDITOR.CTRL+ -67,exec:function(){"cut"==this.type&&l();var d;var b=this.type;if(CKEDITOR.env.ie)d=k(b);else try{d=a.document.$.execCommand(b,!1,null)}catch(e){d=!1}d||a.showNotification(a.lang.clipboard[this.type+"Error"]);return d}}}function f(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(a,c){function d(c,g){g="undefined"!==typeof g?g:!0;c?(c.method="paste",c.dataTransfer||(c.dataTransfer=A.initPasteDataTransfer()),b(a,c,g)):f&&!a._.forcePasteDialog&&a.showNotification(k,"info",a.config.clipboard_notificationDuration); -a._.forcePasteDialog=!1;a.fire("afterCommandExec",{name:"paste",command:e,returnValue:!!c})}c="undefined"!==typeof c&&null!==c?c:{};var e=this,f="undefined"!==typeof c.notification?c.notification:!0,g=c.type,h=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,a.getCommandKeystroke(this)),k="string"===typeof f?f:a.lang.clipboard.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof c?c:c.dataValue;g&&!0!==a.config.forcePasteAsPlainText&& -"allow-word"!==a.config.forcePasteAsPlainText?a._.nextPasteType=g:delete a._.nextPasteType;"string"===typeof h?d({dataValue:h}):a.getClipboardData(d)}}}function g(){C=1;setTimeout(function(){C=0},100)}function h(){G=1;setTimeout(function(){G=0},10)}function k(d){var b=a.document,e=b.getBody(),f=!1,g=function(){f=!0};e.on(d,g);7<CKEDITOR.env.version?b.$.execCommand(d):b.$.selection.createRange().execCommand(d);e.removeListener(d,g);return f}function l(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var d= -a.getSelection(),b,e,f;d.getType()==CKEDITOR.SELECTION_ELEMENT&&(b=d.getSelectedElement())&&(e=d.getRanges()[0],f=a.document.createText(""),f.insertBefore(b),e.setStartBefore(f),e.setEndAfter(b),d.selectRanges([e]),setTimeout(function(){b.getParent()&&(f.remove(),d.selectElement(b))},0))}}function m(d,b){var e=a.document,f=a.editable(),g=function(a){a.cancel()},h;if(!e.getById("cke_pastebin")){var k=a.getSelection(),l=k.createBookmarks();CKEDITOR.env.ie&&k.root.fire("selectionchange");var n=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&& -!f.is("body")||CKEDITOR.env.ie?"div":"body",e);n.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var q=0,e=e.getWindow();CKEDITOR.env.webkit?(f.append(n),n.addClass("cke_editable"),f.is("body")||(q="static"!=f.getComputedStyle("position")?f:CKEDITOR.dom.element.get(f.$.offsetParent),q=q.getDocumentPosition().y)):f.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(n);n.setStyles({position:"absolute",top:e.getScrollPosition().y-q+10+"px",width:"1px",height:Math.max(1,e.getViewPaneSize().height- -20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&n.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(q=n.getParent().isReadOnly())?(n.setOpacity(0),n.setAttribute("contenteditable",!0)):n.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-10000px");a.on("selectionChange",g,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)h=f.once("blur",g,null,null,-100);q&&n.focus();q=new CKEDITOR.dom.range(n);q.selectNodeContents(n);var t=q.select();CKEDITOR.env.ie&& -(h=f.once("blur",function(){a.lockSelection(t)}));var p=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=p);h&&h.removeListener();CKEDITOR.env.ie&&f.focus();k.selectBookmarks(l);n.remove();var d;CKEDITOR.env.webkit&&(d=n.getFirst())&&d.is&&d.hasClass("Apple-style-span")&&(n=d);a.removeListener("selectionChange",g);b(n.getHtml())},0)}}function y(){if("paste"==A.mainPasteEvent)return a.fire("beforePaste",{type:"auto", -method:"paste"}),!1;a.focus();g();var d=a.focusManager;d.lock();if(a.editable().fire(A.mainPasteEvent)&&!k("paste"))return d.unlock(),!1;d.unlock();return!0}function v(d){if("wysiwyg"==a.mode)switch(d.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:d=a.editable();g();"paste"==A.mainPasteEvent&&d.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:a.fire("saveSnapshot"),setTimeout(function(){a.fire("saveSnapshot")},50)}}function x(d){var e={type:"auto",method:"paste", -dataTransfer:A.initPasteDataTransfer(d)};e.dataTransfer.cacheData();var f=!1!==a.fire("beforePaste",e);f&&A.canClipboardApiBeTrusted(e.dataTransfer,a)?(d.data.preventDefault(),setTimeout(function(){b(a,e)},0)):m(d,function(d){e.dataValue=d.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");f&&b(a,e)})}function B(){if("wysiwyg"==a.mode){var d=D("paste");a.getCommand("cut").setState(D("cut"));a.getCommand("copy").setState(D("copy"));a.getCommand("paste").setState(d);a.fire("pasteState",d)}}function D(d){var b= -a.getSelection(),b=b&&b.getRanges()[0];if((a.readOnly||b&&b.checkReadOnly())&&d in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==d)return CKEDITOR.TRISTATE_OFF;d=a.getSelection();b=d.getRanges();return d.getType()==CKEDITOR.SELECTION_NONE||1==b.length&&b[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var A=CKEDITOR.plugins.clipboard,G=0,C=0;(function(){a.on("key",v);a.on("contentDom",d);a.on("selectionChange",B);if(a.contextMenu){a.contextMenu.addListener(function(){return{cut:D("cut"), -copy:D("copy"),paste:D("paste")}});var b=null;a.on("menuShow",function(){b&&(b.removeListener(),b=null);var d=a.contextMenu.findItemByCommandName("paste");d&&d.element&&(b=d.element.on("touchend",function(){a._.forcePasteDialog=!0}))})}if(a.ui.addButton)a.once("instanceReady",function(){a._.pasteButtons&&CKEDITOR.tools.array.forEach(a._.pasteButtons,function(d){if(d=a.ui.get(d))if(d=CKEDITOR.document.getById(d._.id))d.on("touchend",function(){a._.forcePasteDialog=!0})})})})();(function(){function d(b, -e,f,g,h){var k=a.lang.clipboard[e];a.addCommand(e,f);a.ui.addButton&&a.ui.addButton(b,{label:k,command:e,toolbar:"clipboard,"+g});a.addMenuItems&&a.addMenuItem(e,{label:k,command:e,group:"clipboard",order:h})}d("Cut","cut",e("cut"),10,1);d("Copy","copy",e("copy"),20,4);d("Paste","paste",f(),30,8);a._.pasteButtons||(a._.pasteButtons=[]);a._.pasteButtons.push("Paste")})();a.getClipboardData=function(d,b){function e(a){a.removeListener();a.cancel();b(a.data)}function f(a){a.removeListener();a.cancel(); -b({type:h,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}var g=!1,h="auto";b||(b=d,d=null);a.on("beforePaste",function(a){a.removeListener();g=!0;h=a.data.type},null,null,1E3);a.on("paste",e,null,null,0);!1===y()&&(a.removeListener("paste",e),a._.forcePasteDialog&&g&&a.fire("pasteDialog")?(a.on("pasteDialogCommit",f),a.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",f);a.data._.committed||b(null)})):b(null))}}function g(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&& -!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function f(a,d){function b(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}d=d.replace(/(?!\u3000)\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi, -"\x3cbr\x3e");d=d.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(d.match(/^[^<]$/))return d;CKEDITOR.env.webkit&&-1<d.indexOf("\x3cdiv\x3e")&&(d=d.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),d.match(/<div>(<br>|)<\/div>/)&&(d="\x3cp\x3e"+d.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return b(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),d=d.replace(/<\/div><div>/g,"\x3cbr\x3e"), -d=d.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(d=d.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<d.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(d="\x3cp\x3e"+d.replace(/(<br>){2,}/g,function(a){return b(a.length/4)})+"\x3c/p\x3e"));return k(a,d)}function a(a){function d(){var a={},c;for(c in CKEDITOR.dtd)"$"!=c.charAt(0)&&"div"!=c&&"span"!=c&&(a[c]=1);return a}var b={};return{get:function(e){return"plain-text"==e?b.plainText||(b.plainText=new CKEDITOR.filter(a, -"br")):"semantic-content"==e?((e=b.semanticContent)||(e=new CKEDITOR.filter(a,{}),e.allow({$1:{elements:d(),attributes:!0,styles:!1,classes:!1}}),e=b.semanticContent=e),e):e?new CKEDITOR.filter(a,e):null}}}function m(a,d,b){d=CKEDITOR.htmlParser.fragment.fromHtml(d);var e=new CKEDITOR.htmlParser.basicWriter;b.applyTo(d,!0,!1,a.activeEnterMode);d.writeHtml(e);return e.getHtml()}function k(a,d){a.enterMode==CKEDITOR.ENTER_BR?d=d.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e", -a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(d=d.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return d}function l(a){a.data.preventDefault();a.data.$.dataTransfer.dropEffect="none"}function d(a){var d=CKEDITOR.plugins.clipboard;a.on("contentDom",function(){function e(d,f,g){f.select();b(a,{dataTransfer:g,method:"drop"},1);g.sourceEditor.fire("saveSnapshot");g.sourceEditor.editable().extractHtmlFromRange(d);g.sourceEditor.getSelection().selectRanges([d]);g.sourceEditor.fire("saveSnapshot")} -function f(e,g){e.select();b(a,{dataTransfer:g,method:"drop"},1);d.resetDragDataTransfer()}function g(d,b,e){var f={$:d.data.$,target:d.data.getTarget()};b&&(f.dragRange=b);e&&(f.dropRange=e);!1===a.fire(d.name,f)&&d.data.preventDefault()}function h(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}var k=a.editable(),l=CKEDITOR.plugins.clipboard.getDropTarget(a),m=a.ui.space("top"),y=a.ui.space("bottom");d.preventDefaultDropOnElement(m);d.preventDefaultDropOnElement(y); -k.attachListener(l,"dragstart",g);k.attachListener(a,"dragstart",d.resetDragDataTransfer,d,null,1);k.attachListener(a,"dragstart",function(b){d.initDragDataTransfer(b,a)},null,null,2);k.attachListener(a,"dragstart",function(){var b=d.dragRange=a.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(d.dragStartContainerChildCount=b?h(b.startContainer):null,d.dragEndContainerChildCount=b?h(b.endContainer):null)},null,null,100);k.attachListener(l,"dragend",g);k.attachListener(a,"dragend", -d.initDragDataTransfer,d,null,1);k.attachListener(a,"dragend",d.resetDragDataTransfer,d,null,100);k.attachListener(l,"dragover",function(a){if(CKEDITOR.env.edge)a.data.preventDefault();else{var c=a.data.getTarget();c&&c.is&&c.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()}});k.attachListener(l,"drop",function(b){if(!b.data.$.defaultPrevented&&(b.data.preventDefault(),!a.readOnly)){var e= -b.data.getTarget();if(!e.isReadOnly()||e.type==CKEDITOR.NODE_ELEMENT&&e.is("html")){var e=d.getRangeAtDropPosition(b,a),f=d.dragRange;e&&g(b,f,e)}}},null,null,9999);k.attachListener(a,"drop",d.initDragDataTransfer,d,null,1);k.attachListener(a,"drop",function(b){if(b=b.data){var g=b.dropRange,h=b.dragRange,k=b.dataTransfer;k.getTransferType(a)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){d.internalDrop(h,g,k,a)},0):k.getTransferType(a)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?e(h,g,k):f(g,k)}}, -null,null,9999)})}var e;CKEDITOR.plugins.add("clipboard",{requires:"dialog,notification,toolbar",init:function(c){var b,e=a(c);c.config.forcePasteAsPlainText?b="plain-text":c.config.pasteFilter?b=c.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in c.config||(b="semantic-content");c.pasteFilter=e.get(b);h(c);d(c);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));if(CKEDITOR.env.gecko){var k=["image/png","image/jpeg","image/gif"],l;c.on("paste",function(a){var d=a.data, -b=d.dataTransfer;if(!d.dataValue&&"paste"==d.method&&b&&1==b.getFilesCount()&&l!=b.id&&(b=b.getFile(0),-1!=CKEDITOR.tools.indexOf(k,b.type))){var e=new FileReader;e.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+e.result+'" /\x3e';c.fire("paste",a.data)},!1);e.addEventListener("abort",function(){c.fire("paste",a.data)},!1);e.addEventListener("error",function(){c.fire("paste",a.data)},!1);e.readAsDataURL(b);l=d.dataTransfer.id;a.stop()}},null,null,1)}c.on("paste",function(a){a.data.dataTransfer|| -(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var d=a.data.dataTransfer,b=d.getData("text/html");if(b)a.data.dataValue=b,a.data.type="html";else if(b=d.getData("text/plain"))a.data.dataValue=c.editable().transformPlainTextToHtml(b),a.data.type="text"}},null,null,1);c.on("paste",function(a){var c=a.data.dataValue,d=CKEDITOR.dtd.$block;-1<c.indexOf("Apple-")&&(c=c.replace(/<span class="Apple-converted-space"> <\/span>/gi," "),"html"!=a.data.type&&(c=c.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi, -function(a,c){return c.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<c.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",c=c.replace(/<br class="Apple-interchange-newline">/,"")),c=c.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(c.match(/^<[^<]+cke_(editable|contents)/i)){var b,e,f=new CKEDITOR.dom.element("div");for(f.setHtml(c);1==f.getChildCount()&&(b=f.getFirst())&&b.type==CKEDITOR.NODE_ELEMENT&&(b.hasClass("cke_editable")|| -b.hasClass("cke_contents"));)f=e=b;e&&(c=e.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?c=c.replace(/^ (?: |\r\n)?<(\w+)/g,function(c,b){return b.toLowerCase()in d?(a.data.preSniffing="html","\x3c"+b):c}):CKEDITOR.env.webkit?c=c.replace(/<\/(\w+)><div><br><\/div>$/,function(c,b){return b in d?(a.data.endsWithEOL=1,"\x3c/"+b+"\x3e"):c}):CKEDITOR.env.gecko&&(c=c.replace(/(\s)<br>$/,"$1"));a.data.dataValue=c},null,null,3);c.on("paste",function(a){a=a.data;var d=c._.nextPasteType||a.type,b=a.dataValue, -h,k=c.config.clipboard_defaultContentType||"html",l=a.dataTransfer.getTransferType(c)==CKEDITOR.DATA_TRANSFER_EXTERNAL,n=!0===c.config.forcePasteAsPlainText;h="html"==d||"html"==a.preSniffing?"html":g(b);delete c._.nextPasteType;"htmlifiedtext"==h&&(b=f(c.config,b));if("text"==d&&"html"==h)b=m(c,b,e.get("plain-text"));else if(l&&c.pasteFilter&&!a.dontFilter||n)b=m(c,b,c.pasteFilter);a.startsWithEOL&&(b='\x3cbr data-cke-eol\x3d"1"\x3e'+b);a.endsWithEOL&&(b+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"== -d&&(d="html"==h||"html"==k?"html":"text");a.type=d;a.dataValue=b;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);c.on("paste",function(a){a=a.data;a.dataValue&&(c.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){c.fire("afterPaste")},0))},null,null,1E3);c.on("pasteDialog",function(a){setTimeout(function(){c.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:CKEDITOR.env.ie&&16>CKEDITOR.env.version||CKEDITOR.env.iOS&& -605>CKEDITOR.env.version?!1:!0,isCustomDataTypesSupported:!CKEDITOR.env.ie||16<=CKEDITOR.env.version,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",addPasteButton:function(a,d,b){a.ui.addButton&&(a.ui.addButton(d,b),a._.pasteButtons||(a._.pasteButtons=[]),a._.pasteButtons.push(d))},canClipboardApiBeTrusted:function(a,d){return a.getTransferType(d)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!a.isEmpty()|| -CKEDITOR.env.gecko&&(a.getData("text/html")||a.getFilesCount())||CKEDITOR.env.safari&&603<=CKEDITOR.env.version&&!CKEDITOR.env.iOS||CKEDITOR.env.iOS&&605<=CKEDITOR.env.version||CKEDITOR.env.edge&&16<=CKEDITOR.env.version?!0:!1},getDropTarget:function(a){var d=a.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||d.isInline()?d:a.document},fixSplitNodesAfterDrop:function(a,d,b,e){function f(a,c,b){var e=a;e.type==CKEDITOR.NODE_TEXT&&(e=a.getParent());if(e.equals(c)&&b!=c.getChildCount())return a= -d.startContainer.getChild(d.startOffset-1),c=d.startContainer.getChild(d.startOffset),a&&a.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(b=a.getLength(),a.setText(a.getText()+c.getText()),c.remove(),d.setStart(a,b),d.collapse(!0)),!0}var g=d.startContainer;"number"==typeof e&&"number"==typeof b&&g.type==CKEDITOR.NODE_ELEMENT&&(f(a.startContainer,g,b)||f(a.endContainer,g,e))},isDropRangeAffectedByDragRange:function(a,d){var b=d.startContainer,e=d.endOffset;return a.endContainer.equals(b)&& -a.endOffset<=e||a.startContainer.getParent().equals(b)&&a.startContainer.getIndex()<e||a.endContainer.getParent().equals(b)&&a.endContainer.getIndex()<e?!0:!1},internalDrop:function(a,d,e,f){var g=CKEDITOR.plugins.clipboard,h=f.editable(),k,l;f.fire("saveSnapshot");f.fire("lockSnapshot",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(a,d,g.dragStartContainerChildCount,g.dragEndContainerChildCount);(l=this.isDropRangeAffectedByDragRange(a,d))||(k=a.createBookmark(!1)); -g=d.clone().createBookmark(!1);l&&(k=a.createBookmark(!1));a=k.startNode;d=k.endNode;l=g.startNode;d&&a.getPosition(l)&CKEDITOR.POSITION_PRECEDING&&d.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&l.insertBefore(a);a=f.createRange();a.moveToBookmark(k);h.extractHtmlFromRange(a,1);d=f.createRange();g.startNode.getCommonAncestor(h)||(g=f.getSelection().createBookmarks()[0]);d.moveToBookmark(g);b(f,{dataTransfer:e,method:"drop",range:d},1);f.fire("unlockSnapshot")},getRangeAtDropPosition:function(a,d){var b= -a.data.$,e=b.clientX,f=b.clientY,g=d.getSelection(!0).getRanges()[0],h=d.createRange();if(a.data.testRange)return a.data.testRange;if(document.caretRangeFromPoint&&d.document.$.caretRangeFromPoint(e,f))b=d.document.$.caretRangeFromPoint(e,f),h.setStart(CKEDITOR.dom.node(b.startContainer),b.startOffset),h.collapse(!0);else if(b.rangeParent)h.setStart(CKEDITOR.dom.node(b.rangeParent),b.rangeOffset),h.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&g&&d.editable().hasFocus)return g;if(document.body.createTextRange){d.focus(); -b=d.document.getBody().$.createTextRange();try{for(var k=!1,l=0;20>l&&!k;l++){if(!k)try{b.moveToPoint(e,f-l),k=!0}catch(m){}if(!k)try{b.moveToPoint(e,f+l),k=!0}catch(v){}}if(k){var x="cke-temp-"+(new Date).getTime();b.pasteHTML('\x3cspan id\x3d"'+x+'"\x3e\x3c/span\x3e');var B=d.document.getById(x);h.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START);B.remove()}else{var D=d.document.$.elementFromPoint(e,f),A=new CKEDITOR.dom.element(D),G;if(A.equals(d.editable())||"html"==A.getName())return g&&g.startContainer&& -!g.startContainer.equals(d.editable())?g:null;G=A.getClientRect();e<G.left?h.setStartAt(A,CKEDITOR.POSITION_AFTER_START):h.setStartAt(A,CKEDITOR.POSITION_BEFORE_END);h.collapse(!0)}}catch(C){return null}}else return null}return h},initDragDataTransfer:function(a,d){var b=a.data.$?a.data.$.dataTransfer:null,e=new this.dataTransfer(b,d);"dragstart"===a.name&&e.storeId();b?this.dragData&&e.id==this.dragData.id?e=this.dragData:this.dragData=e:this.dragData?e=this.dragData:this.dragData=e;a.data.dataTransfer= -e},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(a,d){if(this.isCustomCopyCutSupported){if(a&&a.data&&a.data.$){var b=a.data.$.clipboardData,e=new this.dataTransfer(b,d);"copy"!==a.name&&"cut"!==a.name||e.storeId();this.copyCutData&&e.id==this.copyCutData.id?(e=this.copyCutData,e.$=b):this.copyCutData=e;return e}return new this.dataTransfer(null,d)}return new this.dataTransfer(CKEDITOR.env.edge&&a&&a.data.$&&a.data.$.clipboardData||null,d)},preventDefaultDropOnElement:function(a){a&& -a.on("dragover",l)}};e=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=function(a,d){a&&(this.$=a);this._={metaRegExp:/^<meta.*?>/i,bodyRegExp:/<body(?:[\s\S]*?)>([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],nativeHtmlCache:"",normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this._.fallbackDataTransfer=new CKEDITOR.plugins.clipboard.fallbackDataTransfer(this); -this.id=this.getData(e);this.id||(this.id="Text"==e?"":"cke-"+CKEDITOR.tools.getUniqueId());d&&(this.sourceEditor=d,this.setData("text/html",d.getSelectedHtml(1)),"Text"==e||this.getData("text/plain")||this.setData("text/plain",d.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(a,d){a=this._.normalizeType(a);var b="text/html"==a&&d?this._.nativeHtmlCache: -this._.data[a];if(void 0===b||null===b||""===b){if(this._.fallbackDataTransfer.isRequired())b=this._.fallbackDataTransfer.getData(a,d);else try{b=this.$.getData(a)||""}catch(e){b=""}"text/html"!=a||d||(b=this._stripHtml(b))}"Text"==a&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==b.substring(0,7)&&(b="");if("string"===typeof b)var f=b.indexOf("\x3c/html\x3e"),b=-1!==f?b.substring(0,f+7):b;return b},setData:function(a,d){a=this._.normalizeType(a);"text/html"==a?(this._.data[a]=this._stripHtml(d), -this._.nativeHtmlCache=d):this._.data[a]=d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==a||"Text"==a)if("Text"==e&&"Text"==a&&(this.id=d),this._.fallbackDataTransfer.isRequired())this._.fallbackDataTransfer.setData(a,d);else try{this.$.setData(a,d)}catch(b){}},storeId:function(){"Text"!==e&&this.setData(e,this.id)},getTransferType:function(a){return this.sourceEditor?this.sourceEditor==a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL}, -cacheData:function(){function a(c){c=d._.normalizeType(c);var b=d.getData(c);"text/html"==c&&(d._.nativeHtmlCache=d.getData(c,!0),b=d._stripHtml(b));b&&(d._.data[c]=b)}if(this.$){var d=this,b,e;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(b=0;b<this.$.types.length;b++)a(this.$.types[b])}else a("Text"),a("URL");e=this._getImageFromClipboard();if(this.$&&this.$.files||e){this._.files=[];if(this.$.files&&this.$.files.length)for(b=0;b<this.$.files.length;b++)this._.files.push(this.$.files[b]); -0===this._.files.length&&e&&this._.files.push(e)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(a){return this._.files.length?this._.files[a]:this.$&&this.$.files&&this.$.files.length?this.$.files[a]:0===a?this._getImageFromClipboard():void 0},isEmpty:function(){var a={},d;if(this.getFilesCount())return!1;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(this._.data), -function(d){a[d]=1});if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var b=0;b<this.$.types.length;b++)a[this.$.types[b]]=1}else a.Text=1,a.URL=1;"Text"!=e&&(a[e]=0);for(d in a)if(a[d]&&""!==this.getData(d))return!1;return!0},_getImageFromClipboard:function(){var a;try{if(this.$&&this.$.items&&this.$.items[0]&&(a=this.$.items[0].getAsFile())&&a.type)return a}catch(d){}},_stripHtml:function(a){if(a&&a.length){a=a.replace(this._.metaRegExp,"");var d=this._.bodyRegExp.exec(a); -d&&d.length&&(a=d[1],a=a.replace(this._.fragmentRegExp,""))}return a}};CKEDITOR.plugins.clipboard.fallbackDataTransfer=function(a){this._dataTransfer=a;this._customDataFallbackType="text/html"};CKEDITOR.plugins.clipboard.fallbackDataTransfer._isCustomMimeTypeSupported=null;CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes=[];CKEDITOR.plugins.clipboard.fallbackDataTransfer.prototype={isRequired:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer,d=this._dataTransfer.$;if(null=== -a._isCustomMimeTypeSupported)if(d){a._isCustomMimeTypeSupported=!1;if(CKEDITOR.env.edge&&17<=CKEDITOR.env.version)return!0;try{d.setData("cke/mimetypetest","cke test value"),a._isCustomMimeTypeSupported="cke test value"===d.getData("cke/mimetypetest"),d.clearData("cke/mimetypetest")}catch(b){}}else return!1;return!a._isCustomMimeTypeSupported},getData:function(a,d){var b=this._getData(this._customDataFallbackType,!0);if(d)return b;var b=this._extractDataComment(b),e=null,e=a===this._customDataFallbackType? -b.content:b.data&&b.data[a]?b.data[a]:this._getData(a,!0);return null!==e?e:""},setData:function(a,d){var b=a===this._customDataFallbackType;b&&(d=this._applyDataComment(d,this._getFallbackTypeData()));var e=d,f=this._dataTransfer.$;try{f.setData(a,e),b&&(this._dataTransfer._.nativeHtmlCache=e)}catch(g){if(this._isUnsupportedMimeTypeError(g)){b=CKEDITOR.plugins.clipboard.fallbackDataTransfer;-1===CKEDITOR.tools.indexOf(b._customTypes,a)&&b._customTypes.push(a);var b=this._getFallbackTypeContent(), -h=this._getFallbackTypeData();h[a]=e;try{e=this._applyDataComment(b,h),f.setData(this._customDataFallbackType,e),this._dataTransfer._.nativeHtmlCache=e}catch(k){e=""}}}return e},_getData:function(a,d){var b=this._dataTransfer._.data;if(!d&&b[a])return b[a];try{return this._dataTransfer.$.getData(a)}catch(e){return null}},_getFallbackTypeContent:function(){var a=this._dataTransfer._.data[this._customDataFallbackType];a||(a=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).content); -return a},_getFallbackTypeData:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes,d=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).data||{},b=this._dataTransfer._.data;CKEDITOR.tools.array.forEach(a,function(a){void 0!==b[a]?d[a]=b[a]:void 0!==d[a]&&(d[a]=d[a])},this);return d},_isUnsupportedMimeTypeError:function(a){return a.message&&-1!==a.message.search(/element not found/gi)},_extractDataComment:function(a){var d={data:null,content:a||""};if(a&& -16<a.length){var b;(b=/\x3c!--cke-data:(.*?)--\x3e/g.exec(a))&&b[1]&&(d.data=JSON.parse(decodeURIComponent(b[1])),d.content=a.replace(b[0],""))}return d},_applyDataComment:function(a,d){var b="";d&&CKEDITOR.tools.object.keys(d).length&&(b="\x3c!--cke-data:"+encodeURIComponent(JSON.stringify(d))+"--\x3e");return b+(a&&a.length?a:"")}}})();CKEDITOR.config.clipboard_notificationDuration=1E4;(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}}); -CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(b,a){a&&CKEDITOR.tools.extend(this,a);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=b;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(b){return new CKEDITOR.ui.panel(b)}};var b=CKEDITOR.addTemplate("panel",'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'), -h=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),g=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e');CKEDITOR.ui.panel.prototype={render:function(f, -a){var m={editorId:f.id,id:this.id,langCode:f.langCode,dir:f.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":f.config.baseFloatZIndex+1};this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),d=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&d.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});d=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()}, -this));a.write(g.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+d+");"},m)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var d=a.data.getKeystroke(),b=this.document.getById(this.id).getAttribute("dir");if("input"!==a.data.getTarget().getName()||37!==d&&39!==d)this._.onKeyDown&&!1===this._.onKeyDown(d)?"input"===a.data.getTarget().getName()&&32===d||a.data.preventDefault():(27==d||d==("rtl"==b?39:37))&& -this.onEscape&&!1===this.onEscape(d)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(d)}else a=this.document.getById(this.id);this._.holder=a}return a};if(this.isFramed){var k=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";m.frame=h.output({id:this.id+"_frame",src:k})}k=b.output(m);a&& -a.push(k);return k},addBlock:function(b,a){a=this._.blocks[b]=a instanceof CKEDITOR.ui.panel.block?a:new CKEDITOR.ui.panel.block(this.getHolderElement(),a);this._.currentBlock||this.showBlock(b);return a},getBlock:function(b){return this._.blocks[b]},showBlock:function(b){b=this._.blocks[b];var a=this._.currentBlock,g=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");a&&a.hide();this._.currentBlock=b;CKEDITOR.fire("ariaWidget",g);b._.focusIndex=-1;this._.onKeyDown= -b.onKeyDown&&CKEDITOR.tools.bind(b.onKeyDown,b);b.show();return b},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(b,a){this.element=b.append(b.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));a&&CKEDITOR.tools.extend(this,a);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title|| -this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(b){-1!=b&&(b=this._.getItems().getItem(this._.focusIndex=b),CKEDITOR.env.webkit&&b.getDocument().getWindow().focus(),b.focus(),this.onMark&&this.onMark(b))},markFirstDisplayed:function(b){for(var a=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"none"==a.getStyle("display")},g=this._.getItems(),h,l,d=g.count()-1;0<=d;d--)if(h=g.getItem(d),h.getAscendant(a)||(l=h,this._.focusIndex= -d),"true"==h.getAttribute("aria-selected")){l=h;this._.focusIndex=d;break}l&&(b&&b(),CKEDITOR.env.webkit&&l.getDocument().getWindow().focus(),l.focus(),this.onMark&&this.onMark(l))},getItems:function(){return this.element.find("a,input")}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){this.onHide&&!0===this.onHide.call(this)||this.element.setStyle("display","none")},onKeyDown:function(b,a){var g=this.keys[b];switch(g){case "next":for(var h=this._.focusIndex,g=this._.getItems(), -l;l=g.getItem(++h);)if(l.getAttribute("_cke_focus")&&l.$.offsetWidth){this._.focusIndex=h;l.focus(!0);break}return l||a?!1:(this._.focusIndex=-1,this.onKeyDown(b,1));case "prev":h=this._.focusIndex;for(g=this._.getItems();0<h&&(l=g.getItem(--h));){if(l.getAttribute("_cke_focus")&&l.$.offsetWidth){this._.focusIndex=h;l.focus(!0);break}l=null}return l||a?!1:(this._.focusIndex=g.count(),this.onKeyDown(b,1));case "click":case "mouseup":return h=this._.focusIndex,(l=0<=h&&this._.getItems().getItem(h))&& -l.fireEventHandler(g,{button:CKEDITOR.tools.normalizeMouseButton(CKEDITOR.MOUSE_BUTTON_LEFT,!0)}),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"});(function(){function b(b,f,a,m,k){k=CKEDITOR.tools.genKey(f.getUniqueId(),a.getUniqueId(),b.lang.dir,b.uiColor||"",m.css||"",k||"");var l=h[k];l||(l=h[k]=new CKEDITOR.ui.panel(f,m),l.element=a.append(CKEDITOR.dom.element.createFromHtml(l.render(b),f)),l.element.setStyles({display:"none",position:"absolute"}));return l}var h={}; -CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(g,f,a,h){function k(){c.hide()}a.forceIFrame=1;a.toolbarRelated&&g.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(f=CKEDITOR.document.getById("cke_"+g.name));var l=f.getDocument();h=b(g,l,f,a,h||0);var d=h.element,e=d.getFirst(),c=this;d.disableContextMenu();this.element=d;this._={editor:g,panel:h,parentElement:f,definition:a,document:l,iframe:e,children:[],dir:g.lang.dir,showBlockParams:null,markFirst:void 0!==a.markFirst?a.markFirst:!0}; -g.on("mode",k);g.on("resize",k);l.getWindow().on("resize",function(){this.reposition()},this)},proto:{addBlock:function(b,f){return this._.panel.addBlock(b,f)},addListBlock:function(b,f){return this._.panel.addListBlock(b,f)},getBlock:function(b){return this._.panel.getBlock(b)},showBlock:function(b,f,a,h,k,l){var d=this._.panel,e=d.showBlock(b);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var c=this._.editor.editable();this._.returnFocus=c.hasFocus?c:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement); -this._.hideTimeout=0;var n=this.element,c=this._.iframe,c=CKEDITOR.env.ie&&!CKEDITOR.env.edge?c:new CKEDITOR.dom.window(c.$.contentWindow),w=n.getDocument(),z=this._.parentElement.getPositionedAncestor(),r=f.getDocumentPosition(w),w=z?z.getDocumentPosition(w):{x:0,y:0},p="rtl"==this._.dir,q=r.x+(h||0)-w.x,u=r.y+(k||0)-w.y;!p||1!=a&&4!=a?p||2!=a&&3!=a||(q+=f.$.offsetWidth-1):q+=f.$.offsetWidth;if(3==a||4==a)u+=f.$.offsetHeight-1;this._.panel._.offsetParentId=f.getId();n.setStyles({top:u+"px",left:0, -display:""});n.setOpacity(0);n.getFirst().removeStyle("width");this._.editor.focusManager.add(c);this._.blurSet||(CKEDITOR.event.useCapture=!0,c.on("blur",function(a){function d(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(d,0,this)):d.call(this))},this),c.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)}, -this),CKEDITOR.env.iOS&&(c.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),c.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);d.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&!1===this.onEscape(a))return!1},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){var a=n;a.removeStyle("width");if(e.autoSize){var c=e.element.getDocument(),c=(CKEDITOR.env.webkit||CKEDITOR.env.edge? -e.element:c.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<c&&(c+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle("width",c+10+"px");c=e.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<c&&(c+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle("height",c+"px");d._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");p&&(q-=n.$.offsetWidth);n.setStyle("left",q+"px");var c=d.element.getWindow(),a=n.$.getBoundingClientRect(), -c=c.getViewPaneSize(),b=a.width||a.right-a.left,f=a.height||a.bottom-a.top,g=p?a.right:c.width-a.left,h=p?c.width-a.right:a.left;p?g<b&&(q=h>b?q+b:c.width>b?q-a.left:q-a.right+c.width):g<b&&(q=h>b?q-b:c.width>b?q-a.right+c.width:q-a.left);b=a.top;c.height-a.top<f&&(u=b>f?u-f:c.height>f?u-a.bottom+c.height:u-a.top);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&((c=a=n.$.offsetParent&&new CKEDITOR.dom.element(n.$.offsetParent))&&"html"==c.getName()&&(c=c.getDocument().getBody()),c&&"rtl"==c.getComputedStyle("direction")&& -(q=CKEDITOR.env.ie8Compat?q-2*n.getDocument().getDocumentElement().$.scrollLeft:q-(a.$.scrollWidth-a.$.clientWidth)));var a=n.getFirst(),k;(k=a.getCustomData("activePanel"))&&k.onHide&&k.onHide.call(this,1);a.setCustomData("activePanel",this);n.setStyles({top:u+"px",left:q+"px"});n.setOpacity(1);l&&l()},this);d.isLoaded?a():d.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();e.element.focus();CKEDITOR.env.webkit&& -(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);this._.markFirst&&(CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(function(){e.markFirstDisplayed?e.markFirstDisplayed():e._.markFirstDisplayed()},0):e.markFirstDisplayed?e.markFirstDisplayed():e._.markFirstDisplayed());this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var b=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(), +e(),d=CKEDITOR.tools.clone(a.config.toolbarGroups)||h(a),f=0;f<d.length;f++){var m=d[f];if("/"!=m){"string"==typeof m&&(m=d[f]={name:m});var r,q=m.groups;if(q)for(var x=0;x<q.length;x++)r=q[x],(r=c[r])&&g(m,r);(r=c[m.name])&&g(m,r)}}return d}function e(){var c={},d,b,f;for(d in a.ui.items)b=a.ui.items[d],f=b.toolbar||"others",f=f.split(","),b=f[0],f=parseInt(f[1]||-1,10),c[b]||(c[b]=[]),c[b].push({name:d,order:f});for(b in c)c[b]=c[b].sort(function(a,c){return a.order==c.order?0:0>c.order?-1:0>a.order? +1:a.order<c.order?-1:1});return c}function g(c,d){if(d.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var b;b=d.shift();)b="string"==typeof b?b:b.name,f&&-1!=CKEDITOR.tools.indexOf(f,b)||(b=a.ui.create(b))&&a.addFeature(b)&&c.items.push(b)}}function c(a){var c=[],d,b,f;for(d=0;d<a.length;++d)b=a[d],f={},"/"==b?c.push(b):CKEDITOR.tools.isArray(b)?(g(f,CKEDITOR.tools.clone(b)),c.push(f)):b.items&&(g(f,CKEDITOR.tools.clone(b.items)),f.name=b.name,c.push(f));return c}var f=a.config.removeButtons, +f=f&&f.split(","),d=a.config.toolbar;"string"==typeof d&&(d=a.config["toolbar_"+d]);return a.toolbar=d?c(d):b()}function h(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"}, +"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var g=function(){this.toolbars=[];this.focusCommandExecuted=!1};g.prototype.focus=function(){for(var a=0,b;b=this.toolbars[a++];)for(var e=0,g;g=b.items[e++];)if(g.focus){g.focus();return}};var e={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar", +{requires:"button",init:function(a){var h,l=function(b,c){var f,d="rtl"==a.lang.dir,e=a.config.toolbarGroupCycling,g=d?37:39,d=d?39:37,e=void 0===e||e;switch(c){case 9:case CKEDITOR.SHIFT+9:for(;!f||!f.items.length;)if(f=9==c?(f?f.next:b.toolbar.next)||a.toolbox.toolbars[0]:(f?f.previous:b.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],f.items.length)for(b=f.items[h?f.items.length-1:0];b&&!b.focus;)(b=h?b.previous:b.next)||(f=0);b&&b.focus();return!1;case g:f=b;do f=f.next,!f&& +e&&(f=b.toolbar.items[0]);while(f&&!f.focus);f?f.focus():l(b,9);return!1;case 40:return b.button&&b.button.hasArrow?b.execute():l(b,40==c?g:d),!1;case d:case 38:f=b;do f=f.previous,!f&&e&&(f=b.toolbar.items[b.toolbar.items.length-1]);while(f&&!f.focus);f?f.focus():(h=1,l(b,CKEDITOR.SHIFT+9),h=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return b.execute(),!1}return!0};a.on("uiSpace",function(e){if(e.data.space==a.config.toolbarLocation){e.removeListener();a.toolbox=new g;var c=CKEDITOR.tools.getNextId(), +f=['\x3cspan id\x3d"',c,'" class\x3d"cke_voice_label"\x3e',a.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+a.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',c,'" onmousedown\x3d"return false;"\x3e'],c=!1!==a.config.toolbarStartupExpanded,d,h;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&f.push('\x3cspan class\x3d"cke_toolbox_main"'+(c?"\x3e":' style\x3d"display:none"\x3e'));for(var m=a.toolbox.toolbars,v=b(a),p=v.length, +r=0;r<p;r++){var q,x=0,t,z=v[r],y="/"!==z&&("/"===v[r+1]||r==p-1),u;if(z)if(d&&(f.push("\x3c/span\x3e"),h=d=0),"/"===z)f.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{u=z.items||z;for(var B=0;B<u.length;B++){var C=u[B],A;if(C){var E=function(c){c=c.render(a,f);G=x.items.push(c)-1;0<G&&(c.previous=x.items[G-1],c.previous.next=c);c.toolbar=x;c.onkey=l;c.onfocus=function(){a.toolbox.focusCommandExecuted||a.focus()}};if(C.type==CKEDITOR.UI_SEPARATOR)h=d&&C;else{A=!1!==C.canGroup; +if(!x){q=CKEDITOR.tools.getNextId();x={id:q,items:[]};t=z.name&&(a.lang.toolbar.toolbarGroups[z.name]||z.name);f.push('\x3cspan id\x3d"',q,'" class\x3d"cke_toolbar'+(y?' cke_toolbar_last"':'"'),t?' aria-labelledby\x3d"'+q+'_label"':"",' role\x3d"toolbar"\x3e');t&&f.push('\x3cspan id\x3d"',q,'_label" class\x3d"cke_voice_label"\x3e',t,"\x3c/span\x3e");f.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var G=m.push(x)-1;0<G&&(x.previous=m[G-1],x.previous.next=x)}A?d||(f.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'), +d=1):d&&(f.push("\x3c/span\x3e"),d=0);h&&(E(h),h=0);E(C)}}}d&&(f.push("\x3c/span\x3e"),h=d=0);x&&f.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}a.config.toolbarCanCollapse&&f.push("\x3c/span\x3e");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var I=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(I)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var c= +a.ui.space("toolbar_collapser"),d=c.getPrevious(),b=a.ui.space("contents"),f=d.getParent(),e=parseInt(b.$.style.height,10),g=f.$.offsetHeight,h=c.hasClass("cke_toolbox_collapser_min");h?(d.show(),c.removeClass("cke_toolbox_collapser_min"),c.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(d.hide(),c.addClass("cke_toolbox_collapser_min"),c.setAttribute("title",a.lang.toolbar.toolbarExpand));c.getFirst().setText(h?"▲":"◀");b.setStyle("height",e-(f.$.offsetHeight-g)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight, +contentsHeight:b.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");f.push('\x3ca title\x3d"'+(c?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id\x3d"'+a.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');c||f.push(" cke_toolbox_collapser_min");f.push('" onclick\x3d"CKEDITOR.tools.callFunction('+I+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e', +"\x3c/a\x3e")}f.push("\x3c/span\x3e");e.data.html+=f.join("")}});a.on("destroy",function(){if(this.toolbox){var a,c=0,b,d,e;for(a=this.toolbox.toolbars;c<a.length;c++)for(d=a[c].items,b=0;b<d.length;b++)e=d[b],e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn),e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}});a.on("uiReady",function(){var b=a.ui.space("toolbox");b&&a.focusManager.add(b,1)});a.addCommand("toolbarFocus",e);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR, +{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,c){c.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,b,e){var g=h(this.editor),c=0===b,f={name:a};if(e){if(e=CKEDITOR.tools.search(g,function(a){return a.name==e})){!e.groups&&(e.groups=[]);if(b&&(b=CKEDITOR.tools.indexOf(e.groups,b),0<=b)){e.groups.splice(b+1,0,a);return}c?e.groups.splice(0,0,a):e.groups.push(a); +return}b=null}b&&(b=CKEDITOR.tools.indexOf(g,function(a){return a.name==b}));c?g.splice(0,0,a):"number"==typeof b?g.splice(b+1,0,f):g.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";CKEDITOR.config.toolbarLocation="top";"use strict";(function(){function b(a,c,b){c.type||(c.type="auto");if(b&&!1===a.fire("beforePaste",c)||!c.dataValue&&c.dataTransfer.isEmpty())return!1;c.dataValue||(c.dataValue="");if(CKEDITOR.env.gecko&&"drop"==c.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus()}); +return a.fire("paste",c)}function h(a){function c(){var b=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var f=function(c){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==c.name||A.initPasteDataTransfer(c,a),c.data.preventDefault())};b.on("copy",f);b.on("cut",f);b.on("cut",function(){a.readOnly||a.extractSelectedHtml()},null,null,999)}b.on(A.mainPasteEvent,function(a){"beforepaste"==A.mainPasteEvent&&E||u(a)});"beforepaste"==A.mainPasteEvent&&(b.on("paste",function(a){G|| +(g(),a.data.preventDefault(),u(a),k("paste"))}),b.on("contextmenu",h,null,null,0),b.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||h()},null,null,0));b.on("beforecut",function(){!E&&l(a)});var e;b.attachListener(CKEDITOR.env.ie?b:a.document.getDocumentElement(),"mouseup",function(){e=setTimeout(B,0)});a.on("destroy",function(){clearTimeout(e)});b.on("keyup",B)}function f(c){return{type:c,canUndo:"cut"==c,startDisabled:!0,fakeKeystroke:"cut"==c?CKEDITOR.CTRL+88:CKEDITOR.CTRL+ +67,exec:function(){"cut"==this.type&&l();var c;var b=this.type;if(CKEDITOR.env.ie)c=k(b);else try{c=a.document.$.execCommand(b,!1,null)}catch(f){c=!1}c||a.showNotification(a.lang.clipboard[this.type+"Error"]);return c}}}function e(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(a,c){function d(c,g){g="undefined"!==typeof g?g:!0;c?(c.method="paste",c.dataTransfer||(c.dataTransfer=A.initPasteDataTransfer()),b(a,c,g)):e&&!a._.forcePasteDialog&&a.showNotification(k,"info",a.config.clipboard_notificationDuration); +a._.forcePasteDialog=!1;a.fire("afterCommandExec",{name:"paste",command:f,returnValue:!!c})}c="undefined"!==typeof c&&null!==c?c:{};var f=this,e="undefined"!==typeof c.notification?c.notification:!0,g=c.type,h=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,a.getCommandKeystroke(this)),k="string"===typeof e?e:a.lang.clipboard.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof c?c:c.dataValue;g&&!0!==a.config.forcePasteAsPlainText&& +"allow-word"!==a.config.forcePasteAsPlainText?a._.nextPasteType=g:delete a._.nextPasteType;"string"===typeof h?d({dataValue:h}):a.getClipboardData(d)}}}function g(){G=1;setTimeout(function(){G=0},100)}function h(){E=1;setTimeout(function(){E=0},10)}function k(c){var b=a.document,f=b.getBody(),e=!1,g=function(){e=!0};f.on(c,g);7<CKEDITOR.env.version?b.$.execCommand(c):b.$.selection.createRange().execCommand(c);f.removeListener(c,g);return e}function l(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var c= +a.getSelection(),b,f,e;c.getType()==CKEDITOR.SELECTION_ELEMENT&&(b=c.getSelectedElement())&&(f=c.getRanges()[0],e=a.document.createText(""),e.insertBefore(b),f.setStartBefore(e),f.setEndAfter(b),c.selectRanges([f]),setTimeout(function(){b.getParent()&&(e.remove(),c.selectElement(b))},0))}}function m(c,b){var f=a.document,e=a.editable(),g=function(a){a.cancel()},h;if(!f.getById("cke_pastebin")){var k=a.getSelection(),l=k.createBookmarks();CKEDITOR.env.ie&&k.root.fire("selectionchange");var n=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&& +!e.is("body")||CKEDITOR.env.ie?"div":"body",f);n.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var q=0,f=f.getWindow();CKEDITOR.env.webkit?(e.append(n),n.addClass("cke_editable"),e.is("body")||(q="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),q=q.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(n);n.setStyles({position:"absolute",top:f.getScrollPosition().y-q+10+"px",width:"1px",height:Math.max(1,f.getViewPaneSize().height- +20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&n.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(q=n.getParent().isReadOnly())?(n.setOpacity(0),n.setAttribute("contenteditable",!0)):n.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-10000px");a.on("selectionChange",g,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)h=e.once("blur",g,null,null,-100);q&&n.focus();q=new CKEDITOR.dom.range(n);q.selectNodeContents(n);var t=q.select();CKEDITOR.env.ie&& +(h=e.once("blur",function(){a.lockSelection(t)}));var r=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=r);h&&h.removeListener();CKEDITOR.env.ie&&e.focus();k.selectBookmarks(l);n.remove();var c;CKEDITOR.env.webkit&&(c=n.getFirst())&&c.is&&c.hasClass("Apple-style-span")&&(n=c);a.removeListener("selectionChange",g);b(n.getHtml())},0)}}function z(){if("paste"==A.mainPasteEvent)return a.fire("beforePaste",{type:"auto", +method:"paste"}),!1;a.focus();g();var c=a.focusManager;c.lock();if(a.editable().fire(A.mainPasteEvent)&&!k("paste"))return c.unlock(),!1;c.unlock();return!0}function y(c){if("wysiwyg"==a.mode)switch(c.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:c=a.editable();g();"paste"==A.mainPasteEvent&&c.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:a.fire("saveSnapshot"),setTimeout(function(){a.fire("saveSnapshot")},50)}}function u(c){var f={type:"auto",method:"paste", +dataTransfer:A.initPasteDataTransfer(c)};f.dataTransfer.cacheData();var e=!1!==a.fire("beforePaste",f);e&&A.canClipboardApiBeTrusted(f.dataTransfer,a)?(c.data.preventDefault(),setTimeout(function(){b(a,f)},0)):m(c,function(c){f.dataValue=c.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&b(a,f)})}function B(){if("wysiwyg"==a.mode){var c=C("paste");a.getCommand("cut").setState(C("cut"));a.getCommand("copy").setState(C("copy"));a.getCommand("paste").setState(c);a.fire("pasteState",c)}}function C(c){var b= +a.getSelection(),b=b&&b.getRanges()[0];if((a.readOnly||b&&b.checkReadOnly())&&c in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==c)return CKEDITOR.TRISTATE_OFF;c=a.getSelection();b=c.getRanges();return c.getType()==CKEDITOR.SELECTION_NONE||1==b.length&&b[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var A=CKEDITOR.plugins.clipboard,E=0,G=0;(function(){a.on("key",y);a.on("contentDom",c);a.on("selectionChange",B);if(a.contextMenu){a.contextMenu.addListener(function(){return{cut:C("cut"), +copy:C("copy"),paste:C("paste")}});var b=null;a.on("menuShow",function(){b&&(b.removeListener(),b=null);var c=a.contextMenu.findItemByCommandName("paste");c&&c.element&&(b=c.element.on("touchend",function(){a._.forcePasteDialog=!0}))})}if(a.ui.addButton)a.once("instanceReady",function(){a._.pasteButtons&&CKEDITOR.tools.array.forEach(a._.pasteButtons,function(c){if(c=a.ui.get(c))if(c=CKEDITOR.document.getById(c._.id))c.on("touchend",function(){a._.forcePasteDialog=!0})})})})();(function(){function c(b, +f,e,g,h){var k=a.lang.clipboard[f];a.addCommand(f,e);a.ui.addButton&&a.ui.addButton(b,{label:k,command:f,toolbar:"clipboard,"+g});a.addMenuItems&&a.addMenuItem(f,{label:k,command:f,group:"clipboard",order:h})}c("Cut","cut",f("cut"),10,1);c("Copy","copy",f("copy"),20,4);c("Paste","paste",e(),30,8);a._.pasteButtons||(a._.pasteButtons=[]);a._.pasteButtons.push("Paste")})();a.getClipboardData=function(c,b){function f(a){a.removeListener();a.cancel();b(a.data)}function e(a){a.removeListener();a.cancel(); +b({type:h,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}var g=!1,h="auto";b||(b=c,c=null);a.on("beforePaste",function(a){a.removeListener();g=!0;h=a.data.type},null,null,1E3);a.on("paste",f,null,null,0);!1===z()&&(a.removeListener("paste",f),a._.forcePasteDialog&&g&&a.fire("pasteDialog")?(a.on("pasteDialogCommit",e),a.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",e);a.data._.committed||b(null)})):b(null))}}function g(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&& +!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function e(a,c){function b(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}c=c.replace(/(?!\u3000)\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi, +"\x3cbr\x3e");c=c.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(c.match(/^[^<]$/))return c;CKEDITOR.env.webkit&&-1<c.indexOf("\x3cdiv\x3e")&&(c=c.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),c.match(/<div>(<br>|)<\/div>/)&&(c="\x3cp\x3e"+c.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return b(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),c=c.replace(/<\/div><div>/g,"\x3cbr\x3e"), +c=c.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(c=c.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<c.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(c="\x3cp\x3e"+c.replace(/(<br>){2,}/g,function(a){return b(a.length/4)})+"\x3c/p\x3e"));return l(a,c)}function a(a){function c(){var a={},b;for(b in CKEDITOR.dtd)"$"!=b.charAt(0)&&"div"!=b&&"span"!=b&&(a[b]=1);return a}var b={};return{get:function(f){return"plain-text"==f?b.plainText||(b.plainText=new CKEDITOR.filter(a, +"br")):"semantic-content"==f?((f=b.semanticContent)||(f=new CKEDITOR.filter(a,{}),f.allow({$1:{elements:c(),attributes:!0,styles:!1,classes:!1}}),f=b.semanticContent=f),f):f?new CKEDITOR.filter(a,f):null}}}function m(a,c,b){c=CKEDITOR.htmlParser.fragment.fromHtml(c);var f=new CKEDITOR.htmlParser.basicWriter;b.applyTo(c,!0,!1,a.activeEnterMode);c.writeHtml(f);return f.getHtml()}function l(a,c){a.enterMode==CKEDITOR.ENTER_BR?c=c.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e", +a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(c=c.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return c}function k(a){a.data.preventDefault();a.data.$.dataTransfer.dropEffect="none"}function c(a){var c=CKEDITOR.plugins.clipboard;a.on("contentDom",function(){function f(c,e,g){e.select();b(a,{dataTransfer:g,method:"drop"},1);g.sourceEditor.fire("saveSnapshot");g.sourceEditor.editable().extractHtmlFromRange(c);g.sourceEditor.getSelection().selectRanges([c]);g.sourceEditor.fire("saveSnapshot")} +function e(f,g){f.select();b(a,{dataTransfer:g,method:"drop"},1);c.resetDragDataTransfer()}function g(c,b,f){var e={$:c.data.$,target:c.data.getTarget()};b&&(e.dragRange=b);f&&(e.dropRange=f);!1===a.fire(c.name,e)&&c.data.preventDefault()}function h(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}var k=a.editable(),l=CKEDITOR.plugins.clipboard.getDropTarget(a),m=a.ui.space("top"),z=a.ui.space("bottom");c.preventDefaultDropOnElement(m);c.preventDefaultDropOnElement(z); +k.attachListener(l,"dragstart",g);k.attachListener(a,"dragstart",c.resetDragDataTransfer,c,null,1);k.attachListener(a,"dragstart",function(b){c.initDragDataTransfer(b,a)},null,null,2);k.attachListener(a,"dragstart",function(){var b=c.dragRange=a.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(c.dragStartContainerChildCount=b?h(b.startContainer):null,c.dragEndContainerChildCount=b?h(b.endContainer):null)},null,null,100);k.attachListener(l,"dragend",g);k.attachListener(a,"dragend", +c.initDragDataTransfer,c,null,1);k.attachListener(a,"dragend",c.resetDragDataTransfer,c,null,100);k.attachListener(l,"dragover",function(a){if(CKEDITOR.env.edge)a.data.preventDefault();else{var c=a.data.getTarget();c&&c.is&&c.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()}});k.attachListener(l,"drop",function(b){if(!b.data.$.defaultPrevented&&(b.data.preventDefault(),!a.readOnly)){var f= +b.data.getTarget();if(!f.isReadOnly()||f.type==CKEDITOR.NODE_ELEMENT&&f.is("html")){var f=c.getRangeAtDropPosition(b,a),e=c.dragRange;f&&g(b,e,f)}}},null,null,9999);k.attachListener(a,"drop",c.initDragDataTransfer,c,null,1);k.attachListener(a,"drop",function(b){if(b=b.data){var g=b.dropRange,h=b.dragRange,k=b.dataTransfer;k.getTransferType(a)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){c.internalDrop(h,g,k,a)},0):k.getTransferType(a)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?f(h,g,k):e(g,k)}}, +null,null,9999)})}var f;CKEDITOR.plugins.add("clipboard",{requires:"dialog,notification,toolbar",init:function(b){function f(a){if(!a||r===a.id)return!1;var c=a.getTypes(),c=1===c.length&&"Files"===c[0];a=1===a.getFilesCount();return c&&a}var k,l=a(b);b.config.forcePasteAsPlainText?k="plain-text":b.config.pasteFilter?k=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(k="semantic-content");b.pasteFilter=l.get(k);h(b);c(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js")); +if(CKEDITOR.env.gecko){var p=["image/png","image/jpeg","image/gif"],r;b.on("paste",function(a){var c=a.data,e=c.dataTransfer;if(!c.dataValue&&"paste"==c.method&&f(e)&&(e=e.getFile(0),-1!=CKEDITOR.tools.indexOf(p,e.type))){var g=new FileReader;g.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+g.result+'" /\x3e';b.fire("paste",a.data)},!1);g.addEventListener("abort",function(){b.fire("paste",a.data)},!1);g.addEventListener("error",function(){b.fire("paste",a.data)},!1);g.readAsDataURL(e); +r=c.dataTransfer.id;a.stop()}},null,null,1)}b.on("paste",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=a.data.dataTransfer,f=c.getData("text/html");if(f)a.data.dataValue=f,a.data.type="html";else if(f=c.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(f),a.data.type="text"}},null,null,1);b.on("paste",function(a){var c=a.data.dataValue,b=CKEDITOR.dtd.$block;-1<c.indexOf("Apple-")&&(c=c.replace(/<span class="Apple-converted-space"> <\/span>/gi, +" "),"html"!=a.data.type&&(c=c.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,c){return c.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<c.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",c=c.replace(/<br class="Apple-interchange-newline">/,"")),c=c.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(c.match(/^<[^<]+cke_(editable|contents)/i)){var d,f,e=new CKEDITOR.dom.element("div");for(e.setHtml(c);1==e.getChildCount()&& +(d=e.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)e=f=d;f&&(c=f.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?c=c.replace(/^ (?: |\r\n)?<(\w+)/g,function(c,d){return d.toLowerCase()in b?(a.data.preSniffing="html","\x3c"+d):c}):CKEDITOR.env.webkit?c=c.replace(/<\/(\w+)><div><br><\/div>$/,function(c,d){return d in b?(a.data.endsWithEOL=1,"\x3c/"+d+"\x3e"):c}):CKEDITOR.env.gecko&&(c=c.replace(/(\s)<br>$/,"$1"));a.data.dataValue=c},null, +null,3);b.on("paste",function(a){a=a.data;var c=b._.nextPasteType||a.type,f=a.dataValue,h,k=b.config.clipboard_defaultContentType||"html",n=a.dataTransfer.getTransferType(b)==CKEDITOR.DATA_TRANSFER_EXTERNAL,r=!0===b.config.forcePasteAsPlainText;h="html"==c||"html"==a.preSniffing?"html":g(f);delete b._.nextPasteType;"htmlifiedtext"==h&&(f=e(b.config,f));if("text"==c&&"html"==h)f=m(b,f,l.get("plain-text"));else if(n&&b.pasteFilter&&!a.dontFilter||r)f=m(b,f,b.pasteFilter);a.startsWithEOL&&(f='\x3cbr data-cke-eol\x3d"1"\x3e'+ +f);a.endsWithEOL&&(f+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"==c&&(c="html"==h||"html"==k?"html":"text");a.type=c;a.dataValue=f;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:CKEDITOR.env.ie&& +16>CKEDITOR.env.version||CKEDITOR.env.iOS&&605>CKEDITOR.env.version?!1:!0,isCustomDataTypesSupported:!CKEDITOR.env.ie||16<=CKEDITOR.env.version,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",addPasteButton:function(a,c,b){a.ui.addButton&&(a.ui.addButton(c,b),a._.pasteButtons||(a._.pasteButtons=[]),a._.pasteButtons.push(c))},canClipboardApiBeTrusted:function(a,c){return a.getTransferType(c)!=CKEDITOR.DATA_TRANSFER_EXTERNAL|| +CKEDITOR.env.chrome&&!a.isEmpty()||CKEDITOR.env.gecko&&(a.getData("text/html")||a.getFilesCount())||CKEDITOR.env.safari&&603<=CKEDITOR.env.version&&!CKEDITOR.env.iOS||CKEDITOR.env.iOS&&605<=CKEDITOR.env.version||CKEDITOR.env.edge&&16<=CKEDITOR.env.version?!0:!1},getDropTarget:function(a){var c=a.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||c.isInline()?c:a.document},fixSplitNodesAfterDrop:function(a,c,b,f){function e(a,b,d){var f=a;f.type==CKEDITOR.NODE_TEXT&&(f=a.getParent());if(f.equals(b)&& +d!=b.getChildCount())return a=c.startContainer.getChild(c.startOffset-1),b=c.startContainer.getChild(c.startOffset),a&&a.type==CKEDITOR.NODE_TEXT&&b&&b.type==CKEDITOR.NODE_TEXT&&(d=a.getLength(),a.setText(a.getText()+b.getText()),b.remove(),c.setStart(a,d),c.collapse(!0)),!0}var g=c.startContainer;"number"==typeof f&&"number"==typeof b&&g.type==CKEDITOR.NODE_ELEMENT&&(e(a.startContainer,g,b)||e(a.endContainer,g,f))},isDropRangeAffectedByDragRange:function(a,c){var b=c.startContainer,f=c.endOffset; +return a.endContainer.equals(b)&&a.endOffset<=f||a.startContainer.getParent().equals(b)&&a.startContainer.getIndex()<f||a.endContainer.getParent().equals(b)&&a.endContainer.getIndex()<f?!0:!1},internalDrop:function(a,c,f,e){var g=CKEDITOR.plugins.clipboard,h=e.editable(),k,l;e.fire("saveSnapshot");e.fire("lockSnapshot",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(a,c,g.dragStartContainerChildCount,g.dragEndContainerChildCount);(l=this.isDropRangeAffectedByDragRange(a, +c))||(k=a.createBookmark(!1));g=c.clone().createBookmark(!1);l&&(k=a.createBookmark(!1));a=k.startNode;c=k.endNode;l=g.startNode;c&&a.getPosition(l)&CKEDITOR.POSITION_PRECEDING&&c.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&l.insertBefore(a);a=e.createRange();a.moveToBookmark(k);h.extractHtmlFromRange(a,1);c=e.createRange();g.startNode.getCommonAncestor(h)||(g=e.getSelection().createBookmarks()[0]);c.moveToBookmark(g);b(e,{dataTransfer:f,method:"drop",range:c},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(a, +c){var b=a.data.$,f=b.clientX,e=b.clientY,g=c.getSelection(!0).getRanges()[0],h=c.createRange();if(a.data.testRange)return a.data.testRange;if(document.caretRangeFromPoint&&c.document.$.caretRangeFromPoint(f,e))b=c.document.$.caretRangeFromPoint(f,e),h.setStart(CKEDITOR.dom.node(b.startContainer),b.startOffset),h.collapse(!0);else if(b.rangeParent)h.setStart(CKEDITOR.dom.node(b.rangeParent),b.rangeOffset),h.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&g&&c.editable().hasFocus)return g; +if(document.body.createTextRange){c.focus();b=c.document.getBody().$.createTextRange();try{for(var k=!1,l=0;20>l&&!k;l++){if(!k)try{b.moveToPoint(f,e-l),k=!0}catch(m){}if(!k)try{b.moveToPoint(f,e+l),k=!0}catch(y){}}if(k){var u="cke-temp-"+(new Date).getTime();b.pasteHTML('\x3cspan id\x3d"'+u+'"\x3e\x3c/span\x3e');var B=c.document.getById(u);h.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START);B.remove()}else{var C=c.document.$.elementFromPoint(f,e),A=new CKEDITOR.dom.element(C),E;if(A.equals(c.editable())|| +"html"==A.getName())return g&&g.startContainer&&!g.startContainer.equals(c.editable())?g:null;E=A.getClientRect();f<E.left?h.setStartAt(A,CKEDITOR.POSITION_AFTER_START):h.setStartAt(A,CKEDITOR.POSITION_BEFORE_END);h.collapse(!0)}}catch(G){return null}}else return null}return h},initDragDataTransfer:function(a,c){var b=a.data.$?a.data.$.dataTransfer:null,f=new this.dataTransfer(b,c);"dragstart"===a.name&&f.storeId();b?this.dragData&&f.id==this.dragData.id?f=this.dragData:this.dragData=f:this.dragData? +f=this.dragData:this.dragData=f;a.data.dataTransfer=f},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(a,c){if(this.isCustomCopyCutSupported){if(a&&a.data&&a.data.$){var b=a.data.$.clipboardData,f=new this.dataTransfer(b,c);"copy"!==a.name&&"cut"!==a.name||f.storeId();this.copyCutData&&f.id==this.copyCutData.id?(f=this.copyCutData,f.$=b):this.copyCutData=f;return f}return new this.dataTransfer(null,c)}return new this.dataTransfer(CKEDITOR.env.edge&&a&&a.data.$&& +a.data.$.clipboardData||null,c)},preventDefaultDropOnElement:function(a){a&&a.on("dragover",k)}};f=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=function(a,c){a&&(this.$=a);this._={metaRegExp:/^<meta.*?>/i,bodyRegExp:/<body(?:[\s\S]*?)>([\s\S]*)<\/body>/i,fragmentRegExp:/\s*\x3c!--StartFragment--\x3e|\x3c!--EndFragment--\x3e\s*/g,data:{},files:[],nativeHtmlCache:"",normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"== +a?"Text":"url"==a?"URL":a}};this._.fallbackDataTransfer=new CKEDITOR.plugins.clipboard.fallbackDataTransfer(this);this.id=this.getData(f);this.id||(this.id="Text"==f?"":"cke-"+CKEDITOR.tools.getUniqueId());c&&(this.sourceEditor=c,this.setData("text/html",c.getSelectedHtml(1)),"Text"==f||this.getData("text/plain")||this.setData("text/plain",c.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype= +{getData:function(a,c){a=this._.normalizeType(a);var b="text/html"==a&&c?this._.nativeHtmlCache:this._.data[a];if(void 0===b||null===b||""===b){if(this._.fallbackDataTransfer.isRequired())b=this._.fallbackDataTransfer.getData(a,c);else try{b=this.$.getData(a)||""}catch(f){b=""}"text/html"!=a||c||(b=this._stripHtml(b))}"Text"==a&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==b.substring(0,7)&&(b="");if("string"===typeof b)var e=b.indexOf("\x3c/html\x3e"),b=-1!==e?b.substring(0,e+7):b;return b}, +setData:function(a,c){a=this._.normalizeType(a);"text/html"==a?(this._.data[a]=this._stripHtml(c),this._.nativeHtmlCache=c):this._.data[a]=c;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==a||"Text"==a)if("Text"==f&&"Text"==a&&(this.id=c),this._.fallbackDataTransfer.isRequired())this._.fallbackDataTransfer.setData(a,c);else try{this.$.setData(a,c)}catch(b){}},storeId:function(){"Text"!==f&&this.setData(f,this.id)},getTransferType:function(a){return this.sourceEditor?this.sourceEditor== +a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function a(b){b=c._.normalizeType(b);var d=c.getData(b);"text/html"==b&&(c._.nativeHtmlCache=c.getData(b,!0),d=c._stripHtml(d));d&&(c._.data[b]=d)}if(this.$){var c=this,b,f;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(b=0;b<this.$.types.length;b++)a(this.$.types[b])}else a("Text"),a("URL");f=this._getImageFromClipboard();if(this.$&&this.$.files|| +f){this._.files=[];if(this.$.files&&this.$.files.length)for(b=0;b<this.$.files.length;b++)this._.files.push(this.$.files[b]);0===this._.files.length&&f&&this._.files.push(f)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(a){return this._.files.length?this._.files[a]:this.$&&this.$.files&&this.$.files.length?this.$.files[a]:0===a?this._getImageFromClipboard(): +void 0},isEmpty:function(){var a={},c;if(this.getFilesCount())return!1;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(this._.data),function(c){a[c]=1});if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var b=0;b<this.$.types.length;b++)a[this.$.types[b]]=1}else a.Text=1,a.URL=1;"Text"!=f&&(a[f]=0);for(c in a)if(a[c]&&""!==this.getData(c))return!1;return!0},getTypes:function(){return this.$&&this.$.types?[].slice.call(this.$.types):[]},_getImageFromClipboard:function(){var a; +try{if(this.$&&this.$.items&&this.$.items[0]&&(a=this.$.items[0].getAsFile())&&a.type)return a}catch(c){}},_stripHtml:function(a){if(a&&a.length){a=a.replace(this._.metaRegExp,"");var c=this._.bodyRegExp.exec(a);c&&c.length&&(a=c[1],a=a.replace(this._.fragmentRegExp,""))}return a}};CKEDITOR.plugins.clipboard.fallbackDataTransfer=function(a){this._dataTransfer=a;this._customDataFallbackType="text/html"};CKEDITOR.plugins.clipboard.fallbackDataTransfer._isCustomMimeTypeSupported=null;CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes= +[];CKEDITOR.plugins.clipboard.fallbackDataTransfer.prototype={isRequired:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer,c=this._dataTransfer.$;if(null===a._isCustomMimeTypeSupported)if(c){a._isCustomMimeTypeSupported=!1;if(CKEDITOR.env.edge&&17<=CKEDITOR.env.version)return!0;try{c.setData("cke/mimetypetest","cke test value"),a._isCustomMimeTypeSupported="cke test value"===c.getData("cke/mimetypetest"),c.clearData("cke/mimetypetest")}catch(b){}}else return!1;return!a._isCustomMimeTypeSupported}, +getData:function(a,c){var b=this._getData(this._customDataFallbackType,!0);if(c)return b;var b=this._extractDataComment(b),f=null,f=a===this._customDataFallbackType?b.content:b.data&&b.data[a]?b.data[a]:this._getData(a,!0);return null!==f?f:""},setData:function(a,c){var b=a===this._customDataFallbackType;b&&(c=this._applyDataComment(c,this._getFallbackTypeData()));var f=c,e=this._dataTransfer.$;try{e.setData(a,f),b&&(this._dataTransfer._.nativeHtmlCache=f)}catch(g){if(this._isUnsupportedMimeTypeError(g)){b= +CKEDITOR.plugins.clipboard.fallbackDataTransfer;-1===CKEDITOR.tools.indexOf(b._customTypes,a)&&b._customTypes.push(a);var b=this._getFallbackTypeContent(),h=this._getFallbackTypeData();h[a]=f;try{f=this._applyDataComment(b,h),e.setData(this._customDataFallbackType,f),this._dataTransfer._.nativeHtmlCache=f}catch(k){f=""}}}return f},_getData:function(a,c){var b=this._dataTransfer._.data;if(!c&&b[a])return b[a];try{return this._dataTransfer.$.getData(a)}catch(f){return null}},_getFallbackTypeContent:function(){var a= +this._dataTransfer._.data[this._customDataFallbackType];a||(a=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).content);return a},_getFallbackTypeData:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes,c=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).data||{},b=this._dataTransfer._.data;CKEDITOR.tools.array.forEach(a,function(a){void 0!==b[a]?c[a]=b[a]:void 0!==c[a]&&(c[a]=c[a])},this);return c},_isUnsupportedMimeTypeError:function(a){return a.message&& +-1!==a.message.search(/element not found/gi)},_extractDataComment:function(a){var c={data:null,content:a||""};if(a&&16<a.length){var b;(b=/\x3c!--cke-data:(.*?)--\x3e/g.exec(a))&&b[1]&&(c.data=JSON.parse(decodeURIComponent(b[1])),c.content=a.replace(b[0],""))}return c},_applyDataComment:function(a,c){var b="";c&&CKEDITOR.tools.object.keys(c).length&&(b="\x3c!--cke-data:"+encodeURIComponent(JSON.stringify(c))+"--\x3e");return b+(a&&a.length?a:"")}}})();CKEDITOR.config.clipboard_notificationDuration= +1E4;(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(b,a){a&&CKEDITOR.tools.extend(this,a);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=b;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(b){return new CKEDITOR.ui.panel(b)}};var b=CKEDITOR.addTemplate("panel", +'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'),h=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),g=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e'); +CKEDITOR.ui.panel.prototype={render:function(e,a){var m={editorId:e.id,id:this.id,langCode:e.langCode,dir:e.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":e.config.baseFloatZIndex+1};this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),c=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&c.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});c=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded= +!0;if(this.onLoad)this.onLoad()},this));a.write(g.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+c+");"},m)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var c=a.data.getKeystroke(),b=this.document.getById(this.id).getAttribute("dir");if("input"!==a.data.getTarget().getName()||37!==c&&39!==c)this._.onKeyDown&&!1===this._.onKeyDown(c)?"input"===a.data.getTarget().getName()&&32===c||a.data.preventDefault(): +(27==c||c==("rtl"==b?39:37))&&this.onEscape&&!1===this.onEscape(c)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(c)}else a=this.document.getById(this.id);this._.holder=a}return a};if(this.isFramed){var l=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";m.frame=h.output({id:this.id+"_frame", +src:l})}l=b.output(m);a&&a.push(l);return l},addBlock:function(b,a){a=this._.blocks[b]=a instanceof CKEDITOR.ui.panel.block?a:new CKEDITOR.ui.panel.block(this.getHolderElement(),a);this._.currentBlock||this.showBlock(b);return a},getBlock:function(b){return this._.blocks[b]},showBlock:function(b){b=this._.blocks[b];var a=this._.currentBlock,g=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");a&&a.hide();this._.currentBlock=b;CKEDITOR.fire("ariaWidget",g);b._.focusIndex= +-1;this._.onKeyDown=b.onKeyDown&&CKEDITOR.tools.bind(b.onKeyDown,b);b.show();return b},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(b,a){this.element=b.append(b.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));a&&CKEDITOR.tools.extend(this,a);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title|| +this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(b){-1!=b&&(b=this._.getItems().getItem(this._.focusIndex=b),CKEDITOR.env.webkit&&b.getDocument().getWindow().focus(),b.focus(),this.onMark&&this.onMark(b))},markFirstDisplayed:function(b){for(var a=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"none"==a.getStyle("display")},g=this._.getItems(),h,k,c=g.count()-1;0<=c;c--)if(h=g.getItem(c),h.getAscendant(a)||(k=h,this._.focusIndex= +c),"true"==h.getAttribute("aria-selected")){k=h;this._.focusIndex=c;break}k&&(b&&b(),CKEDITOR.env.webkit&&k.getDocument().getWindow().focus(),k.focus(),this.onMark&&this.onMark(k))},getItems:function(){return this.element.find("a,input")}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){this.onHide&&!0===this.onHide.call(this)||this.element.setStyle("display","none")},onKeyDown:function(b,a){var g=this.keys[b];switch(g){case "next":for(var h=this._.focusIndex,g=this._.getItems(), +k;k=g.getItem(++h);)if(k.getAttribute("_cke_focus")&&k.$.offsetWidth){this._.focusIndex=h;k.focus(!0);break}return k||a?!1:(this._.focusIndex=-1,this.onKeyDown(b,1));case "prev":h=this._.focusIndex;for(g=this._.getItems();0<h&&(k=g.getItem(--h));){if(k.getAttribute("_cke_focus")&&k.$.offsetWidth){this._.focusIndex=h;k.focus(!0);break}k=null}return k||a?!1:(this._.focusIndex=g.count(),this.onKeyDown(b,1));case "click":case "mouseup":return h=this._.focusIndex,(k=0<=h&&this._.getItems().getItem(h))&& +k.fireEventHandler(g,{button:CKEDITOR.tools.normalizeMouseButton(CKEDITOR.MOUSE_BUTTON_LEFT,!0)}),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"});(function(){function b(b,e,a,m,l){l=CKEDITOR.tools.genKey(e.getUniqueId(),a.getUniqueId(),b.lang.dir,b.uiColor||"",m.css||"",l||"");var k=h[l];k||(k=h[l]=new CKEDITOR.ui.panel(e,m),k.element=a.append(CKEDITOR.dom.element.createFromHtml(k.render(b),e)),k.element.setStyles({display:"none",position:"absolute"}));return k}var h={}; +CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(g,e,a,h){function l(){d.hide()}a.forceIFrame=1;a.toolbarRelated&&g.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e=CKEDITOR.document.getById("cke_"+g.name));var k=e.getDocument();h=b(g,k,e,a,h||0);var c=h.element,f=c.getFirst(),d=this;c.disableContextMenu();this.element=c;this._={editor:g,panel:h,parentElement:e,definition:a,document:k,iframe:f,children:[],dir:g.lang.dir,showBlockParams:null,markFirst:void 0!==a.markFirst?a.markFirst:!0}; +g.on("mode",l);g.on("resize",l);k.getWindow().on("resize",function(){this.reposition()},this)},proto:{addBlock:function(b,e){return this._.panel.addBlock(b,e)},addListBlock:function(b,e){return this._.panel.addListBlock(b,e)},getBlock:function(b){return this._.panel.getBlock(b)},showBlock:function(b,e,a,h,l,k){var c=this._.panel,f=c.showBlock(b);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var d=this._.editor.editable();this._.returnFocus=d.hasFocus?d:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement); +this._.hideTimeout=0;var n=this.element,d=this._.iframe,d=CKEDITOR.env.ie&&!CKEDITOR.env.edge?d:new CKEDITOR.dom.window(d.$.contentWindow),w=n.getDocument(),v=this._.parentElement.getPositionedAncestor(),p=e.getDocumentPosition(w),w=v?v.getDocumentPosition(w):{x:0,y:0},r="rtl"==this._.dir,q=p.x+(h||0)-w.x,x=p.y+(l||0)-w.y;!r||1!=a&&4!=a?r||2!=a&&3!=a||(q+=e.$.offsetWidth-1):q+=e.$.offsetWidth;if(3==a||4==a)x+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:x+"px",left:0, +display:""});n.setOpacity(0);n.getFirst().removeStyle("width");this._.editor.focusManager.add(d);this._.blurSet||(CKEDITOR.event.useCapture=!0,d.on("blur",function(a){function c(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(c,0,this)):c.call(this))},this),d.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)}, +this),CKEDITOR.env.iOS&&(d.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),d.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);c.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&!1===this.onEscape(a))return!1},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){var a=n;a.removeStyle("width");if(f.autoSize){var b=f.element.getDocument(),b=(CKEDITOR.env.webkit||CKEDITOR.env.edge? +f.element:b.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle("width",b+10+"px");b=f.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle("height",b+"px");c._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");r&&(q-=n.$.offsetWidth);n.setStyle("left",q+"px");var b=c.element.getWindow(),a=n.$.getBoundingClientRect(), +b=b.getViewPaneSize(),d=a.width||a.right-a.left,e=a.height||a.bottom-a.top,g=r?a.right:b.width-a.left,h=r?b.width-a.right:a.left;r?g<d&&(q=h>d?q+d:b.width>d?q-a.left:q-a.right+b.width):g<d&&(q=h>d?q-d:b.width>d?q-a.right+b.width:q-a.left);d=a.top;b.height-a.top<e&&(x=d>e?x-e:b.height>e?x-a.bottom+b.height:x-a.top);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&((b=a=n.$.offsetParent&&new CKEDITOR.dom.element(n.$.offsetParent))&&"html"==b.getName()&&(b=b.getDocument().getBody()),b&&"rtl"==b.getComputedStyle("direction")&& +(q=CKEDITOR.env.ie8Compat?q-2*n.getDocument().getDocumentElement().$.scrollLeft:q-(a.$.scrollWidth-a.$.clientWidth)));var a=n.getFirst(),l;(l=a.getCustomData("activePanel"))&&l.onHide&&l.onHide.call(this,1);a.setCustomData("activePanel",this);n.setStyles({top:x+"px",left:q+"px"});n.setOpacity(1);k&&k()},this);c.isLoaded?a():c.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();f.element.focus();CKEDITOR.env.webkit&& +(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);this._.markFirst&&(CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(function(){f.markFirstDisplayed?f.markFirstDisplayed():f._.markFirstDisplayed()},0):f.markFirstDisplayed?f.markFirstDisplayed():f._.markFirstDisplayed());this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var b=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(), this.showBlock.apply(this,b))},focus:function(){if(CKEDITOR.env.webkit){var b=CKEDITOR.document.getActive();b&&!b.equals(this._.iframe)&&b.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var b=this._.iframe.getFrameDocument().getActive();b&&b.is("a")&&(this._.lastFocused=b)},hide:function(b){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur(); -this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(b=b&&this._.returnFocus)CKEDITOR.env.webkit&&b.type&&b.getWindow().$.focus(),b.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(b){var f=this._.panel;void 0!==b&&(f.allowBlur=b);return f.allowBlur},showAsChild:function(b,f,a,h,k,l){if(this._.activeChild!=b||b._.panel._.offsetParentId!=a.getId())this.hideChild(),b.onHide= -CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=b,this._.focused=!1,b.showBlock(f,a,h,k,l),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){b.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(b){var f=this._.activeChild;f&&(delete f.onHide,delete this._.activeChild,f.hide(),b&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var b=CKEDITOR.tools.isEmpty(CKEDITOR.instances), -f;for(f in h){var a=h[f];b?a.destroy():a.element.hide()}b&&(h={})})})();CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(b){for(var h=b.config.menu_groups.split(","),g=b._.menuGroups={},f=b._.menuItems={},a=0;a<h.length;a++)g[h[a]]=a+1;b.addMenuGroup=function(a,b){g[a]=b||100};b.addMenuItem=function(a,b){g[b.group]&&(f[a]=new CKEDITOR.menuItem(this,a,b))};b.addMenuItems=function(a){for(var b in a)this.addMenuItem(b,a[b])};b.getMenuItem=function(a){return f[a]};b.removeMenuItem= -function(a){delete f[a]}}});(function(){function b(a){a.sort(function(a,d){return a.group<d.group?-1:a.group>d.group?1:a.order<d.order?-1:a.order>d.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"', +this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(b=b&&this._.returnFocus)CKEDITOR.env.webkit&&b.type&&b.getWindow().$.focus(),b.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(b){var e=this._.panel;void 0!==b&&(e.allowBlur=b);return e.allowBlur},showAsChild:function(b,e,a,h,l,k){if(this._.activeChild!=b||b._.panel._.offsetParentId!=a.getId())this.hideChild(),b.onHide= +CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=b,this._.focused=!1,b.showBlock(e,a,h,l,k),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){b.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(b){var e=this._.activeChild;e&&(delete e.onHide,delete this._.activeChild,e.hide(),b&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var b=CKEDITOR.tools.isEmpty(CKEDITOR.instances), +e;for(e in h){var a=h[e];b?a.destroy():a.element.hide()}b&&(h={})})})();CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(b){for(var h=b.config.menu_groups.split(","),g=b._.menuGroups={},e=b._.menuItems={},a=0;a<h.length;a++)g[h[a]]=a+1;b.addMenuGroup=function(a,b){g[a]=b||100};b.addMenuItem=function(a,b){g[b.group]&&(e[a]=new CKEDITOR.menuItem(this,a,b))};b.addMenuItems=function(a){for(var b in a)this.addMenuItem(b,a[b])};b.getMenuItem=function(a){return e[a]};b.removeMenuItem= +function(a){delete e[a]}}});(function(){function b(a){a.sort(function(a,c){return a.group<c.group?-1:a.group>c.group?1:a.order<c.order?-1:a.order>c.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{attrLabel}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"', g="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(h+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;" ondragstart\x3d"return false;"');CKEDITOR.env.ie&&(g='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var h=h+(' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" onclick\x3d"'+g+'CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e')+ -'\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton_icon"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{iconStyle}"\x3e\x3c/span\x3e\x3c/span\x3e\x3cspan class\x3d"cke_menubutton_label"\x3e{label}\x3c/span\x3e{shortcutHtml}{arrowHtml}\x3c/span\x3e\x3c/a\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_voice_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e\x3c/span\x3e',f=CKEDITOR.addTemplate("menuItem",h),a=CKEDITOR.addTemplate("menuArrow", -'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'),m=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var d=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level- -1,block:{}}),e=d.block.attributes=d.attributes||{};!e.role&&(e.role="menu");this._.panelDefinition=d},_:{onShow:function(){var a=this.editor.getSelection(),b=a&&a.getStartElement(),d=this.editor.elementPath(),e=this._.listeners;this.removeAll();for(var c=0;c<e.length;c++){var f=e[c](b,a,d);if(f)for(var g in f){var h=this.editor.getMenuItem(g);!h||h.command&&!this.editor.getCommand(h.command).state||(h.state=f[g],this.add(h))}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&& -this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):27==a&&this.hide(1);return!1},onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,d=this.items[a];if(d=d.getItems&&d.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var e in d){var c=this.editor.getMenuItem(e); -c&&(c.state=d[e],b.add(c))}var f=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+String(a));setTimeout(function(){b.show(f,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,f,d,e){if(!this.parent&&(this._.onShow(),!this.items.length))return;f=f||("rtl"==this.editor.lang.dir?2:1);var c=this.items,g=this.editor,h=this._.panel,m=this._.element;if(!h){h=this._.panel= -new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);h.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);h.onShow=function(){h._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};h.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);m=h.addBlock(this.id,this._.panelDefinition.block);m.autoSize=!0;var r=m.keys;r[40]="next";r[9]="next";r[38]="prev";r[CKEDITOR.SHIFT+ -9]="prev";r["rtl"==g.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";r[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(r[13]="mouseup");m=this._.element=m.element;r=m.getDocument();r.getBody().setStyle("overflow","hidden");r.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,g.config.menu_subMenuDelay||400,this,[a])}, -this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var c=this.items[a];if(c.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(c.getItems)this._.showSubMenu(a);else this._.onClick(c)},this)}b(c);for(var r=g.elementPath(),r=['\x3cdiv class\x3d"cke_menu'+(r&&r.direction()!=g.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],p=c.length,q=p&&c[0].group,u=0;u<p;u++){var t= -c[u];q!=t.group&&(r.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),q=t.group);t.render(this,u,r)}r.push("\x3c/div\x3e");m.setHtml(r.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,a,f,d,e):h.showBlock(this.id,a,f,d,e);g.fire("menuShow",[h])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)},findItemByCommandName:function(a){var b=CKEDITOR.tools.array.filter(this.items, -function(d){return a===d.command});return b.length?(b=b[0],{item:b,element:this._.element.findOne("."+b.className)}):null}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,d){CKEDITOR.tools.extend(this,d,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(b,g,d){var e=b.id+String(g),c="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,h="",w=this.editor,z,r,p=c==CKEDITOR.TRISTATE_ON?"on":c==CKEDITOR.TRISTATE_DISABLED? -"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(h=' aria-checked\x3d"'+(c==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var q=this.getItems,u="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",t=this.name;this.icon&&!/\./.test(this.icon)&&(t=this.icon);this.command&&(z=w.getCommand(this.command),(z=w.getCommandKeystroke(z))&&(r=CKEDITOR.tools.keystrokeToString(w.lang.common.keyboard,z)));b={id:e,name:this.name,iconName:t,label:this.label,cls:this.className||"",state:p,hasPopup:q? -"true":"false",disabled:c==CKEDITOR.TRISTATE_DISABLED,title:this.label+(r?" ("+r.display+")":""),ariaShortcut:r?w.lang.common.keyboardShortcut+" "+r.aria:"",href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:b._.itemOverFn,moveOutFn:b._.itemOutFn,clickFn:b._.itemClickFn,index:g,iconStyle:CKEDITOR.skin.getIconStyle(t,"rtl"==this.editor.lang.dir,t==this.icon?null:this.icon,this.iconOffset),shortcutHtml:r?m.output({shortcut:r.display}):"",arrowHtml:q?a.output({label:u}):"",role:this.role? -this.role:"menuitem",ariaChecked:h};f.output(b,d)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(b){this.base.call(this,b,{panel:{css:b.config.contextmenu_contentsCss,className:"cke_menu_panel", -attributes:{"aria-label":b.lang.contextmenu.options}}})},proto:{addTarget:function(b,h){function g(){a=!1}var f,a;b.on("contextmenu",function(b){b=b.data;var g=CKEDITOR.env.webkit?f:CKEDITOR.env.mac?b.$.metaKey:b.$.ctrlKey;if(!h||!g)if(b.preventDefault(),!a){if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var g=this.editor,d=(new CKEDITOR.dom.elementPath(b.getTarget(),g.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);d&&"false"==d.getAttribute("contenteditable")&&g.getSelection().fake(d)}var d= -b.getTarget().getDocument(),e=b.getTarget().getDocument().getDocumentElement(),g=!d.equals(CKEDITOR.document),d=d.getWindow().getScrollPosition(),c=g?b.$.clientX:b.$.pageX||d.x+b.$.clientX,n=g?b.$.clientY:b.$.pageY||d.y+b.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(e,null,c,n)},CKEDITOR.env.ie?200:0,this)}},this);if(CKEDITOR.env.webkit){var m=function(){f=0};b.on("keydown",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});b.on("keyup",m);b.on("contextmenu",m)}CKEDITOR.env.gecko&& -!CKEDITOR.env.mac&&(b.on("keydown",function(b){b.data.$.shiftKey&&121===b.data.$.keyCode&&(a=!0)},null,null,0),b.on("keyup",g),b.on("contextmenu",g))},open:function(b,h,g,f){!1!==this.editor.config.enableContextMenu&&this.editor.getSelection().getType()!==CKEDITOR.SELECTION_NONE&&(this.editor.focus(),b=b||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(b,h,g,f))}}})},beforeInit:function(b){var h=b.contextMenu=new CKEDITOR.plugins.contextMenu(b);b.on("contentDom",function(){h.addTarget(b.editable(), -!1!==b.config.browserContextMenuOnCtrl)});b.addCommand("contextMenu",{exec:function(b){var f=0,a=0,h=b.getSelection().getRanges(),h=h[h.length-1].getClientRects(b.editable().isInline());if(h=h[h.length-1])f=h["rtl"===b.lang.dir?"left":"right"],a=h.bottom;b.contextMenu.open(b.document.getBody().getParent(),null,f,a)}});b.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");b.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){function b(a,b){function g(b){b=c.list[b];var d;b.equals(a.editable())|| -"true"==b.getAttribute("contenteditable")?(d=a.createRange(),d.selectNodeContents(b),d=d.select()):(d=a.getSelection(),d.selectElement(b));CKEDITOR.env.ie&&a.fire("selectionChange",{selection:d,path:new CKEDITOR.dom.elementPath(b)});a.focus()}function l(){e&&e.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete c.list}var d=a.ui.spaceId("path"),e,c=a._.elementsPath,n=c.idBase;b.html+='\x3cspan id\x3d"'+d+'_label" class\x3d"cke_voice_label"\x3e'+a.lang.elementspath.eleLabel+ -'\x3c/span\x3e\x3cspan id\x3d"'+d+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+d+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';a.on("uiReady",function(){var b=a.ui.space("path");b&&a.focusManager.add(b,1)});c.onClick=g;var w=CKEDITOR.tools.addFunction(g),z=CKEDITOR.tools.addFunction(function(b,d){var e=c.idBase,f;d=new CKEDITOR.dom.event(d);f="rtl"==a.lang.dir;switch(d.getKeystroke()){case f?39:37:case 9:return(f=CKEDITOR.document.getById(e+ -(b+1)))||(f=CKEDITOR.document.getById(e+"0")),f.focus(),!1;case f?37:39:case CKEDITOR.SHIFT+9:return(f=CKEDITOR.document.getById(e+(b-1)))||(f=CKEDITOR.document.getById(e+(c.list.length-1))),f.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return g(b),!1}return!0});a.on("selectionChange",function(b){for(var g=[],h=c.list=[],k=[],l=c.filters,m=!0,v=b.data.path.elements,x=v.length;x--;){var B=v[x],D=0;b=B.data("cke-display-name")?B.data("cke-display-name"):B.data("cke-real-element-type")?B.data("cke-real-element-type"): -B.getName();(m=B.hasAttribute("contenteditable")?"true"==B.getAttribute("contenteditable"):m)||B.hasAttribute("contenteditable")||(D=1);for(var A=0;A<l.length;A++){var G=l[A](B,b);if(!1===G){D=1;break}b=G||b}D||(h.unshift(B),k.unshift(b))}h=h.length;for(l=0;l<h;l++)b=k[l],m=a.lang.elementspath.eleTitle.replace(/%1/,b),b=f.output({id:n+l,label:m,text:b,jsTitle:"javascript:void('"+b+"')",index:l,keyDownFn:z,clickFn:w}),g.unshift(b);e||(e=CKEDITOR.document.getById(d));k=e;k.setHtml(g.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e'); -a.fire("elementsPathUpdate",{space:k})});a.on("readOnly",l);a.on("contentDomUnload",l);a.addCommand("elementsPathFocus",h.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var h={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},g="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(g+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(g+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"'); -var f=CKEDITOR.addTemplate("pathItem",'\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"'+g+' hidefocus\x3d"true" draggable\x3d"false" ondragstart\x3d"return false;" onkeydown\x3d"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role\x3d"button" aria-label\x3d"{label}"\x3e{text}\x3c/a\x3e');CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath= -{idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(f){"bottom"==f.data.space&&b(a,f.data)})}})})();(function(){function b(a,b,d){d=a.config.forceEnterMode||d;if("wysiwyg"==a.mode){b||(b=a.activeEnterMode);var f=a.elementPath();f&&!f.isContextFor("p")&&(b=CKEDITOR.ENTER_BR,d=1);a.fire("saveSnapshot");b==CKEDITOR.ENTER_BR?k(a,b,null,d):l(a,b,null,d);a.fire("saveSnapshot")}}function h(a){a=a.getSelection().getRanges(!0);for(var b=a.length-1;0<b;b--)a[b].deleteContents(); -return a[0]}function g(a){var b=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},!0);if(a.root.equals(b))return a;b=new CKEDITOR.dom.range(b);b.moveToRange(a);return b}CKEDITOR.plugins.add("enterkey",{init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){b(a)}});a.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){b(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13, -"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var f=CKEDITOR.dom.walker.whitespaces(),a=CKEDITOR.dom.walker.bookmark(),m,k,l,d;CKEDITOR.plugins.enterkey={enterBlock:function(b,c,l,m){function z(a){var b;if(a===CKEDITOR.ENTER_BR||-1===CKEDITOR.tools.indexOf(["td","th"],u.lastElement.getName())||1!==u.lastElement.getChildCount())return!1;a=u.lastElement.getChild(0).clone(!0);(b=a.getBogus())&&b.remove();return a.getText().length?!1:!0}if(l=l||h(b)){l=g(l);var r=l.document,p=l.checkStartOfBlock(),q= -l.checkEndOfBlock(),u=b.elementPath(l.startContainer),t=u.block,y=c==CKEDITOR.ENTER_DIV?"div":"p",v;if(t&&p&&q){p=t.getParent();if(p.is("li")&&1<p.getChildCount()){r=new CKEDITOR.dom.element("li");v=b.createRange();r.insertAfter(p);t.remove();v.setStart(r,0);b.getSelection().selectRanges([v]);return}if(t.is("li")||t.getParent().is("li")){t.is("li")||(t=t.getParent(),p=t.getParent());v=p.getParent();l=!t.hasPrevious();var x=!t.hasNext();m=b.getSelection();var y=m.createBookmarks(),B=t.getDirection(1), -q=t.getAttribute("class"),D=t.getAttribute("style"),A=v.getDirection(1)!=B;b=b.enterMode!=CKEDITOR.ENTER_BR||A||D||q;if(v.is("li"))l||x?(l&&x&&p.remove(),t[x?"insertAfter":"insertBefore"](v)):t.breakParent(v);else{if(b)if(u.block.is("li")?(v=r.createElement(c==CKEDITOR.ENTER_P?"p":"div"),A&&v.setAttribute("dir",B),D&&v.setAttribute("style",D),q&&v.setAttribute("class",q),t.moveChildren(v)):v=u.block,l||x)v[l?"insertBefore":"insertAfter"](p);else t.breakParent(p),v.insertAfter(p);else if(t.appendBogus(!0), -l||x)for(;r=t[l?"getFirst":"getLast"]();)r[l?"insertBefore":"insertAfter"](p);else for(t.breakParent(p);r=t.getLast();)r.insertAfter(p);t.remove()}m.selectBookmarks(y);return}if(t&&t.getParent().is("blockquote")){t.breakParent(t.getParent());t.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||t.getPrevious().remove();t.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||t.getNext().remove();l.moveToElementEditStart(t);l.select();return}}else if(t&&t.is("pre")&&!q){k(b,c,l,m);return}if(D= -l.splitBlock(y)){b=D.previousBlock;t=D.nextBlock;p=D.wasStartOfBlock;q=D.wasEndOfBlock;t?(x=t.getParent(),x.is("li")&&(t.breakParent(x),t.move(t.getNext(),1))):b&&(x=b.getParent())&&x.is("li")&&(b.breakParent(x),x=b.getNext(),l.moveToElementEditStart(x),b.move(b.getPrevious()));if(p||q)if(z(c))l.moveToElementEditStart(l.getTouchedStartNode());else{if(b){if(b.is("li")||!d.test(b.getName())&&!b.is("pre"))v=b.clone()}else t&&(v=t.clone());v?m&&!v.is("li")&&v.renameNode(y):x&&x.is("li")?v=x:(v=r.createElement(y), -b&&(B=b.getDirection())&&v.setAttribute("dir",B));if(r=D.elementPath)for(c=0,m=r.elements.length;c<m;c++){y=r.elements[c];if(y.equals(r.block)||y.equals(r.blockLimit))break;CKEDITOR.dtd.$removeEmpty[y.getName()]&&(y=y.clone(),v.moveChildren(y),v.append(y))}v.appendBogus();v.getParent()||l.insertNode(v);v.is("li")&&v.removeAttribute("value");!CKEDITOR.env.ie||!p||q&&b.getChildCount()||(l.moveToElementEditStart(q?b:v),l.select());l.moveToElementEditStart(p&&!q?t:v)}else t.is("li")&&(v=l.clone(),v.selectNodeContents(t), -v=new CKEDITOR.dom.walker(v),v.evaluator=function(b){return!(a(b)||f(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in CKEDITOR.dtd.$inline&&!(b.getName()in CKEDITOR.dtd.$empty))},(x=v.next())&&x.type==CKEDITOR.NODE_ELEMENT&&x.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?r.createElement("br"):r.createText(" ")).insertBefore(x)),t&&l.moveToElementEditStart(t);l.select();l.scrollIntoView()}}},enterBr:function(a,b,f,g){if(f=f||h(a)){var k=f.document,m=f.checkEndOfBlock(),p=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()), -q=p.block,u=q&&p.block.getName();g||"li"!=u?(!g&&m&&d.test(u)?(m=q.getDirection())?(k=k.createElement("div"),k.setAttribute("dir",m),k.insertAfter(q),f.setStart(k,0)):(k.createElement("br").insertAfter(q),CKEDITOR.env.gecko&&k.createText("").insertAfter(q),f.setStartAt(q.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==u&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?k.createText("\r"):k.createElement("br"),f.deleteContents(),f.insertNode(a),CKEDITOR.env.needsBrFiller? -(k.createText("").insertAfter(a),m&&(q||p.blockLimit).appendBogus(),a.getNext().$.nodeValue="",f.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):f.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),f.collapse(!0),f.select(),f.scrollIntoView()):l(a,b,f,g)}}};m=CKEDITOR.plugins.enterkey;k=m.enterBr;l=m.enterBlock;d=/^h[1-6]$/})();(function(){function b(b,g){var f={},a=[],m={nbsp:" ",shy:"",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b, -d){var h=g?"\x26"+d+";":m[d];f[h]=g?m[d]:"\x26"+d+";";a.push(h);return""});b=b.replace(/,$/,"");if(!g&&b){b=b.split(",");var k=document.createElement("div"),l;k.innerHTML="\x26"+b.join(";\x26")+";";l=k.innerHTML;k=null;for(k=0;k<l.length;k++){var d=l.charAt(k);f[d]="\x26"+b[k]+";";a.push(d)}}f.regex=a.join(g?"|":"");return f}CKEDITOR.plugins.add("entities",{afterInit:function(h){function g(a){return d[a]}function f(b){return"force"!=a.entities_processNumerical&&k[b]?k[b]:"\x26#"+b.charCodeAt(0)+";"} -var a=h.config;if(h=(h=h.dataProcessor)&&h.htmlFilter){var m=[];!1!==a.basicEntities&&m.push("nbsp,gt,lt,amp");a.entities&&(m.length&&m.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"), +'\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton_icon"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{iconStyle}"\x3e\x3c/span\x3e\x3c/span\x3e\x3cspan class\x3d"cke_menubutton_label"\x3e{label}\x3c/span\x3e{shortcutHtml}{arrowHtml}\x3c/span\x3e\x3c/a\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_voice_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e\x3c/span\x3e',e=CKEDITOR.addTemplate("menuItem",h),a=CKEDITOR.addTemplate("menuArrow", +'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'),m=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var c=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level- +1,block:{}}),f=c.block.attributes=c.attributes||{};!f.role&&(f.role="menu");this._.panelDefinition=c},_:{onShow:function(){var a=this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),f=this._.listeners;this.removeAll();for(var d=0;d<f.length;d++){var e=f[d](b,a,c);if(e)for(var g in e){var h=this.editor.getMenuItem(g);!h||h.command&&!this.editor.getCommand(h.command).state||(h.state=e[g],this.add(h))}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&& +this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):27==a&&this.hide(1);return!1},onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,c=this.items[a];if(c=c.getItems&&c.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var f in c){var d=this.editor.getMenuItem(f); +d&&(d.state=c[f],b.add(d))}var e=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+String(a));setTimeout(function(){b.show(e,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,e,c,f){if(!this.parent&&(this._.onShow(),!this.items.length))return;e=e||("rtl"==this.editor.lang.dir?2:1);var d=this.items,g=this.editor,h=this._.panel,m=this._.element;if(!h){h=this._.panel= +new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);h.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);h.onShow=function(){h._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};h.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);m=h.addBlock(this.id,this._.panelDefinition.block);m.autoSize=!0;var p=m.keys;p[40]="next";p[9]="next";p[38]="prev";p[CKEDITOR.SHIFT+ +9]="prev";p["rtl"==g.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";p[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(p[13]="mouseup");m=this._.element=m.element;p=m.getDocument();p.getBody().setStyle("overflow","hidden");p.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,g.config.menu_subMenuDelay||400,this,[a])}, +this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var c=this.items[a];if(c.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(c.getItems)this._.showSubMenu(a);else this._.onClick(c)},this)}b(d);for(var p=g.elementPath(),p=['\x3cdiv class\x3d"cke_menu'+(p&&p.direction()!=g.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],r=d.length,q=r&&d[0].group,x=0;x<r;x++){var t= +d[x];q!=t.group&&(p.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),q=t.group);t.render(this,x,p)}p.push("\x3c/div\x3e");m.setHtml(p.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,a,e,c,f):h.showBlock(this.id,a,e,c,f);g.fire("menuShow",[h])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)},findItemByCommandName:function(a){var b=CKEDITOR.tools.array.filter(this.items, +function(c){return a===c.command});return b.length?(b=b[0],{item:b,element:this._.element.findOne("."+b.className)}):null}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){CKEDITOR.tools.extend(this,c,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(b,g,c){var f=b.id+String(g),d="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,h="",w=this.editor,v,p,r=d==CKEDITOR.TRISTATE_ON?"on":d==CKEDITOR.TRISTATE_DISABLED? +"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(h=' aria-checked\x3d"'+(d==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var q=this.getItems,x="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",t=this.name;this.icon&&!/\./.test(this.icon)&&(t=this.icon);this.command&&(v=w.getCommand(this.command),(v=w.getCommandKeystroke(v))&&(p=CKEDITOR.tools.keystrokeToString(w.lang.common.keyboard,v)));v=CKEDITOR.tools.htmlEncodeAttr(this.label);b={id:f,name:this.name,iconName:t,label:this.label, +attrLabel:v,cls:this.className||"",state:r,hasPopup:q?"true":"false",disabled:d==CKEDITOR.TRISTATE_DISABLED,title:v+(p?" ("+p.display+")":""),ariaShortcut:p?w.lang.common.keyboardShortcut+" "+p.aria:"",href:"javascript:void('"+(v||"").replace("'")+"')",hoverFn:b._.itemOverFn,moveOutFn:b._.itemOutFn,clickFn:b._.itemClickFn,index:g,iconStyle:CKEDITOR.skin.getIconStyle(t,"rtl"==this.editor.lang.dir,t==this.icon?null:this.icon,this.iconOffset),shortcutHtml:p?m.output({shortcut:p.display}):"",arrowHtml:q? +a.output({label:x}):"",role:this.role?this.role:"menuitem",ariaChecked:h};e.output(b,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(b){this.base.call(this,b,{panel:{css:b.config.contextmenu_contentsCss, +className:"cke_menu_panel",attributes:{"aria-label":b.lang.contextmenu.options}}})},proto:{addTarget:function(b,h){function g(){a=!1}var e,a;b.on("contextmenu",function(b){b=b.data;var g=CKEDITOR.env.webkit?e:CKEDITOR.env.mac?b.$.metaKey:b.$.ctrlKey;if(!h||!g)if(b.preventDefault(),!a){if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var g=this.editor,c=(new CKEDITOR.dom.elementPath(b.getTarget(),g.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);c&&"false"==c.getAttribute("contenteditable")&& +g.getSelection().fake(c)}var c=b.getTarget().getDocument(),f=b.getTarget().getDocument().getDocumentElement(),g=!c.equals(CKEDITOR.document),c=c.getWindow().getScrollPosition(),d=g?b.$.clientX:b.$.pageX||c.x+b.$.clientX,n=g?b.$.clientY:b.$.pageY||c.y+b.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(f,null,d,n)},CKEDITOR.env.ie?200:0,this)}},this);if(CKEDITOR.env.webkit){var m=function(){e=0};b.on("keydown",function(a){e=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});b.on("keyup",m); +b.on("contextmenu",m)}CKEDITOR.env.gecko&&!CKEDITOR.env.mac&&(b.on("keydown",function(b){b.data.$.shiftKey&&121===b.data.$.keyCode&&(a=!0)},null,null,0),b.on("keyup",g),b.on("contextmenu",g))},open:function(b,h,g,e){!1!==this.editor.config.enableContextMenu&&this.editor.getSelection().getType()!==CKEDITOR.SELECTION_NONE&&(this.editor.focus(),b=b||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(b,h,g,e))}}})},beforeInit:function(b){var h=b.contextMenu=new CKEDITOR.plugins.contextMenu(b); +b.on("contentDom",function(){h.addTarget(b.editable(),!1!==b.config.browserContextMenuOnCtrl)});b.addCommand("contextMenu",{exec:function(b){var e=0,a=0,h=b.getSelection().getRanges(),h=h[h.length-1].getClientRects(b.editable().isInline());if(h=h[h.length-1])e=h["rtl"===b.lang.dir?"left":"right"],a=h.bottom;b.contextMenu.open(b.document.getBody().getParent(),null,e,a)}});b.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");b.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){function b(a, +b){function g(c){c=d.list[c];var b;c.equals(a.editable())||"true"==c.getAttribute("contenteditable")?(b=a.createRange(),b.selectNodeContents(c),b=b.select()):(b=a.getSelection(),b.selectElement(c));CKEDITOR.env.ie&&a.fire("selectionChange",{selection:b,path:new CKEDITOR.dom.elementPath(c)});a.focus()}function k(){f&&f.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete d.list}var c=a.ui.spaceId("path"),f,d=a._.elementsPath,n=d.idBase;b.html+='\x3cspan id\x3d"'+c+'_label" class\x3d"cke_voice_label"\x3e'+ +a.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+c+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+c+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';a.on("uiReady",function(){var c=a.ui.space("path");c&&a.focusManager.add(c,1)});d.onClick=g;var w=CKEDITOR.tools.addFunction(g),v=CKEDITOR.tools.addFunction(function(c,b){var f=d.idBase,e;b=new CKEDITOR.dom.event(b);e="rtl"==a.lang.dir;switch(b.getKeystroke()){case e?39:37:case 9:return(e= +CKEDITOR.document.getById(f+(c+1)))||(e=CKEDITOR.document.getById(f+"0")),e.focus(),!1;case e?37:39:case CKEDITOR.SHIFT+9:return(e=CKEDITOR.document.getById(f+(c-1)))||(e=CKEDITOR.document.getById(f+(d.list.length-1))),e.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return g(c),!1}return!0});a.on("selectionChange",function(b){for(var g=[],h=d.list=[],k=[],l=d.filters,m=!0,y=b.data.path.elements,u=y.length;u--;){var B=y[u],C=0;b=B.data("cke-display-name")?B.data("cke-display-name"):B.data("cke-real-element-type")? +B.data("cke-real-element-type"):B.getName();(m=B.hasAttribute("contenteditable")?"true"==B.getAttribute("contenteditable"):m)||B.hasAttribute("contenteditable")||(C=1);for(var A=0;A<l.length;A++){var E=l[A](B,b);if(!1===E){C=1;break}b=E||b}C||(h.unshift(B),k.unshift(b))}h=h.length;for(l=0;l<h;l++)b=k[l],m=a.lang.elementspath.eleTitle.replace(/%1/,b),b=e.output({id:n+l,label:m,text:b,jsTitle:"javascript:void('"+b+"')",index:l,keyDownFn:v,clickFn:w}),g.unshift(b);f||(f=CKEDITOR.document.getById(c)); +k=f;k.setHtml(g.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');a.fire("elementsPathUpdate",{space:k})});a.on("readOnly",k);a.on("contentDomUnload",k);a.addCommand("elementsPathFocus",h.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var h={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},g="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(g+=' onkeypress\x3d"return false;"'); +CKEDITOR.env.gecko&&(g+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var e=CKEDITOR.addTemplate("pathItem",'\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"'+g+' hidefocus\x3d"true" draggable\x3d"false" ondragstart\x3d"return false;" onkeydown\x3d"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role\x3d"button" aria-label\x3d"{label}"\x3e{text}\x3c/a\x3e'); +CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(e){"bottom"==e.data.space&&b(a,e.data)})}})})();(function(){function b(a,c,b){b=a.config.forceEnterMode||b;if("wysiwyg"==a.mode){c||(c=a.activeEnterMode);var e=a.elementPath();e&&!e.isContextFor("p")&&(c=CKEDITOR.ENTER_BR,b=1);a.fire("saveSnapshot");c==CKEDITOR.ENTER_BR?l(a,c,null,b):k(a,c,null,b);a.fire("saveSnapshot")}}function h(a){a= +a.getSelection().getRanges(!0);for(var c=a.length-1;0<c;c--)a[c].deleteContents();return a[0]}function g(a){var c=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},!0);if(a.root.equals(c))return a;c=new CKEDITOR.dom.range(c);c.moveToRange(a);return c}CKEDITOR.plugins.add("enterkey",{init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){b(a)}});a.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1, +exec:function(a){b(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var e=CKEDITOR.dom.walker.whitespaces(),a=CKEDITOR.dom.walker.bookmark(),m,l,k,c;CKEDITOR.plugins.enterkey={enterBlock:function(b,d,k,m){function v(a){var c;if(a===CKEDITOR.ENTER_BR||-1===CKEDITOR.tools.indexOf(["td","th"],x.lastElement.getName())||1!==x.lastElement.getChildCount())return!1;a=x.lastElement.getChild(0).clone(!0);(c=a.getBogus())&&c.remove();return a.getText().length? +!1:!0}if(k=k||h(b)){k=g(k);var p=k.document,r=k.checkStartOfBlock(),q=k.checkEndOfBlock(),x=b.elementPath(k.startContainer),t=x.block,z=d==CKEDITOR.ENTER_DIV?"div":"p",y;if(t&&r&&q){r=t.getParent();if(r.is("li")&&1<r.getChildCount()){p=new CKEDITOR.dom.element("li");y=b.createRange();p.insertAfter(r);t.remove();y.setStart(p,0);b.getSelection().selectRanges([y]);return}if(t.is("li")||t.getParent().is("li")){t.is("li")||(t=t.getParent(),r=t.getParent());y=r.getParent();k=!t.hasPrevious();var u=!t.hasNext(); +m=b.getSelection();var z=m.createBookmarks(),B=t.getDirection(1),q=t.getAttribute("class"),C=t.getAttribute("style"),A=y.getDirection(1)!=B;b=b.enterMode!=CKEDITOR.ENTER_BR||A||C||q;if(y.is("li"))k||u?(k&&u&&r.remove(),t[u?"insertAfter":"insertBefore"](y)):t.breakParent(y);else{if(b)if(x.block.is("li")?(y=p.createElement(d==CKEDITOR.ENTER_P?"p":"div"),A&&y.setAttribute("dir",B),C&&y.setAttribute("style",C),q&&y.setAttribute("class",q),t.moveChildren(y)):y=x.block,k||u)y[k?"insertBefore":"insertAfter"](r); +else t.breakParent(r),y.insertAfter(r);else if(t.appendBogus(!0),k||u)for(;p=t[k?"getFirst":"getLast"]();)p[k?"insertBefore":"insertAfter"](r);else for(t.breakParent(r);p=t.getLast();)p.insertAfter(r);t.remove()}m.selectBookmarks(z);return}if(t&&t.getParent().is("blockquote")){t.breakParent(t.getParent());t.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||t.getPrevious().remove();t.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||t.getNext().remove();k.moveToElementEditStart(t);k.select(); +return}}else if(t&&t.is("pre")&&!q){l(b,d,k,m);return}if(C=k.splitBlock(z)){b=C.previousBlock;t=C.nextBlock;r=C.wasStartOfBlock;q=C.wasEndOfBlock;t?(u=t.getParent(),u.is("li")&&(t.breakParent(u),t.move(t.getNext(),1))):b&&(u=b.getParent())&&u.is("li")&&(b.breakParent(u),u=b.getNext(),k.moveToElementEditStart(u),b.move(b.getPrevious()));if(r||q)if(v(d))k.moveToElementEditStart(k.getTouchedStartNode());else{if(b){if(b.is("li")||!c.test(b.getName())&&!b.is("pre"))y=b.clone()}else t&&(y=t.clone());y? +m&&!y.is("li")&&y.renameNode(z):u&&u.is("li")?y=u:(y=p.createElement(z),b&&(B=b.getDirection())&&y.setAttribute("dir",B));if(p=C.elementPath)for(d=0,m=p.elements.length;d<m;d++){z=p.elements[d];if(z.equals(p.block)||z.equals(p.blockLimit))break;CKEDITOR.dtd.$removeEmpty[z.getName()]&&(z=z.clone(),y.moveChildren(z),y.append(z))}y.appendBogus();y.getParent()||k.insertNode(y);y.is("li")&&y.removeAttribute("value");!CKEDITOR.env.ie||!r||q&&b.getChildCount()||(k.moveToElementEditStart(q?b:y),k.select()); +k.moveToElementEditStart(r&&!q?t:y)}else t.is("li")&&(y=k.clone(),y.selectNodeContents(t),y=new CKEDITOR.dom.walker(y),y.evaluator=function(c){return!(a(c)||e(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in CKEDITOR.dtd.$inline&&!(c.getName()in CKEDITOR.dtd.$empty))},(u=y.next())&&u.type==CKEDITOR.NODE_ELEMENT&&u.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?p.createElement("br"):p.createText(" ")).insertBefore(u)),t&&k.moveToElementEditStart(t);k.select();k.scrollIntoView()}}},enterBr:function(a,b, +e,g){if(e=e||h(a)){var l=e.document,m=e.checkEndOfBlock(),r=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),q=r.block,x=q&&r.block.getName();g||"li"!=x?(!g&&m&&c.test(x)?(m=q.getDirection())?(l=l.createElement("div"),l.setAttribute("dir",m),l.insertAfter(q),e.setStart(l,0)):(l.createElement("br").insertAfter(q),CKEDITOR.env.gecko&&l.createText("").insertAfter(q),e.setStartAt(q.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==x&&CKEDITOR.env.ie&& +8>CKEDITOR.env.version?l.createText("\r"):l.createElement("br"),e.deleteContents(),e.insertNode(a),CKEDITOR.env.needsBrFiller?(l.createText("").insertAfter(a),m&&(q||r.blockLimit).appendBogus(),a.getNext().$.nodeValue="",e.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):e.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),e.collapse(!0),e.select(),e.scrollIntoView()):k(a,b,e,g)}}};m=CKEDITOR.plugins.enterkey;l=m.enterBr;k=m.enterBlock;c=/^h[1-6]$/})();(function(){function b(b,g){var e={},a=[],m={nbsp:" ", +shy:"",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(c,b){var h=g?"\x26"+b+";":m[b];e[h]=g?m[b]:"\x26"+b+";";a.push(h);return""});b=b.replace(/,$/,"");if(!g&&b){b=b.split(",");var l=document.createElement("div"),k;l.innerHTML="\x26"+b.join(";\x26")+";";k=l.innerHTML;l=null;for(l=0;l<k.length;l++){var c=k.charAt(l);e[c]="\x26"+b[l]+";";a.push(c)}}e.regex=a.join(g?"|":"");return e}CKEDITOR.plugins.add("entities",{afterInit:function(h){function g(a){return c[a]} +function e(c){return"force"!=a.entities_processNumerical&&l[c]?l[c]:"\x26#"+c.charCodeAt(0)+";"}var a=h.config;if(h=(h=h.dataProcessor)&&h.htmlFilter){var m=[];!1!==a.basicEntities&&m.push("nbsp,gt,lt,amp");a.entities&&(m.length&&m.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"), a.entities_latin&&m.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),a.entities_greek&&m.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"), -a.entities_additional&&m.push(a.entities_additional));var k=b(m.join(",")),l=k.regex?"["+k.regex+"]":"a^";delete k.regex;a.entities&&a.entities_processNumerical&&(l="[^ -~]|"+l);var l=new RegExp(l,"g"),d=b("nbsp,gt,lt,amp,shy",!0),e=new RegExp(d.regex,"g");h.addRules({text:function(a){return a.replace(e,g).replace(l,f)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0; -CKEDITOR.config.entities_additional="#39";CKEDITOR.plugins.add("popup");CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(b,h,g,f){h=h||"80%";g=g||"70%";"string"==typeof h&&1<h.length&&"%"==h.substr(h.length-1,1)&&(h=parseInt(window.screen.width*parseInt(h,10)/100,10));"string"==typeof g&&1<g.length&&"%"==g.substr(g.length-1,1)&&(g=parseInt(window.screen.height*parseInt(g,10)/100,10));640>h&&(h=640);420>g&&(g=420);var a=parseInt((window.screen.height-g)/2,10),m=parseInt((window.screen.width- -h)/2,10);f=(f||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+h+",height\x3d"+g+",top\x3d"+a+",left\x3d"+m;var k=window.open("",null,f,!0);if(!k)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(k.moveTo(m,a),k.resizeTo(h,g)),k.focus(),k.location.href=b}catch(l){window.open(b,null,f,!0)}return!0}});"use strict";(function(){function b(a){this.editor=a;this.loaders= -[]}function h(a,b,f){var h=a.config.fileTools_defaultFileName;this.editor=a;this.lang=a.lang;"string"===typeof b?(this.data=b,this.file=g(this.data),this.loaded=this.total=this.file.size):(this.data=null,this.file=b,this.total=this.file.size,this.loaded=0);f?this.fileName=f:this.file.name?this.fileName=this.file.name:(a=this.file.type.split("/"),h&&(a[0]=h),this.fileName=a.join("."));this.uploaded=0;this.responseData=this.uploadTotal=null;this.status="created";this.abort=function(){this.changeStatus("abort")}} -function g(a){var b=a.match(f)[1];a=a.replace(f,"");a=atob(a);var g=[],h,d,e,c;for(h=0;h<a.length;h+=512){d=a.slice(h,h+512);e=Array(d.length);for(c=0;c<d.length;c++)e[c]=d.charCodeAt(c);d=new Uint8Array(e);g.push(d)}return new Blob(g,{type:b})}CKEDITOR.plugins.add("filetools",{beforeInit:function(a){a.uploadRepository=new b(a);a.on("fileUploadRequest",function(a){var b=a.data.fileLoader;b.xhr.open("POST",b.uploadUrl,!0);a.data.requestData.upload={file:b.file,name:b.fileName}},null,null,5);a.on("fileUploadRequest", -function(b){var f=b.data.fileLoader,g=new FormData;b=b.data.requestData;var d=a.config.fileTools_requestHeaders,e,c;for(c in b){var h=b[c];"object"===typeof h&&h.file?g.append(c,h.file,h.name):g.append(c,h)}g.append("ckCsrfToken",CKEDITOR.tools.getCsrfToken());if(d)for(e in d)f.xhr.setRequestHeader(e,d[e]);f.xhr.send(g)},null,null,999);a.on("fileUploadResponse",function(a){var b=a.data.fileLoader,f=b.xhr,d=a.data;try{var e=JSON.parse(f.responseText);e.error&&e.error.message&&(d.message=e.error.message); -if(e.uploaded)for(var c in e)d[c]=e[c];else a.cancel()}catch(g){d.message=b.lang.filetools.responseError,CKEDITOR.warn("filetools-response-error",{responseText:f.responseText}),a.cancel()}},null,null,999)}});b.prototype={create:function(a,b,f){f=f||h;var g=this.loaders.length;a=new f(this.editor,a,b);a.id=g;this.loaders[g]=a;this.fire("instanceCreated",a);return a},isFinished:function(){for(var a=0;a<this.loaders.length;++a)if(!this.loaders[a].isFinished())return!1;return!0}};h.prototype={loadAndUpload:function(a, -b){var f=this;this.once("loaded",function(g){g.cancel();f.once("update",function(a){a.cancel()},null,null,0);f.upload(a,b)},null,null,0);this.load()},load:function(){var a=this,b=this.reader=new FileReader;a.changeStatus("loading");this.abort=function(){a.reader.abort()};b.onabort=function(){a.changeStatus("abort")};b.onerror=function(){a.message=a.lang.filetools.loadError;a.changeStatus("error")};b.onprogress=function(b){a.loaded=b.loaded;a.update()};b.onload=function(){a.loaded=a.total;a.data=b.result; -a.changeStatus("loaded")};b.readAsDataURL(this.file)},upload:function(a,b){var f=b||{};a?(this.uploadUrl=a,this.xhr=new XMLHttpRequest,this.attachRequestListeners(),this.editor.fire("fileUploadRequest",{fileLoader:this,requestData:f})&&this.changeStatus("uploading")):(this.message=this.lang.filetools.noUrlError,this.changeStatus("error"))},attachRequestListeners:function(){function a(){"error"!=f.status&&(f.message=f.lang.filetools.networkError,f.changeStatus("error"))}function b(){"abort"!=f.status&& -f.changeStatus("abort")}var f=this,g=this.xhr;f.abort=function(){g.abort();b()};g.onerror=a;g.onabort=b;g.upload?(g.upload.onprogress=function(a){a.lengthComputable&&(f.uploadTotal||(f.uploadTotal=a.total),f.uploaded=a.loaded,f.update())},g.upload.onerror=a,g.upload.onabort=b):(f.uploadTotal=f.total,f.update());g.onload=function(){f.update();if("abort"!=f.status)if(f.uploaded=f.uploadTotal,200>g.status||299<g.status)f.message=f.lang.filetools["httpError"+g.status],f.message||(f.message=f.lang.filetools.httpError.replace("%1", -g.status)),f.changeStatus("error");else{for(var a={fileLoader:f},b=["message","fileName","url"],c=f.editor.fire("fileUploadResponse",a),h=0;h<b.length;h++){var m=b[h];"string"===typeof a[m]&&(f[m]=a[m])}f.responseData=a;delete f.responseData.fileLoader;!1===c?f.changeStatus("error"):f.changeStatus("uploaded")}}},changeStatus:function(a){this.status=a;if("error"==a||"abort"==a||"loaded"==a||"uploaded"==a)this.abort=function(){};this.fire(a);this.update()},update:function(){this.fire("update")},isFinished:function(){return!!this.status.match(/^(?:loaded|uploaded|error|abort)$/)}}; -CKEDITOR.event.implementOn(b.prototype);CKEDITOR.event.implementOn(h.prototype);var f=/^data:(\S*?);base64,/;CKEDITOR.fileTools||(CKEDITOR.fileTools={});CKEDITOR.tools.extend(CKEDITOR.fileTools,{uploadRepository:b,fileLoader:h,getUploadUrl:function(a,b){var f=CKEDITOR.tools.capitalize;return b&&a[b+"UploadUrl"]?a[b+"UploadUrl"]:a.uploadUrl?a.uploadUrl:b&&a["filebrowser"+f(b,1)+"UploadUrl"]?a["filebrowser"+f(b,1)+"UploadUrl"]+"\x26responseType\x3djson":a.filebrowserUploadUrl?a.filebrowserUploadUrl+ -"\x26responseType\x3djson":null},isTypeSupported:function(a,b){return!!a.type.match(b)},isFileUploadSupported:"function"===typeof FileReader&&"function"===typeof(new FileReader).readAsDataURL&&"function"===typeof FormData&&"function"===typeof(new FormData).append&&"function"===typeof XMLHttpRequest&&"function"===typeof Blob})})();(function(){function b(a,b){var d=[];if(b)for(var c in b)d.push(c+"\x3d"+encodeURIComponent(b[c]));else return a;return a+(-1!=a.indexOf("?")?"\x26":"?")+d.join("\x26")} -function h(a){return!a.match(/command=QuickUpload/)||a.match(/(\?|&)responseType=json/)?a:b(a,{responseType:"json"})}function g(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function f(){var a=this.getDialog(),d=a.getParentEditor();d._.filebrowserSe=this;var c=d.config["filebrowser"+g(a.getName())+"WindowWidth"]||d.config.filebrowserWindowWidth||"80%",a=d.config["filebrowser"+g(a.getName())+"WindowHeight"]||d.config.filebrowserWindowHeight||"70%",e=this.filebrowser.params||{};e.CKEditor=d.name; -e.CKEditorFuncNum=d._.filebrowserFn;e.langCode||(e.langCode=d.langCode);e=b(this.filebrowser.url,e);d.popup(e,c,a,d.config.filebrowserWindowFeatures||d.config.fileBrowserWindowFeatures)}function a(a){var b=new CKEDITOR.dom.element(a.$.form);b&&((a=b.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),b.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken()))}function m(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe= -this;return a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value&&a.getContentElement(this["for"][0],this["for"][1]).getAction()?!0:!1}function k(a,d,c){var e=c.params||{};e.CKEditor=a.name;e.CKEditorFuncNum=a._.filebrowserFn;e.langCode||(e.langCode=a.langCode);d.action=b(c.url,e);d.filebrowser=c}function l(b,e,z,r){if(r&&r.length)for(var p,q=r.length;q--;)if(p=r[q],"hbox"!=p.type&&"vbox"!=p.type&&"fieldset"!=p.type||l(b,e,z,p.children),p.filebrowser)if("string"==typeof p.filebrowser&& -(p.filebrowser={action:"fileButton"==p.type?"QuickUpload":"Browse",target:p.filebrowser}),"Browse"==p.filebrowser.action){var u=p.filebrowser.url;void 0===u&&(u=b.config["filebrowser"+g(e)+"BrowseUrl"],void 0===u&&(u=b.config.filebrowserBrowseUrl));u&&(p.onClick=f,p.filebrowser.url=u,p.hidden=!1)}else if("QuickUpload"==p.filebrowser.action&&p["for"]&&(u=p.filebrowser.url,void 0===u&&(u=b.config["filebrowser"+g(e)+"UploadUrl"],void 0===u&&(u=b.config.filebrowserUploadUrl)),u)){var t=p.onClick;p.onClick= -function(e){var f=e.sender,g=f.getDialog().getContentElement(this["for"][0],this["for"][1]).getInputElement(),k=CKEDITOR.fileTools&&CKEDITOR.fileTools.isFileUploadSupported;if(t&&!1===t.call(f,e))return!1;if(m.call(f,e)){if("form"!==b.config.filebrowserUploadMethod&&k)return e=b.uploadRepository.create(g.$.files[0]),e.on("uploaded",function(a){var b=a.sender.responseData;c.call(a.sender.editor,b.url,b.message)}),e.on("error",d.bind(this)),e.on("abort",d.bind(this)),e.loadAndUpload(h(u)),"xhr";a(g); -return!0}return!1};p.filebrowser.url=u;p.hidden=!1;k(b,z.getContents(p["for"][0]).get(p["for"][1]),p.filebrowser)}}function d(a){var b={};try{b=JSON.parse(a.sender.xhr.response)||{}}catch(d){}this.enable();alert(b.error?b.error.message:a.sender.message)}function e(a,b,d){if(-1!==d.indexOf(";")){d=d.split(";");for(var c=0;c<d.length;c++)if(e(a,b,d[c]))return!0;return!1}return(a=a.getContents(b).get(d).filebrowser)&&a.url}function c(a,b){var d=this._.filebrowserSe.getDialog(),c=this._.filebrowserSe["for"], -e=this._.filebrowserSe.filebrowser.onSelect;c&&d.getContentElement(c[0],c[1]).reset();if("function"!=typeof b||!1!==b.call(this._.filebrowserSe))if(!e||!1!==e.call(this._.filebrowserSe,a,b))if("string"==typeof b&&b&&alert(b),a&&(c=this._.filebrowserSe,d=c.getDialog(),c=c.filebrowser.target||null))if(c=c.split(":"),e=d.getContentElement(c[0],c[1]))e.setValue(a),d.selectPage(c[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup,filetools",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(c, -a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var b=a.data.definition,d,c=0;c<b.contents.length;++c)if(d=b.contents[c])l(a.editor,a.data.name,b,d.elements),d.hidden&&d.filebrowser&&(d.hidden=!e(b,d.id,d.filebrowser))})})();(function(){function b(b){var a=b.config,m=b.fire("uiSpace",{space:"top",html:""}).html,k=function(){function c(a,b,e){d.setStyle(b,g(e));d.setStyle("position", -a)}function e(a){var b=m.getDocumentPosition();switch(a){case "top":c("absolute","top",b.y-t-x);break;case "pin":c("fixed","top",D);break;case "bottom":c("absolute","top",b.y+(q.height||q.bottom-q.top)+x)}l=a}var l,m,p,q,u,t,y,v=a.floatSpaceDockedOffsetX||0,x=a.floatSpaceDockedOffsetY||0,B=a.floatSpacePinnedOffsetX||0,D=a.floatSpacePinnedOffsetY||0;return function(c){if(m=b.editable()){var n=c&&"focus"==c.name;n&&d.show();b.fire("floatingSpaceLayout",{show:n});d.removeStyle("left");d.removeStyle("right"); -p=d.getClientRect();q=m.getClientRect();u=h.getViewPaneSize();t=p.height;y="pageXOffset"in h.$?h.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;l?(t+x<=q.top?e("top"):t+x>u.height-q.bottom?e("pin"):e("bottom"),c=u.width/2,c=a.floatSpacePreferRight?"right":0<q.left&&q.right<u.width&&q.width>p.width?"rtl"==a.contentsLangDirection?"right":"left":c-q.left>q.right-c?"left":"right",p.width>u.width?(c="left",n=0):(n="left"==c?0<q.left?q.left:0:q.right<u.width?u.width-q.right:0,n+p.width>u.width&& -(c="left"==c?"right":"left",n=0)),d.setStyle(c,g(("pin"==l?B:v)+n+("pin"==l?0:"left"==c?y:-y)))):(l="pin",e("pin"),k(c))}}}();if(m){var l=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e': -" ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),d=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(l.output({content:m,id:b.id,langDir:b.lang.dir,langCode:b.langCode,name:b.name,style:"display:none;z-index:"+(a.baseFloatZIndex-1),topId:b.ui.spaceId("top"),voiceLabel:b.title}))),e=CKEDITOR.tools.eventsBuffer(500,k),c=CKEDITOR.tools.eventsBuffer(100,k);d.unselectable();d.on("mousedown", -function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});b.on("focus",function(a){k(a);b.on("change",e.input);h.on("scroll",c.input);h.on("resize",c.input)});b.on("blur",function(){d.hide();b.removeListener("change",e.input);h.removeListener("scroll",c.input);h.removeListener("resize",c.input)});b.on("destroy",function(){h.removeListener("scroll",c.input);h.removeListener("resize",c.input);d.clearCustomData();d.remove()});b.focusManager.hasFocus&&d.show();b.focusManager.add(d, -1)}}var h=CKEDITOR.document.getWindow(),g=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(f){f.on("loaded",function(){b(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var b=CKEDITOR.addTemplate("panel-list",'\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'),h=CKEDITOR.addTemplate("panel-list-item",'\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" draggable\x3d"false" ondragstart\x3d"return false;" href\x3d"javascript:void(\'{val}\')" onclick\x3d"{onclick}CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'), -g=CKEDITOR.addTemplate("panel-list-group",'\x3ch1 id\x3d"{id}" draggable\x3d"false" ondragstart\x3d"return false;" class\x3d"cke_panel_grouptitle" role\x3d"presentation" \x3e{label}\x3c/h1\x3e'),f=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){b=b||{};var f=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&& -(f["aria-multiselectable"]=!0);!f.role&&(f.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",f.role);f=this.keys;f[40]="next";f[9]="next";f[38]="prev";f[CKEDITOR.SHIFT+9]="prev";f[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(f[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=b.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a); -delete this._.started}},getClick:function(){this._.click||(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,g){var l=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=l;var d;d=CKEDITOR.tools.htmlEncodeAttr(a).replace(f,"\\'");a={id:l,val:d,onclick:CKEDITOR.env.ie?'return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26': +a.entities_additional&&m.push(a.entities_additional));var l=b(m.join(",")),k=l.regex?"["+l.regex+"]":"a^";delete l.regex;a.entities&&a.entities_processNumerical&&(k="[^ -~]|"+k);var k=new RegExp(k,"g"),c=b("nbsp,gt,lt,amp,shy",!0),f=new RegExp(c.regex,"g");h.addRules({text:function(a){return a.replace(f,g).replace(k,e)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0; +CKEDITOR.config.entities_additional="#39";CKEDITOR.plugins.add("popup");CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(b,h,g,e){h=h||"80%";g=g||"70%";"string"==typeof h&&1<h.length&&"%"==h.substr(h.length-1,1)&&(h=parseInt(window.screen.width*parseInt(h,10)/100,10));"string"==typeof g&&1<g.length&&"%"==g.substr(g.length-1,1)&&(g=parseInt(window.screen.height*parseInt(g,10)/100,10));640>h&&(h=640);420>g&&(g=420);var a=parseInt((window.screen.height-g)/2,10),m=parseInt((window.screen.width- +h)/2,10);e=(e||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+h+",height\x3d"+g+",top\x3d"+a+",left\x3d"+m;var l=window.open("",null,e,!0);if(!l)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(l.moveTo(m,a),l.resizeTo(h,g)),l.focus(),l.location.href=b}catch(k){window.open(b,null,e,!0)}return!0}});"use strict";(function(){function b(a){this.editor=a;this.loaders= +[]}function h(a,b,e){var h=a.config.fileTools_defaultFileName;this.editor=a;this.lang=a.lang;"string"===typeof b?(this.data=b,this.file=g(this.data),this.loaded=this.total=this.file.size):(this.data=null,this.file=b,this.total=this.file.size,this.loaded=0);e?this.fileName=e:this.file.name?this.fileName=this.file.name:(a=this.file.type.split("/"),h&&(a[0]=h),this.fileName=a.join("."));this.uploaded=0;this.responseData=this.uploadTotal=null;this.status="created";this.abort=function(){this.changeStatus("abort")}} +function g(a){var b=a.match(e)[1];a=a.replace(e,"");a=atob(a);var g=[],h,c,f,d;for(h=0;h<a.length;h+=512){c=a.slice(h,h+512);f=Array(c.length);for(d=0;d<c.length;d++)f[d]=c.charCodeAt(d);c=new Uint8Array(f);g.push(c)}return new Blob(g,{type:b})}CKEDITOR.plugins.add("filetools",{beforeInit:function(a){a.uploadRepository=new b(a);a.on("fileUploadRequest",function(a){var b=a.data.fileLoader;b.xhr.open("POST",b.uploadUrl,!0);a.data.requestData.upload={file:b.file,name:b.fileName}},null,null,5);a.on("fileUploadRequest", +function(b){var e=b.data.fileLoader,g=new FormData;b=b.data.requestData;var c=a.config.fileTools_requestHeaders,f,d;for(d in b){var h=b[d];"object"===typeof h&&h.file?g.append(d,h.file,h.name):g.append(d,h)}g.append("ckCsrfToken",CKEDITOR.tools.getCsrfToken());if(c)for(f in c)e.xhr.setRequestHeader(f,c[f]);e.xhr.send(g)},null,null,999);a.on("fileUploadResponse",function(a){var b=a.data.fileLoader,e=b.xhr,c=a.data;try{var f=JSON.parse(e.responseText);f.error&&f.error.message&&(c.message=f.error.message); +if(f.uploaded)for(var d in f)c[d]=f[d];else a.cancel()}catch(g){c.message=b.lang.filetools.responseError,CKEDITOR.warn("filetools-response-error",{responseText:e.responseText}),a.cancel()}},null,null,999)}});b.prototype={create:function(a,b,e){e=e||h;var g=this.loaders.length;a=new e(this.editor,a,b);a.id=g;this.loaders[g]=a;this.fire("instanceCreated",a);return a},isFinished:function(){for(var a=0;a<this.loaders.length;++a)if(!this.loaders[a].isFinished())return!1;return!0}};h.prototype={loadAndUpload:function(a, +b){var e=this;this.once("loaded",function(g){g.cancel();e.once("update",function(a){a.cancel()},null,null,0);e.upload(a,b)},null,null,0);this.load()},load:function(){var a=this,b=this.reader=new FileReader;a.changeStatus("loading");this.abort=function(){a.reader.abort()};b.onabort=function(){a.changeStatus("abort")};b.onerror=function(){a.message=a.lang.filetools.loadError;a.changeStatus("error")};b.onprogress=function(b){a.loaded=b.loaded;a.update()};b.onload=function(){a.loaded=a.total;a.data=b.result; +a.changeStatus("loaded")};b.readAsDataURL(this.file)},upload:function(a,b){var e=b||{};a?(this.uploadUrl=a,this.xhr=new XMLHttpRequest,this.attachRequestListeners(),this.editor.fire("fileUploadRequest",{fileLoader:this,requestData:e})&&this.changeStatus("uploading")):(this.message=this.lang.filetools.noUrlError,this.changeStatus("error"))},attachRequestListeners:function(){function a(){"error"!=e.status&&(e.message=e.lang.filetools.networkError,e.changeStatus("error"))}function b(){"abort"!=e.status&& +e.changeStatus("abort")}var e=this,g=this.xhr;e.abort=function(){g.abort();b()};g.onerror=a;g.onabort=b;g.upload?(g.upload.onprogress=function(a){a.lengthComputable&&(e.uploadTotal||(e.uploadTotal=a.total),e.uploaded=a.loaded,e.update())},g.upload.onerror=a,g.upload.onabort=b):(e.uploadTotal=e.total,e.update());g.onload=function(){e.update();if("abort"!=e.status)if(e.uploaded=e.uploadTotal,200>g.status||299<g.status)e.message=e.lang.filetools["httpError"+g.status],e.message||(e.message=e.lang.filetools.httpError.replace("%1", +g.status)),e.changeStatus("error");else{for(var a={fileLoader:e},b=["message","fileName","url"],d=e.editor.fire("fileUploadResponse",a),h=0;h<b.length;h++){var m=b[h];"string"===typeof a[m]&&(e[m]=a[m])}e.responseData=a;delete e.responseData.fileLoader;!1===d?e.changeStatus("error"):e.changeStatus("uploaded")}}},changeStatus:function(a){this.status=a;if("error"==a||"abort"==a||"loaded"==a||"uploaded"==a)this.abort=function(){};this.fire(a);this.update()},update:function(){this.fire("update")},isFinished:function(){return!!this.status.match(/^(?:loaded|uploaded|error|abort)$/)}}; +CKEDITOR.event.implementOn(b.prototype);CKEDITOR.event.implementOn(h.prototype);var e=/^data:(\S*?);base64,/;CKEDITOR.fileTools||(CKEDITOR.fileTools={});CKEDITOR.tools.extend(CKEDITOR.fileTools,{uploadRepository:b,fileLoader:h,getUploadUrl:function(a,b){var e=CKEDITOR.tools.capitalize;return b&&a[b+"UploadUrl"]?a[b+"UploadUrl"]:a.uploadUrl?a.uploadUrl:b&&a["filebrowser"+e(b,1)+"UploadUrl"]?a["filebrowser"+e(b,1)+"UploadUrl"]+"\x26responseType\x3djson":a.filebrowserUploadUrl?a.filebrowserUploadUrl+ +"\x26responseType\x3djson":null},isTypeSupported:function(a,b){return!!a.type.match(b)},isFileUploadSupported:"function"===typeof FileReader&&"function"===typeof(new FileReader).readAsDataURL&&"function"===typeof FormData&&"function"===typeof(new FormData).append&&"function"===typeof XMLHttpRequest&&"function"===typeof Blob})})();(function(){function b(a,c){var b=[];if(c)for(var d in c)b.push(d+"\x3d"+encodeURIComponent(c[d]));else return a;return a+(-1!=a.indexOf("?")?"\x26":"?")+b.join("\x26")} +function h(a){return!a.match(/command=QuickUpload/)||a.match(/(\?|&)responseType=json/)?a:b(a,{responseType:"json"})}function g(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function e(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+g(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+g(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%",f=this.filebrowser.params||{};f.CKEditor=c.name; +f.CKEditorFuncNum=c._.filebrowserFn;f.langCode||(f.langCode=c.langCode);f=b(this.filebrowser.url,f);c.popup(f,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function a(a){var c=new CKEDITOR.dom.element(a.$.form);c&&((a=c.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),c.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken()))}function m(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe= +this;return a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value&&a.getContentElement(this["for"][0],this["for"][1]).getAction()?!0:!1}function l(a,c,d){var f=d.params||{};f.CKEditor=a.name;f.CKEditorFuncNum=a._.filebrowserFn;f.langCode||(f.langCode=a.langCode);c.action=b(d.url,f);c.filebrowser=d}function k(b,f,v,p){if(p&&p.length)for(var r,q=p.length;q--;)if(r=p[q],"hbox"!=r.type&&"vbox"!=r.type&&"fieldset"!=r.type||k(b,f,v,r.children),r.filebrowser)if("string"==typeof r.filebrowser&& +(r.filebrowser={action:"fileButton"==r.type?"QuickUpload":"Browse",target:r.filebrowser}),"Browse"==r.filebrowser.action){var x=r.filebrowser.url;void 0===x&&(x=b.config["filebrowser"+g(f)+"BrowseUrl"],void 0===x&&(x=b.config.filebrowserBrowseUrl));x&&(r.onClick=e,r.filebrowser.url=x,r.hidden=!1)}else if("QuickUpload"==r.filebrowser.action&&r["for"]&&(x=r.filebrowser.url,void 0===x&&(x=b.config["filebrowser"+g(f)+"UploadUrl"],void 0===x&&(x=b.config.filebrowserUploadUrl)),x)){var t=r.onClick;r.onClick= +function(f){var e=f.sender,g=e.getDialog().getContentElement(this["for"][0],this["for"][1]).getInputElement(),k=CKEDITOR.fileTools&&CKEDITOR.fileTools.isFileUploadSupported;if(t&&!1===t.call(e,f))return!1;if(m.call(e,f)){if("form"!==b.config.filebrowserUploadMethod&&k)return f=b.uploadRepository.create(g.$.files[0]),f.on("uploaded",function(a){var c=a.sender.responseData;d.call(a.sender.editor,c.url,c.message)}),f.on("error",c.bind(this)),f.on("abort",c.bind(this)),f.loadAndUpload(h(x)),"xhr";a(g); +return!0}return!1};r.filebrowser.url=x;r.hidden=!1;l(b,v.getContents(r["for"][0]).get(r["for"][1]),r.filebrowser)}}function c(a){var c={};try{c=JSON.parse(a.sender.xhr.response)||{}}catch(b){}this.enable();alert(c.error?c.error.message:a.sender.message)}function f(a,c,b){if(-1!==b.indexOf(";")){b=b.split(";");for(var d=0;d<b.length;d++)if(f(a,c,b[d]))return!0;return!1}return(a=a.getContents(c).get(b).filebrowser)&&a.url}function d(a,c){var b=this._.filebrowserSe.getDialog(),d=this._.filebrowserSe["for"], +f=this._.filebrowserSe.filebrowser.onSelect;d&&b.getContentElement(d[0],d[1]).reset();if("function"!=typeof c||!1!==c.call(this._.filebrowserSe))if(!f||!1!==f.call(this._.filebrowserSe,a,c))if("string"==typeof c&&c&&alert(c),a&&(d=this._.filebrowserSe,b=d.getDialog(),d=d.filebrowser.target||null))if(d=d.split(":"),f=b.getContentElement(d[0],d[1]))f.setValue(a),b.selectPage(d[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup,filetools",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(d, +a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var c=a.data.definition,b,d=0;d<c.contents.length;++d)if(b=c.contents[d])k(a.editor,a.data.name,c,b.elements),b.hidden&&b.filebrowser&&(b.hidden=!f(c,b.id,b.filebrowser))})})();(function(){function b(b){var a=b.config,m=b.fire("uiSpace",{space:"top",html:""}).html,l=function(){function d(a,b,f){c.setStyle(b,g(f));c.setStyle("position", +a)}function f(a){var c=m.getDocumentPosition();switch(a){case "top":d("absolute","top",c.y-t-u);break;case "pin":d("fixed","top",C);break;case "bottom":d("absolute","top",c.y+(q.height||q.bottom-q.top)+u)}k=a}var k,m,r,q,x,t,z,y=a.floatSpaceDockedOffsetX||0,u=a.floatSpaceDockedOffsetY||0,B=a.floatSpacePinnedOffsetX||0,C=a.floatSpacePinnedOffsetY||0;return function(d){if(m=b.editable()){var n=d&&"focus"==d.name;n&&c.show();b.fire("floatingSpaceLayout",{show:n});c.removeStyle("left");c.removeStyle("right"); +r=c.getClientRect();q=m.getClientRect();x=h.getViewPaneSize();t=r.height;z="pageXOffset"in h.$?h.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;k?(t+u<=q.top?f("top"):t+u>x.height-q.bottom?f("pin"):f("bottom"),d=x.width/2,d=a.floatSpacePreferRight?"right":0<q.left&&q.right<x.width&&q.width>r.width?"rtl"==a.contentsLangDirection?"right":"left":d-q.left>q.right-d?"left":"right",r.width>x.width?(d="left",n=0):(n="left"==d?0<q.left?q.left:0:q.right<x.width?x.width-q.right:0,n+r.width>x.width&& +(d="left"==d?"right":"left",n=0)),c.setStyle(d,g(("pin"==k?B:y)+n+("pin"==k?0:"left"==d?z:-z)))):(k="pin",f("pin"),l(d))}}}();if(m){var k=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e': +" ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),c=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(k.output({content:m,id:b.id,langDir:b.lang.dir,langCode:b.langCode,name:b.name,style:"display:none;z-index:"+(a.baseFloatZIndex-1),topId:b.ui.spaceId("top"),voiceLabel:b.title}))),f=CKEDITOR.tools.eventsBuffer(500,l),d=CKEDITOR.tools.eventsBuffer(100,l);c.unselectable();c.on("mousedown", +function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});b.on("focus",function(a){l(a);b.on("change",f.input);h.on("scroll",d.input);h.on("resize",d.input)});b.on("blur",function(){c.hide();b.removeListener("change",f.input);h.removeListener("scroll",d.input);h.removeListener("resize",d.input)});b.on("destroy",function(){h.removeListener("scroll",d.input);h.removeListener("resize",d.input);c.clearCustomData();c.remove()});b.focusManager.hasFocus&&c.show();b.focusManager.add(c, +1)}}var h=CKEDITOR.document.getWindow(),g=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(e){e.on("loaded",function(){b(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var b=CKEDITOR.addTemplate("panel-list",'\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'),h=CKEDITOR.addTemplate("panel-list-item",'\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" draggable\x3d"false" ondragstart\x3d"return false;" href\x3d"javascript:void(\'{val}\')" onclick\x3d"{onclick}CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'), +g=CKEDITOR.addTemplate("panel-list-group",'\x3ch1 id\x3d"{id}" draggable\x3d"false" ondragstart\x3d"return false;" class\x3d"cke_panel_grouptitle" role\x3d"presentation" \x3e{label}\x3c/h1\x3e'),e=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){b=b||{};var e=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&& +(e["aria-multiselectable"]=!0);!e.role&&(e.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",e.role);e=this.keys;e[40]="next";e[9]="next";e[38]="prev";e[CKEDITOR.SHIFT+9]="prev";e[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(e[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=b.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a); +delete this._.started}},getClick:function(){this._.click||(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,g){var k=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=k;var c;c=CKEDITOR.tools.htmlEncodeAttr(a).replace(e,"\\'");a={id:k,val:c,onclick:CKEDITOR.env.ie?'return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26': "",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(g||a),text:b||a};this._.pendingList.push(h.output(a))},startGroup:function(a){this._.close();var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(g.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a= -this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display","none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=this._.groups,f=this.element.getDocument(),g;for(g in a)f.getById(a[g]).setStyle("display","");for(var d in b)a=f.getById(b[d]),g=a.getNext(),a.setStyle("display",""),g&&"ul"==g.getName()&&g.setStyle("display", -"")},mark:function(a){this.multiSelect||this.unmarkAll();a=this._.items[a];var b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)},markFirstDisplayed:function(){var a=this;this._.markFirstDisplayed(function(){a.multiSelect||a.unmarkAll()})},unmark:function(a){var b=this.element.getDocument();a=this._.items[a];var f=b.getById(a);f.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected"); -this.onUnmark&&this.onUnmark(f)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),f;for(f in a){var g=a[f];b.getById(g).removeClass("cke_selected");b.getById(g+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),f,g=-1;if(a)for(f=this.element.getDocument().getById(this._.items[a]).getFirst();a= -b.getItem(++g);){if(a.equals(f)){this._.focusIndex=g;break}}else this.element.focus();f&&setTimeout(function(){f.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}});(function(){var b='\x3cspan id\x3d"{id}" class\x3d"cke_combo cke_combo__{name} {cls}" role\x3d"presentation"\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_combo_label"\x3e{label}\x3c/span\x3e\x3ca class\x3d"cke_combo_button" title\x3d"{title}" tabindex\x3d"-1"'+ +this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display","none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=this._.groups,e=this.element.getDocument(),g;for(g in a)e.getById(a[g]).setStyle("display","");for(var c in b)a=e.getById(b[c]),g=a.getNext(),a.setStyle("display",""),g&&"ul"==g.getName()&&g.setStyle("display", +"")},mark:function(a){this.multiSelect||this.unmarkAll();a=this._.items[a];var b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)},markFirstDisplayed:function(){var a=this;this._.markFirstDisplayed(function(){a.multiSelect||a.unmarkAll()})},unmark:function(a){var b=this.element.getDocument();a=this._.items[a];var e=b.getById(a);e.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected"); +this.onUnmark&&this.onUnmark(e)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),e;for(e in a){var g=a[e];b.getById(g).removeClass("cke_selected");b.getById(g+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),e,g=-1;if(a)for(e=this.element.getDocument().getById(this._.items[a]).getFirst();a= +b.getItem(++g);){if(a.equals(e)){this._.focusIndex=g;break}}else this.element.focus();e&&setTimeout(function(){e.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}});(function(){var b='\x3cspan id\x3d"{id}" class\x3d"cke_combo cke_combo__{name} {cls}" role\x3d"presentation"\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_combo_label"\x3e{label}\x3c/span\x3e\x3ca class\x3d"cke_combo_button" title\x3d"{title}" tabindex\x3d"-1"'+ (CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-haspopup\x3d"listbox"',h="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(b+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(b+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');CKEDITOR.env.ie&&(h='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var b=b+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"'+ h+'CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan id\x3d"{id}_text" class\x3d"cke_combo_text cke_combo_inlinelabel"\x3e{label}\x3c/span\x3e\x3cspan class\x3d"cke_combo_open"\x3e\x3cspan class\x3d"cke_combo_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":CKEDITOR.env.air?"\x26nbsp;":"")+"\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e"),g=CKEDITOR.addTemplate("combo",b);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(b){CKEDITOR.tools.extend(this, b,{canGroup:!1,title:b.label,modes:{wysiwyg:1},editorFocus:1});b=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=b.parent&&b.parent.getDocument()||CKEDITOR.document;b.className="cke_combopanel";b.block={multiSelect:b.multiSelect,attributes:b.attributes};b.toolbarRelated=!0;this._={panelDefinition:b,items:{},listeners:[]}},proto:{renderHtml:function(b){var a=[];this.render(b,a);return a.join("")},render:function(b,a){function h(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var a= -this.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;b.readOnly&&!this.readOnly&&(a=CKEDITOR.TRISTATE_DISABLED);this.setState(a);this.setValue("");a!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var k=CKEDITOR.env,l="cke_"+this.id,d=CKEDITOR.tools.addFunction(function(a){z&&(b.unlockSelection(1),z=0);c.execute(a)},this),e=this,c={id:l,combo:this,focus:function(){CKEDITOR.document.getById(l).getChild(1).focus()},execute:function(a){var d=e._;if(d.state!=CKEDITOR.TRISTATE_DISABLED)if(e.createPanel(b), -d.on)d.panel.hide();else{e.commit();var c=e.getValue();c?d.list.mark(c):d.list.unmarkAll();d.panel.showBlock(e.id,new CKEDITOR.dom.element(a),4)}},clickFn:d};this._.listeners.push(b.on("activeFilterChange",h,this));this._.listeners.push(b.on("mode",h,this));this._.listeners.push(b.on("selectionChange",h,this));!this.readOnly&&this._.listeners.push(b.on("readOnly",h,this));var n=CKEDITOR.tools.addFunction(function(a,b){a=new CKEDITOR.dom.event(a);var e=a.getKeystroke();switch(e){case 13:case 32:case 40:CKEDITOR.tools.callFunction(d, -b);break;default:c.onkey(c,e)}a.preventDefault()}),w=CKEDITOR.tools.addFunction(function(){c.onfocus&&c.onfocus()}),z=0;c.keyDownFn=n;k={id:l,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:k.gecko&&!k.hc?"":(this.title||"").replace("'",""),keydownFn:n,focusFn:w,clickFn:d};g.output(k,a);if(this.onRender)this.onRender();return c},createPanel:function(b){if(!this._.panel){var a=this._.panelDefinition,g=this._.panelDefinition.block,h=a.parent||CKEDITOR.document.getBody(), -l="cke_combopanel__"+this.name,d=new CKEDITOR.ui.floatPanel(b,h,a),a=d.addListBlock(this.id,g),e=this;d.onShow=function(){this.element.addClass(l);e.setState(CKEDITOR.TRISTATE_ON);e._.on=1;e.editorFocus&&!b.focusManager.hasFocus&&b.focus();if(e.onOpen)e.onOpen()};d.onHide=function(a){this.element.removeClass(l);e.setState(e.modes&&e.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);e._.on=0;if(!a&&e.onClose)e.onClose()};d.onEscape=function(){d.hide(1)};a.onClick=function(a,b){e.onClick&& -e.onClick.call(e,a,b);d.hide()};this._.panel=d;this._.list=a;d.getBlock(this.id).onHide=function(){e._.on=0;e.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(b,a){this._.value=b;var g=this.document.getById("cke_"+this.id+"_text");g&&(b||a?g.removeClass("cke_combo_inlinelabel"):(a=this.label,g.addClass("cke_combo_inlinelabel")),g.setText("undefined"!=typeof a?a:b))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(b){this._.list.mark(b)}, +this.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;b.readOnly&&!this.readOnly&&(a=CKEDITOR.TRISTATE_DISABLED);this.setState(a);this.setValue("");a!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var l=CKEDITOR.env,k,c,f="cke_"+this.id,d=CKEDITOR.tools.addFunction(function(a){c&&(b.unlockSelection(1),c=0);k.execute(a)},this),n=this;k={id:f,combo:this,focus:function(){CKEDITOR.document.getById(f).getChild(1).focus()},execute:function(a){var c=n._;if(c.state!=CKEDITOR.TRISTATE_DISABLED)if(n.createPanel(b), +c.on)c.panel.hide();else{n.commit();var d=n.getValue();d?c.list.mark(d):c.list.unmarkAll();c.panel.showBlock(n.id,new CKEDITOR.dom.element(a),4)}},clickFn:d};this._.listeners.push(b.on("activeFilterChange",h,this));this._.listeners.push(b.on("mode",h,this));this._.listeners.push(b.on("selectionChange",h,this));!this.readOnly&&this._.listeners.push(b.on("readOnly",h,this));var w=CKEDITOR.tools.addFunction(function(a,c){a=new CKEDITOR.dom.event(a);var b=a.getKeystroke();switch(b){case 13:case 32:case 40:CKEDITOR.tools.callFunction(d, +c);break;default:k.onkey(k,b)}a.preventDefault()}),v=CKEDITOR.tools.addFunction(function(){k.onfocus&&k.onfocus()});c=0;k.keyDownFn=w;l={id:f,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:l.gecko&&!l.hc?"":(this.title||"").replace("'",""),keydownFn:w,focusFn:v,clickFn:d};g.output(l,a);if(this.onRender)this.onRender();return k},createPanel:function(b){if(!this._.panel){var a=this._.panelDefinition,g=this._.panelDefinition.block,h=a.parent||CKEDITOR.document.getBody(), +k="cke_combopanel__"+this.name,c=new CKEDITOR.ui.floatPanel(b,h,a),a=c.addListBlock(this.id,g),f=this;c.onShow=function(){this.element.addClass(k);f.setState(CKEDITOR.TRISTATE_ON);f._.on=1;f.editorFocus&&!b.focusManager.hasFocus&&b.focus();if(f.onOpen)f.onOpen()};c.onHide=function(a){this.element.removeClass(k);f.setState(f.modes&&f.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);f._.on=0;if(!a&&f.onClose)f.onClose()};c.onEscape=function(){c.hide(1)};a.onClick=function(a,b){f.onClick&& +f.onClick.call(f,a,b);c.hide()};this._.panel=c;this._.list=a;c.getBlock(this.id).onHide=function(){f._.on=0;f.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(b,a){this._.value=b;var g=this.document.getById("cke_"+this.id+"_text");g&&(b||a?g.removeClass("cke_combo_inlinelabel"):(a=this.label,g.addClass("cke_combo_inlinelabel")),g.setText("undefined"!=typeof a?a:b))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(b){this._.list.mark(b)}, hideItem:function(b){this._.list.hideItem(b)},hideGroup:function(b){this._.list.hideGroup(b)},showAll:function(){this._.list.showAll()},add:function(b,a,g){this._.items[b]=g||b;this._.list.add(b,a,g)},startGroup:function(b){this._.list.startGroup(b)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(b){if(this._.state!=b){var a=this.document.getById("cke_"+this.id);a.setState(b,"cke_combo");b==CKEDITOR.TRISTATE_DISABLED? -a.setAttribute("aria-disabled",!0):a.removeAttribute("aria-disabled");this._.state=b}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))},destroy:function(){CKEDITOR.tools.array.forEach(this._.listeners,function(b){b.removeListener()});this._.listeners=[]}},statics:{handler:{create:function(b){return new CKEDITOR.ui.richCombo(b)}}}}); -CKEDITOR.ui.prototype.addRichCombo=function(b,a){this.add(b,CKEDITOR.UI_RICHCOMBO,a)}})();CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(b){if(!b.blockless){for(var h=b.config,g=b.lang.format,f=h.format_tags.split(";"),a={},m=0,k=[],l=0;l<f.length;l++){var d=f[l],e=new CKEDITOR.style(h["format_"+d]);if(!b.filter.customConfig||b.filter.check(e))m++,a[d]=e,a[d]._.enterMode=b.config.enterMode,k.push(e)}0!==m&&b.ui.addRichCombo("Format",{label:g.label,title:g.panelTitle,toolbar:"styles,20", -allowedContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),multiSelect:!1,attributes:{"aria-label":g.panelTitle}},init:function(){this.startGroup(g.panelTitle);for(var b in a){var d=g["tag_"+b];this.add(b,a[b].buildPreview(d),d)}},onClick:function(d){b.focus();b.fire("saveSnapshot");d=a[d];var e=b.elementPath();d.checkActive(e,b)||b.applyStyle(d);setTimeout(function(){b.fire("saveSnapshot")},0)},onRender:function(){b.on("selectionChange",function(d){var e=this.getValue(); -d=d.data.path;this.refresh();for(var f in a)if(a[f].checkActive(d,b)){f!=e&&this.setValue(f,b.lang.format["tag_"+f]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var d in a)b.activeFilter.check(a[d])||this.hideItem(d)},refresh:function(){var d=b.elementPath();if(d){if(d.isContextFor("p"))for(var e in a)if(b.activeFilter.check(a[e]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}});CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p= -{element:"p"};CKEDITOR.config.format_div={element:"div"};CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};(function(){var b={canUndo:!1,exec:function(b){var g=b.document.createElement("hr");b.insertElement(g)}, -allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(h){h.blockless||(h.addCommand("horizontalrule",b),h.ui.addButton&&h.ui.addButton("HorizontalRule",{label:h.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();CKEDITOR.plugins.add("htmlwriter",{init:function(b){var h=new CKEDITOR.htmlWriter;h.forceSimpleAmpersand=b.config.forceSimpleAmpersand;h.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=h}}); -CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" /\x3e";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,h;for(h in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(h,{indent:!b[h]["#"],breakBeforeOpen:1,breakBeforeClose:!b[h]["#"],breakAfterClose:1,needsSpace:h in -b.$block&&!(h in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var h=this._.rules[b];this._.afterCloser&&h&&h.needsSpace&&this._.needsSpace&&this._.output.push("\n");this._.indent?this.indentation():h&&h.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push("\x3c",b);this._.afterCloser=0}, -openTagClose:function(b,h){var g=this._.rules[b];h?(this._.output.push(this.selfClosingEnd),g&&g.breakAfterClose&&(this._.needsSpace=g.needsSpace)):(this._.output.push("\x3e"),g&&g.indent&&(this._.indentation+=this.indentationChars));g&&g.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,h){"string"==typeof h&&(h=CKEDITOR.tools.htmlEncodeAttr(h),this.forceSimpleAmpersand&&(h=h.replace(/&/g,"\x26")));this._.output.push(" ",b,'\x3d"',h,'"')},closeTag:function(b){var h= -this._.rules[b];h&&h.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():h&&h.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("\x3c/",b,"\x3e");"pre"==b&&(this._.inPre=0);h&&h.breakAfterClose&&(this.lineBreak(),this._.needsSpace=h.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&& -this.indentation();this._.output.push("\x3c!--",b,"--\x3e")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0;this._.needsSpace=0},setRules:function(b,h){var g=this._.rules[b];g?CKEDITOR.tools.extend(g,h,!0):this._.rules[b]= -h}}});"use strict";(function(){function b(a,b){CKEDITOR.tools.extend(this,{editor:a,editable:a.editable(),doc:a.document,win:a.window},b,!0);this.inline=this.editable.isInline();this.inline||(this.frame=this.win.getFrame());this.target=this[this.inline?"editable":"doc"]}function h(a,b){CKEDITOR.tools.extend(this,b,{editor:a},!0)}function g(b,e){var c=b.editable();CKEDITOR.tools.extend(this,{editor:b,editable:c,inline:c.isInline(),doc:b.document,win:b.window,container:CKEDITOR.document.getBody(),winTop:CKEDITOR.document.getWindow()}, -e,!0);this.hidden={};this.visible={};this.inline||(this.frame=this.win.getFrame());this.queryViewport();var f=CKEDITOR.tools.bind(this.queryViewport,this),g=CKEDITOR.tools.bind(this.hideVisible,this),h=CKEDITOR.tools.bind(this.removeAll,this);c.attachListener(this.winTop,"resize",f);c.attachListener(this.winTop,"scroll",f);c.attachListener(this.winTop,"resize",g);c.attachListener(this.win,"scroll",g);c.attachListener(this.inline?c:this.frame,"mouseout",function(a){var b=a.data.$.clientX;a=a.data.$.clientY; -this.queryViewport();(b<=this.rect.left||b>=this.rect.right||a<=this.rect.top||a>=this.rect.bottom)&&this.hideVisible();(0>=b||b>=this.winTopPane.width||0>=a||a>=this.winTopPane.height)&&this.hideVisible()},this);c.attachListener(b,"resize",f);c.attachListener(b,"mode",h);b.on("destroy",h);this.lineTpl=(new CKEDITOR.template('\x3cdiv data-cke-lineutils-line\x3d"1" class\x3d"cke_reset_all" style\x3d"{lineStyle}"\x3e\x3cspan style\x3d"{tipLeftStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3cspan style\x3d"{tipRightStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3c/div\x3e')).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({}, -m,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function f(a){var b;if(b=a&&a.type==CKEDITOR.NODE_ELEMENT)b=!(k[a.getComputedStyle("float")]||k[a.getAttribute("align")]);return b&& -!l[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1;CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;b.prototype={start:function(a){var b=this,c=this.editor,f=this.doc,g,h,k,l,q=CKEDITOR.tools.eventsBuffer(50,function(){c.readOnly||"wysiwyg"!=c.mode||(b.relations={},(h=f.$.elementFromPoint(k,l))&&h.nodeType&&(g=new CKEDITOR.dom.element(h),b.traverseSearch(g),isNaN(k+l)||b.pixelSearch(g,k,l),a&&a(b.relations,k,l)))});this.listener=this.editable.attachListener(this.target, -"mousemove",function(a){k=a.data.$.clientX;l=a.data.$.clientY;q.input()});this.editable.attachListener(this.inline?this.editable:this.frame,"mouseout",function(){q.reset()})},stop:function(){this.listener&&this.listener.removeListener()},getRange:function(){var a={};a[CKEDITOR.LINEUTILS_BEFORE]=CKEDITOR.POSITION_BEFORE_START;a[CKEDITOR.LINEUTILS_AFTER]=CKEDITOR.POSITION_AFTER_END;a[CKEDITOR.LINEUTILS_INSIDE]=CKEDITOR.POSITION_AFTER_START;return function(b){var c=this.editor.createRange();c.moveToPosition(this.relations[b.uid].element, -a[b.type]);return c}}(),store:function(){function a(b,d,f){var g=b.getUniqueId();g in f?f[g].type|=d:f[g]={element:b,type:d}}return function(b,c){var g;c&CKEDITOR.LINEUTILS_AFTER&&f(g=b.getNext())&&g.isVisible()&&(a(g,CKEDITOR.LINEUTILS_BEFORE,this.relations),c^=CKEDITOR.LINEUTILS_AFTER);c&CKEDITOR.LINEUTILS_INSIDE&&f(g=b.getFirst())&&g.isVisible()&&(a(g,CKEDITOR.LINEUTILS_BEFORE,this.relations),c^=CKEDITOR.LINEUTILS_INSIDE);a(b,c,this.relations)}}(),traverseSearch:function(a){var b,c,g;do if(g=a.$["data-cke-expando"], -!(g&&g in this.relations)){if(a.equals(this.editable))break;if(f(a))for(b in this.lookups)(c=this.lookups[b](a))&&this.store(a,c)}while((!a||a.type!=CKEDITOR.NODE_ELEMENT||"true"!=a.getAttribute("contenteditable"))&&(a=a.getParent()))},pixelSearch:function(){function a(d,g,h,k,l){for(var m=0,q;l(h);){h+=k;if(25==++m)break;if(q=this.doc.$.elementFromPoint(g,h))if(q==d)m=0;else if(b(d,q)&&(m=0,f(q=new CKEDITOR.dom.element(q))))return q}}var b=CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a,b){return a.contains(b)}: -function(a,b){return!!(a.compareDocumentPosition(b)&16)};return function(b,e,g){var h=this.win.getViewPaneSize().height,k=a.call(this,b.$,e,g,-1,function(a){return 0<a});e=a.call(this,b.$,e,g,1,function(a){return a<h});if(k)for(this.traverseSearch(k);!k.getParent().equals(b);)k=k.getParent();if(e)for(this.traverseSearch(e);!e.getParent().equals(b);)e=e.getParent();for(;k||e;){k&&(k=k.getNext(f));if(!k||k.equals(e))break;this.traverseSearch(k);e&&(e=e.getPrevious(f));if(!e||e.equals(k))break;this.traverseSearch(e)}}}(), -greedySearch:function(){this.relations={};for(var a=this.editable.getElementsByTag("*"),b=0,c,g,h;c=a.getItem(b++);)if(!c.equals(this.editable)&&c.type==CKEDITOR.NODE_ELEMENT&&(c.hasAttribute("contenteditable")||!c.isReadOnly())&&f(c)&&c.isVisible())for(h in this.lookups)(g=this.lookups[h](c))&&this.store(c,g);return this.relations}};h.prototype={locate:function(){function a(b,d){var g=b.element[d===CKEDITOR.LINEUTILS_BEFORE?"getPrevious":"getNext"]();return g&&f(g)?(b.siblingRect=g.getClientRect(), -d==CKEDITOR.LINEUTILS_BEFORE?(b.siblingRect.bottom+b.elementRect.top)/2:(b.elementRect.bottom+b.siblingRect.top)/2):d==CKEDITOR.LINEUTILS_BEFORE?b.elementRect.top:b.elementRect.bottom}return function(b){var c;this.locations={};for(var f in b)c=b[f],c.elementRect=c.element.getClientRect(),c.type&CKEDITOR.LINEUTILS_BEFORE&&this.store(f,CKEDITOR.LINEUTILS_BEFORE,a(c,CKEDITOR.LINEUTILS_BEFORE)),c.type&CKEDITOR.LINEUTILS_AFTER&&this.store(f,CKEDITOR.LINEUTILS_AFTER,a(c,CKEDITOR.LINEUTILS_AFTER)),c.type& -CKEDITOR.LINEUTILS_INSIDE&&this.store(f,CKEDITOR.LINEUTILS_INSIDE,(c.elementRect.top+c.elementRect.bottom)/2);return this.locations}}(),sort:function(){var a,b,c,f;return function(g,h){a=this.locations;b=[];for(var k in a)for(var l in a[k])if(c=Math.abs(g-a[k][l]),b.length){for(f=0;f<b.length;f++)if(c<b[f].dist){b.splice(f,0,{uid:+k,type:l,dist:c});break}f==b.length&&b.push({uid:+k,type:l,dist:c})}else b.push({uid:+k,type:l,dist:c});return"undefined"!=typeof h?b.slice(0,h):b}}(),store:function(a, -b,c){this.locations[a]||(this.locations[a]={});this.locations[a][b]=c}};var a={display:"block",width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},m={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999};g.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(),delete this.visible[a]},hideLine:function(a){var b=a.getUniqueId(); -a.hide();this.hidden[b]=a;delete this.visible[b]},showLine:function(a){var b=a.getUniqueId();a.show();this.visible[b]=a;delete this.hidden[b]},hideVisible:function(){for(var a in this.visible)this.hideLine(this.visible[a])},placeLine:function(a,b){var c,f,g;if(c=this.getStyle(a.uid,a.type)){for(g in this.visible)if(this.visible[g].getCustomData("hash")!==this.hash){f=this.visible[g];break}if(!f)for(g in this.hidden)if(this.hidden[g].getCustomData("hash")!==this.hash){this.showLine(f=this.hidden[g]); -break}f||this.showLine(f=this.addLine());f.setCustomData("hash",this.hash);this.visible[f.getUniqueId()]=f;f.setStyles(c);b&&b(f)}},getStyle:function(a,b){var c=this.relations[a],f=this.locations[a][b],g={};g.width=c.siblingRect?Math.max(c.siblingRect.width,c.elementRect.width):c.elementRect.width;g.top=this.inline?f+this.winTopScroll.y-this.rect.relativeY:this.rect.top+this.winTopScroll.y+f;if(g.top-this.winTopScroll.y<this.rect.top||g.top-this.winTopScroll.y>this.rect.bottom)return!1;this.inline? -g.left=c.elementRect.left-this.rect.relativeX:(0<c.elementRect.left?g.left=this.rect.left+c.elementRect.left:(g.width+=c.elementRect.left,g.left=this.rect.left),0<(c=g.left+g.width-(this.rect.left+this.winPane.width))&&(g.width-=c));g.left+=this.winTopScroll.x;for(var h in g)g[h]=CKEDITOR.tools.cssLength(g[h]);return g},addLine:function(){var a=CKEDITOR.dom.element.createFromHtml(this.lineTpl);a.appendTo(this.container);return a},prepare:function(a,b){this.relations=a;this.locations=b;this.hash=Math.random()}, -cleanup:function(){var a,b;for(b in this.visible)a=this.visible[b],a.getCustomData("hash")!==this.hash&&this.hideLine(a)},queryViewport:function(){this.winPane=this.win.getViewPaneSize();this.winTopScroll=this.winTop.getScrollPosition();this.winTopPane=this.winTop.getViewPaneSize();this.rect=this.getClientRect(this.inline?this.editable:this.frame)},getClientRect:function(a){a=a.getClientRect();var b=this.container.getDocumentPosition(),c=this.container.getComputedStyle("position");a.relativeX=a.relativeY= -0;"static"!=c&&(a.relativeY=b.y,a.relativeX=b.x,a.top-=a.relativeY,a.bottom-=a.relativeY,a.left-=a.relativeX,a.right-=a.relativeX);return a}};var k={left:1,right:1,center:1},l={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:b,locator:h,liner:g}})();(function(){function b(b){return b.getName&&!b.hasAttribute("data-cke-temp")}CKEDITOR.plugins.add("widgetselection",{init:function(b){if(CKEDITOR.env.webkit){var g=CKEDITOR.plugins.widgetselection;b.on("contentDom",function(b){b=b.editor;var a= +a.setAttribute("aria-disabled",!0):a.removeAttribute("aria-disabled");this._.state=b}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))},destroy:function(){CKEDITOR.tools.array.forEach(this._.listeners,function(b){b.removeListener()});this._.listeners=[]},select:function(b){if(!CKEDITOR.tools.isEmpty(this._.items))for(var a in this._.items)if(b({value:a, +text:this._.items[a]})){this.setValue(a);break}}},statics:{handler:{create:function(b){return new CKEDITOR.ui.richCombo(b)}}}});CKEDITOR.ui.prototype.addRichCombo=function(b,a){this.add(b,CKEDITOR.UI_RICHCOMBO,a)}})();CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(b){if(!b.blockless){for(var h=b.config,g=b.lang.format,e=h.format_tags.split(";"),a={},m=0,l=[],k=0;k<e.length;k++){var c=e[k],f=new CKEDITOR.style(h["format_"+c]);if(!b.filter.customConfig||b.filter.check(f))m++,a[c]= +f,a[c]._.enterMode=b.config.enterMode,l.push(f)}0!==m&&b.ui.addRichCombo("Format",{label:g.label,title:g.panelTitle,toolbar:"styles,20",allowedContent:l,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),multiSelect:!1,attributes:{"aria-label":g.panelTitle}},init:function(){this.startGroup(g.panelTitle);for(var c in a){var b=g["tag_"+c];this.add(c,a[c].buildPreview(b),b)}},onClick:function(c){b.focus();b.fire("saveSnapshot");c=a[c];var f=b.elementPath();c.checkActive(f,b)||b.applyStyle(c); +setTimeout(function(){b.fire("saveSnapshot")},0)},onRender:function(){b.on("selectionChange",function(c){var f=this.getValue();c=c.data.path;this.refresh();for(var e in a)if(a[e].checkActive(c,b)){e!=f&&this.setValue(e,b.lang.format["tag_"+e]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var c in a)b.activeFilter.check(a[c])||this.hideItem(c)},refresh:function(){var c=b.elementPath();if(c){if(c.isContextFor("p"))for(var f in a)if(b.activeFilter.check(a[f]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}}); +CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p={element:"p"};CKEDITOR.config.format_div={element:"div"};CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};(function(){var b= +{canUndo:!1,exec:function(b){var g=b.document.createElement("hr");b.insertElement(g)},allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(h){h.blockless||(h.addCommand("horizontalrule",b),h.ui.addButton&&h.ui.addButton("HorizontalRule",{label:h.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();CKEDITOR.plugins.add("htmlwriter",{init:function(b){var h=new CKEDITOR.htmlWriter;h.forceSimpleAmpersand=b.config.forceSimpleAmpersand; +h.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=h}});CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" /\x3e";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,h;for(h in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(h,{indent:!b[h]["#"], +breakBeforeOpen:1,breakBeforeClose:!b[h]["#"],breakAfterClose:1,needsSpace:h in b.$block&&!(h in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var h=this._.rules[b];this._.afterCloser&&h&&h.needsSpace&&this._.needsSpace&&this._.output.push("\n");this._.indent?this.indentation():h&&h.breakBeforeOpen&&(this.lineBreak(), +this.indentation());this._.output.push("\x3c",b);this._.afterCloser=0},openTagClose:function(b,h){var g=this._.rules[b];h?(this._.output.push(this.selfClosingEnd),g&&g.breakAfterClose&&(this._.needsSpace=g.needsSpace)):(this._.output.push("\x3e"),g&&g.indent&&(this._.indentation+=this.indentationChars));g&&g.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,h){"string"==typeof h&&(h=CKEDITOR.tools.htmlEncodeAttr(h),this.forceSimpleAmpersand&&(h=h.replace(/&/g,"\x26"))); +this._.output.push(" ",b,'\x3d"',h,'"')},closeTag:function(b){var h=this._.rules[b];h&&h.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():h&&h.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("\x3c/",b,"\x3e");"pre"==b&&(this._.inPre=0);h&&h.breakAfterClose&&(this.lineBreak(),this._.needsSpace=h.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b))); +this._.output.push(b)},comment:function(b){this._.indent&&this.indentation();this._.output.push("\x3c!--",b,"--\x3e")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0;this._.needsSpace=0},setRules:function(b,h){var g= +this._.rules[b];g?CKEDITOR.tools.extend(g,h,!0):this._.rules[b]=h}}});"use strict";(function(){function b(a,b){CKEDITOR.tools.extend(this,{editor:a,editable:a.editable(),doc:a.document,win:a.window},b,!0);this.inline=this.editable.isInline();this.inline||(this.frame=this.win.getFrame());this.target=this[this.inline?"editable":"doc"]}function h(a,b){CKEDITOR.tools.extend(this,b,{editor:a},!0)}function g(c,b){var d=c.editable();CKEDITOR.tools.extend(this,{editor:c,editable:d,inline:d.isInline(),doc:c.document, +win:c.window,container:CKEDITOR.document.getBody(),winTop:CKEDITOR.document.getWindow()},b,!0);this.hidden={};this.visible={};this.inline||(this.frame=this.win.getFrame());this.queryViewport();var e=CKEDITOR.tools.bind(this.queryViewport,this),g=CKEDITOR.tools.bind(this.hideVisible,this),h=CKEDITOR.tools.bind(this.removeAll,this);d.attachListener(this.winTop,"resize",e);d.attachListener(this.winTop,"scroll",e);d.attachListener(this.winTop,"resize",g);d.attachListener(this.win,"scroll",g);d.attachListener(this.inline? +d:this.frame,"mouseout",function(a){var c=a.data.$.clientX;a=a.data.$.clientY;this.queryViewport();(c<=this.rect.left||c>=this.rect.right||a<=this.rect.top||a>=this.rect.bottom)&&this.hideVisible();(0>=c||c>=this.winTopPane.width||0>=a||a>=this.winTopPane.height)&&this.hideVisible()},this);d.attachListener(c,"resize",e);d.attachListener(c,"mode",h);c.on("destroy",h);this.lineTpl=(new CKEDITOR.template('\x3cdiv data-cke-lineutils-line\x3d"1" class\x3d"cke_reset_all" style\x3d"{lineStyle}"\x3e\x3cspan style\x3d"{tipLeftStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3cspan style\x3d"{tipRightStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3c/div\x3e')).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({}, +m,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function e(a){var b;if(b=a&&a.type==CKEDITOR.NODE_ELEMENT)b=!(l[a.getComputedStyle("float")]||l[a.getAttribute("align")]);return b&& +!k[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1;CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;b.prototype={start:function(a){var b=this,d=this.editor,e=this.doc,g,h,k,l,m=CKEDITOR.tools.eventsBuffer(50,function(){d.readOnly||"wysiwyg"!=d.mode||(b.relations={},(h=e.$.elementFromPoint(k,l))&&h.nodeType&&(g=new CKEDITOR.dom.element(h),b.traverseSearch(g),isNaN(k+l)||b.pixelSearch(g,k,l),a&&a(b.relations,k,l)))});this.listener=this.editable.attachListener(this.target, +"mousemove",function(a){k=a.data.$.clientX;l=a.data.$.clientY;m.input()});this.editable.attachListener(this.inline?this.editable:this.frame,"mouseout",function(){m.reset()})},stop:function(){this.listener&&this.listener.removeListener()},getRange:function(){var a={};a[CKEDITOR.LINEUTILS_BEFORE]=CKEDITOR.POSITION_BEFORE_START;a[CKEDITOR.LINEUTILS_AFTER]=CKEDITOR.POSITION_AFTER_END;a[CKEDITOR.LINEUTILS_INSIDE]=CKEDITOR.POSITION_AFTER_START;return function(b){var d=this.editor.createRange();d.moveToPosition(this.relations[b.uid].element, +a[b.type]);return d}}(),store:function(){function a(c,b,e){var g=c.getUniqueId();g in e?e[g].type|=b:e[g]={element:c,type:b}}return function(b,d){var g;d&CKEDITOR.LINEUTILS_AFTER&&e(g=b.getNext())&&g.isVisible()&&(a(g,CKEDITOR.LINEUTILS_BEFORE,this.relations),d^=CKEDITOR.LINEUTILS_AFTER);d&CKEDITOR.LINEUTILS_INSIDE&&e(g=b.getFirst())&&g.isVisible()&&(a(g,CKEDITOR.LINEUTILS_BEFORE,this.relations),d^=CKEDITOR.LINEUTILS_INSIDE);a(b,d,this.relations)}}(),traverseSearch:function(a){var b,d,g;do if(g=a.$["data-cke-expando"], +!(g&&g in this.relations)){if(a.equals(this.editable))break;if(e(a))for(b in this.lookups)(d=this.lookups[b](a))&&this.store(a,d)}while((!a||a.type!=CKEDITOR.NODE_ELEMENT||"true"!=a.getAttribute("contenteditable"))&&(a=a.getParent()))},pixelSearch:function(){function a(c,g,h,k,l){for(var m=0,q;l(h);){h+=k;if(25==++m)break;if(q=this.doc.$.elementFromPoint(g,h))if(q==c)m=0;else if(b(c,q)&&(m=0,e(q=new CKEDITOR.dom.element(q))))return q}}var b=CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a,c){return a.contains(c)}: +function(a,c){return!!(a.compareDocumentPosition(c)&16)};return function(b,f,g){var h=this.win.getViewPaneSize().height,k=a.call(this,b.$,f,g,-1,function(a){return 0<a});f=a.call(this,b.$,f,g,1,function(a){return a<h});if(k)for(this.traverseSearch(k);!k.getParent().equals(b);)k=k.getParent();if(f)for(this.traverseSearch(f);!f.getParent().equals(b);)f=f.getParent();for(;k||f;){k&&(k=k.getNext(e));if(!k||k.equals(f))break;this.traverseSearch(k);f&&(f=f.getPrevious(e));if(!f||f.equals(k))break;this.traverseSearch(f)}}}(), +greedySearch:function(){this.relations={};for(var a=this.editable.getElementsByTag("*"),b=0,d,g,h;d=a.getItem(b++);)if(!d.equals(this.editable)&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasAttribute("contenteditable")||!d.isReadOnly())&&e(d)&&d.isVisible())for(h in this.lookups)(g=this.lookups[h](d))&&this.store(d,g);return this.relations}};h.prototype={locate:function(){function a(c,b){var g=c.element[b===CKEDITOR.LINEUTILS_BEFORE?"getPrevious":"getNext"]();return g&&e(g)?(c.siblingRect=g.getClientRect(), +b==CKEDITOR.LINEUTILS_BEFORE?(c.siblingRect.bottom+c.elementRect.top)/2:(c.elementRect.bottom+c.siblingRect.top)/2):b==CKEDITOR.LINEUTILS_BEFORE?c.elementRect.top:c.elementRect.bottom}return function(b){var d;this.locations={};for(var e in b)d=b[e],d.elementRect=d.element.getClientRect(),d.type&CKEDITOR.LINEUTILS_BEFORE&&this.store(e,CKEDITOR.LINEUTILS_BEFORE,a(d,CKEDITOR.LINEUTILS_BEFORE)),d.type&CKEDITOR.LINEUTILS_AFTER&&this.store(e,CKEDITOR.LINEUTILS_AFTER,a(d,CKEDITOR.LINEUTILS_AFTER)),d.type& +CKEDITOR.LINEUTILS_INSIDE&&this.store(e,CKEDITOR.LINEUTILS_INSIDE,(d.elementRect.top+d.elementRect.bottom)/2);return this.locations}}(),sort:function(){var a,b,d,e;return function(g,h){a=this.locations;b=[];for(var k in a)for(var l in a[k])if(d=Math.abs(g-a[k][l]),b.length){for(e=0;e<b.length;e++)if(d<b[e].dist){b.splice(e,0,{uid:+k,type:l,dist:d});break}e==b.length&&b.push({uid:+k,type:l,dist:d})}else b.push({uid:+k,type:l,dist:d});return"undefined"!=typeof h?b.slice(0,h):b}}(),store:function(a, +b,d){this.locations[a]||(this.locations[a]={});this.locations[a][b]=d}};var a={display:"block",width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},m={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999};g.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(),delete this.visible[a]},hideLine:function(a){var b=a.getUniqueId(); +a.hide();this.hidden[b]=a;delete this.visible[b]},showLine:function(a){var b=a.getUniqueId();a.show();this.visible[b]=a;delete this.hidden[b]},hideVisible:function(){for(var a in this.visible)this.hideLine(this.visible[a])},placeLine:function(a,b){var d,e,g;if(d=this.getStyle(a.uid,a.type)){for(g in this.visible)if(this.visible[g].getCustomData("hash")!==this.hash){e=this.visible[g];break}if(!e)for(g in this.hidden)if(this.hidden[g].getCustomData("hash")!==this.hash){this.showLine(e=this.hidden[g]); +break}e||this.showLine(e=this.addLine());e.setCustomData("hash",this.hash);this.visible[e.getUniqueId()]=e;e.setStyles(d);b&&b(e)}},getStyle:function(a,b){var d=this.relations[a],e=this.locations[a][b],g={};g.width=d.siblingRect?Math.max(d.siblingRect.width,d.elementRect.width):d.elementRect.width;g.top=this.inline?e+this.winTopScroll.y-this.rect.relativeY:this.rect.top+this.winTopScroll.y+e;if(g.top-this.winTopScroll.y<this.rect.top||g.top-this.winTopScroll.y>this.rect.bottom)return!1;this.inline? +g.left=d.elementRect.left-this.rect.relativeX:(0<d.elementRect.left?g.left=this.rect.left+d.elementRect.left:(g.width+=d.elementRect.left,g.left=this.rect.left),0<(d=g.left+g.width-(this.rect.left+this.winPane.width))&&(g.width-=d));g.left+=this.winTopScroll.x;for(var h in g)g[h]=CKEDITOR.tools.cssLength(g[h]);return g},addLine:function(){var a=CKEDITOR.dom.element.createFromHtml(this.lineTpl);a.appendTo(this.container);return a},prepare:function(a,b){this.relations=a;this.locations=b;this.hash=Math.random()}, +cleanup:function(){var a,b;for(b in this.visible)a=this.visible[b],a.getCustomData("hash")!==this.hash&&this.hideLine(a)},queryViewport:function(){this.winPane=this.win.getViewPaneSize();this.winTopScroll=this.winTop.getScrollPosition();this.winTopPane=this.winTop.getViewPaneSize();this.rect=this.getClientRect(this.inline?this.editable:this.frame)},getClientRect:function(a){a=a.getClientRect();var b=this.container.getDocumentPosition(),d=this.container.getComputedStyle("position");a.relativeX=a.relativeY= +0;"static"!=d&&(a.relativeY=b.y,a.relativeX=b.x,a.top-=a.relativeY,a.bottom-=a.relativeY,a.left-=a.relativeX,a.right-=a.relativeX);return a}};var l={left:1,right:1,center:1},k={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:b,locator:h,liner:g}})();(function(){function b(b){return b.getName&&!b.hasAttribute("data-cke-temp")}CKEDITOR.plugins.add("widgetselection",{init:function(b){if(CKEDITOR.env.webkit){var g=CKEDITOR.plugins.widgetselection;b.on("contentDom",function(b){b=b.editor;var a= b.editable();a.attachListener(a,"keydown",function(b){b.data.getKeystroke()==CKEDITOR.CTRL+65&&CKEDITOR.tools.setTimeout(function(){g.addFillers(a)||g.removeFillers(a)},0)},null,null,-1);b.on("selectionCheck",function(a){g.removeFillers(a.editor.editable())});b.on("paste",function(a){a.data.dataValue=g.cleanPasteData(a.data.dataValue)});"selectall"in b.plugins&&g.addSelectAllIntegration(b)})}}});CKEDITOR.plugins.widgetselection={startFiller:null,endFiller:null,fillerAttribute:"data-cke-filler-webkit", -fillerContent:"\x26nbsp;",fillerTagName:"div",addFillers:function(h){var g=h.editor;if(!this.isWholeContentSelected(h)&&0<h.getChildCount()){var f=h.getFirst(b),a=h.getLast(b);f&&f.type==CKEDITOR.NODE_ELEMENT&&!f.isEditable()&&(this.startFiller=this.createFiller(),h.append(this.startFiller,1));a&&a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable()&&(this.endFiller=this.createFiller(!0),h.append(this.endFiller,0));if(this.hasFiller(h))return g=g.createRange(),g.selectNodeContents(h),g.select(),!0}return!1}, -removeFillers:function(b){if(this.hasFiller(b)&&!this.isWholeContentSelected(b)){var g=b.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dstart]"),f=b.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dend]");this.startFiller&&g&&this.startFiller.equals(g)?this.removeFiller(this.startFiller,b):this.startFiller=g;this.endFiller&&f&&this.endFiller.equals(f)?this.removeFiller(this.endFiller,b):this.endFiller=f}},cleanPasteData:function(b){b&&b.length&&(b=b.replace(this.createFillerRegex(), +fillerContent:"\x26nbsp;",fillerTagName:"div",addFillers:function(h){var g=h.editor;if(!this.isWholeContentSelected(h)&&0<h.getChildCount()){var e=h.getFirst(b),a=h.getLast(b);e&&e.type==CKEDITOR.NODE_ELEMENT&&!e.isEditable()&&(this.startFiller=this.createFiller(),h.append(this.startFiller,1));a&&a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable()&&(this.endFiller=this.createFiller(!0),h.append(this.endFiller,0));if(this.hasFiller(h))return g=g.createRange(),g.selectNodeContents(h),g.select(),!0}return!1}, +removeFillers:function(b){if(this.hasFiller(b)&&!this.isWholeContentSelected(b)){var g=b.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dstart]"),e=b.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dend]");this.startFiller&&g&&this.startFiller.equals(g)?this.removeFiller(this.startFiller,b):this.startFiller=g;this.endFiller&&e&&this.endFiller.equals(e)?this.removeFiller(this.endFiller,b):this.endFiller=e}},cleanPasteData:function(b){b&&b.length&&(b=b.replace(this.createFillerRegex(), "").replace(this.createFillerRegex(!0),""));return b},isWholeContentSelected:function(b){var g=b.editor.getSelection().getRanges()[0];return!g||g&&g.collapsed?!1:(g=g.clone(),g.enlarge(CKEDITOR.ENLARGE_ELEMENT),!!(g&&b&&g.startContainer&&g.endContainer&&0===g.startOffset&&g.endOffset===b.getChildCount()&&g.startContainer.equals(b)&&g.endContainer.equals(b)))},hasFiller:function(b){return 0<b.find(this.fillerTagName+"["+this.fillerAttribute+"]").count()},createFiller:function(b){var g=new CKEDITOR.dom.element(this.fillerTagName); -g.setHtml(this.fillerContent);g.setAttribute(this.fillerAttribute,b?"end":"start");g.setAttribute("data-cke-temp",1);g.setStyles({display:"block",width:0,height:0,padding:0,border:0,margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return g},removeFiller:function(b,g){if(b){var f=g.editor,a=g.editor.getSelection().getRanges()[0].startPath(),m=f.createRange(),k,l;a.contains(b)&&(k=b.getHtml(),l=!0);a="start"==b.getAttribute(this.fillerAttribute);b.remove();k&&0<k.length&& -k!=this.fillerContent?(g.insertHtmlIntoRange(k,f.getSelection().getRanges()[0]),m.setStartAt(g.getChild(g.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),f.getSelection().selectRanges([m])):l&&(a?m.setStartAt(g.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):m.setEndAt(g.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),g.editor.getSelection().selectRanges([m]))}},createFillerRegex:function(b){var g=this.createFiller(b).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi, -"\x3e[^\x3c]*\x3c");return new RegExp((b?"":"^")+g+(b?"$":""))},addSelectAllIntegration:function(b){var g=this;b.editable().attachListener(b,"beforeCommandExec",function(f){var a=b.editable();"selectAll"==f.data.name&&a&&g.addFillers(a)},null,null,9999)}}})();"use strict";(function(){function b(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};G(this);A(this);this.on("checkWidgets", -k);this.editor.on("contentDomInvalidated",this.checkWidgets,this);D(this);v(this);x(this);y(this);B(this)}function h(a,b,c,d,e){var f=a.editor;CKEDITOR.tools.extend(this,d,{editor:f,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:h.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast? -d.downcasts[d.downcast]:d.downcast}},!0);a.fire("instanceCreated",this);O(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));e&&this.setData(e);this.data.classes||this.setData("classes",this.getClasses());this.dataReady=!0;aa(this);this.fire("data",this.data);this.isInited()&&f.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function g(a,b,d){CKEDITOR.dom.element.call(this,b.$);this.editor=a; -this._={};b=this.filter=d.filter;CKEDITOR.dtd[this.getName()].p?(this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function f(a,b){a.addCommand(b.name,{exec:function(a,d){function c(){a.widgets.finalizeCreation(h)}var e=a.widgets.focused;if(e&&e.name==b.name)e.edit();else if(b.insert)b.insert({editor:a,commandData:d});else if(b.template){var e="function"== -typeof b.defaults?b.defaults():b.defaults,e=CKEDITOR.dom.element.createFromHtml(b.template.output(e),a.document),f,g=a.widgets.wrapElement(e,b.name),h=new CKEDITOR.dom.documentFragment(g.getDocument());h.append(g);(f=a.widgets.initOn(e,b,d&&d.startupData))?(e=f.once("edit",function(b){if(b.data.dialog)f.once("dialog",function(b){b=b.data;var d,e;d=b.once("ok",c,null,null,20);e=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(f,!0)});b.once("hide",function(){d.removeListener(); -e.removeListener()})});else c()},null,null,999),f.edit(),e.removeListener()):c()}},allowedContent:b.allowedContent,requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function a(a,b){function d(a,c){var e=b.upcast.split(","),f,g;for(g=0;g<e.length;g++)if(f=e[g],f===a.name)return b.upcasts[f].call(this,a,c);return!1}function c(b,d,e){var f=CKEDITOR.tools.getIndex(a._.upcasts,function(a){return a[2]>e});0>f&&(f=a._.upcasts.length);a._.upcasts.splice(f, -0,[CKEDITOR.tools.bind(b,d),d.name,e])}var e=b.upcast,f=b.upcastPriority||10;e&&("string"==typeof e?c(d,b,f):c(e,b,f))}function m(a,b){a.focused=null;if(b.isInited()){var d=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!d&&b.editor.resetDirty()}}function k(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),d=this.instances,c,e,f,g;if(b){for(c in d)d[c].isReady()&&!b.contains(d[c].wrapper)&&this.destroy(d[c],!0);if(a&&a.initOnlyNew)d=this.initOnAll(); -else{var k=b.find(".cke_widget_wrapper"),d=[];c=0;for(e=k.count();c<e;c++){f=k.getItem(c);if(g=!this.getByElement(f,!0)){a:{g=p;for(var l=f;l=l.getParent();)if(g(l)){g=!0;break a}g=!1}g=!g}g&&b.contains(f)&&(f.addClass("cke_widget_new"),d.push(this.initOn(f.getFirst(h.isDomWidgetElement))))}}a&&a.focusInited&&1==d.length&&d[0].focus()}}}function l(a){if("undefined"!=typeof a.attributes&&a.attributes["data-widget"]){var b=d(a),c=e(a),f=!1;b&&b.value&&b.value.match(/^\s/g)&&(b.parent.attributes["data-cke-white-space-first"]= -1,b.value=b.value.replace(/^\s/g,"\x26nbsp;"),f=!0);c&&c.value&&c.value.match(/\s$/g)&&(c.parent.attributes["data-cke-white-space-last"]=1,c.value=c.value.replace(/\s$/g,"\x26nbsp;"),f=!0);f&&(a.attributes["data-cke-widget-white-space"]=1)}}function d(a){return a.find(function(a){return 3===a.type},!0).shift()}function e(a){return a.find(function(a){return 3===a.type},!0).pop()}function c(a,b,d){if(!d.allowedContent&&!d.disallowedContent)return null;var c=this._.filters[a];c||(this._.filters[a]=c= -{});a=c[b];a||(a=d.allowedContent?new CKEDITOR.filter(d.allowedContent):this.editor.filter.clone(),c[b]=a,d.disallowedContent&&a.disallow(d.disallowedContent));return a}function n(a){var b=[],d=a._.upcasts,c=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var e,f,g,k,l;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(h.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(l=d.length){if(a.attributes["data-cke-widget-upcasted"])return!1; -k=0;for(e=c.length;k<e;++k)if(!1===c[k](a))return;for(k=0;k<l;++k)if(e=d[k],g={},f=e[0](a,g))return f instanceof CKEDITOR.htmlParser.element&&(a=f),a.attributes["data-cke-widget-data"]=encodeURIComponent(JSON.stringify(g)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,e[1]]),!1}}}}function w(a,b){return{tabindex:-1,contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")+(b?" cke_widget_"+b:"")}} -function z(a,b,d){if(a.type==CKEDITOR.NODE_ELEMENT){var c=CKEDITOR.dtd[a.name];if(c&&!c[d.name]){var c=a.split(b),e=a.parent;b=c.getIndex();a.children.length||(--b,a.remove());c.children.length||c.remove();return z(e,b,d)}}a.add(d,b)}function r(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function p(a){return a.hasAttribute("data-cke-temp")}function q(a,b,d,c){var e=a.editor;e.fire("lockSnapshot");d?(c=d.data("cke-widget-editable"),c=b.editables[c],a.widgetHoldingFocusedEditable= -b,b.focusedEditable=c,d.addClass("cke_widget_editable_focused"),c.filter&&e.setActiveFilter(c.filter),e.setActiveEnterMode(c.enterMode,c.shiftEnterMode)):(c||b.focusedEditable.removeClass("cke_widget_editable_focused"),b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function u(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function t(a, -b){return CKEDITOR.tools.trim(b)}function y(a){var b=a.editor,d=CKEDITOR.plugins.lineutils;b.on("dragstart",function(d){var c=d.data.target;h.isDomDragHandler(c)&&(c=a.getByElement(c),d.data.dataTransfer.setData("cke/widget-id",c.id),b.focus(),c.focus())});b.on("drop",function(d){var c=d.data.dataTransfer,e=c.getData("cke/widget-id"),f=c.getTransferType(b),c=b.createRange();""!==e&&f===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?d.cancel():""!==e&&f==CKEDITOR.DATA_TRANSFER_INTERNAL&&(e=a.instances[e])&& -(c.setStartBefore(e.wrapper),c.setEndAfter(e.wrapper),d.data.dragRange=c,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,d.data.dataTransfer.setData("text/html",e.getClipboardHtml()),b.widgets.destroy(e,!0))});b.on("contentDom",function(){var c=b.editable();CKEDITOR.tools.extend(a,{finder:new d.finder(b,{lookups:{"default":function(b){if(!b.is(CKEDITOR.dtd.$listItem)&&b.is(CKEDITOR.dtd.$block)&&!h.isDomNestedEditable(b)&& -!a._.draggedWidget.wrapper.contains(b)){var d=h.getNestedEditable(c,b);if(d){b=a._.draggedWidget;if(a.getByElement(d)==b)return;d=CKEDITOR.filter.instances[d.data("cke-filter")];b=b.requiredContent;if(d&&b&&!d.check(b))return}return CKEDITOR.LINEUTILS_BEFORE|CKEDITOR.LINEUTILS_AFTER}}}}),locator:new d.locator(b),liner:new d.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function v(a){var b= -a.editor;b.on("contentDom",function(){var d=b.editable(),c=d.isInline()?d:b.document,e,f;d.attachListener(c,"mousedown",function(d){var c=d.data.getTarget();e=c instanceof CKEDITOR.dom.element?a.getByElement(c):null;f=0;e&&(e.inline&&c.type==CKEDITOR.NODE_ELEMENT&&c.hasAttribute("data-cke-widget-drag-handler")?(f=1,a.focused!=e&&b.getSelection().removeAllRanges()):h.getNestedEditable(e.wrapper,c)?e=null:(d.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});d.attachListener(c,"mouseup",function(){f&& -e&&e.wrapper&&(f=0,e.focus())});CKEDITOR.env.ie&&d.attachListener(c,"mouseup",function(){setTimeout(function(){e&&e.wrapper&&d.contains(e.wrapper)&&(e.focus(),e=null)})})});b.on("doubleclick",function(b){var d=a.getByElement(b.data.element);if(d&&!h.getNestedEditable(d.wrapper,b.data.element))return d.fire("doubleclick",{element:b.data.element})},null,null,1)}function x(a){a.editor.on("key",function(b){var d=a.focused,c=a.widgetHoldingFocusedEditable,e;d?e=d.fire("key",{keyCode:b.data.keyCode}):c&& -(d=b.data.keyCode,b=c.focusedEditable,d==CKEDITOR.CTRL+65?(d=b.getBogus(),c=c.editor.createRange(),c.selectNodeContents(b),d&&c.setEndAt(d,CKEDITOR.POSITION_BEFORE_START),c.select(),e=!1):8==d||46==d?(e=c.editor.getSelection().getRanges(),c=e[0],e=!(1==e.length&&c.collapsed&&c.checkBoundaryOfElement(b,CKEDITOR[8==d?"START":"END"]))):e=void 0);return e},null,null,1)}function B(a){function b(c){1>a.selected.length||M(d,"cut"===c.name)}var d=a.editor;d.on("contentDom",function(){var a=d.editable();a.attachListener(a, -"copy",b);a.attachListener(a,"cut",b)})}function D(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(d){var c=(d=h.getNestedEditable(b.editable(),d.data.selection.getStartElement()))&&a.getByElement(d),e=a.widgetHoldingFocusedEditable;e?e===c&&e.focusedEditable.equals(d)||(q(a,e,null),c&&d&&q(a,c,d)):c&&d&&q(a,c,d)});b.on("dataReady",function(){C(a).commit()});b.on("blur",function(){var b;(b=a.focused)&& -m(a,b);(b=a.widgetHoldingFocusedEditable)&&q(a,b,null)})}function A(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var f=CKEDITOR.tools.getNextNumber(),g=[];b.data.downcastingSessionId=f;c[f]=g;b.data.dataValue.forEach(function(b){var c=b.attributes,f;if("data-cke-widget-white-space"in c){f=d(b);var k=e(b);f.parent.attributes["data-cke-white-space-first"]&&(f.value=f.value.replace(/^ /g," "));k.parent.attributes["data-cke-white-space-last"]&&(k.value=k.value.replace(/ $/g," "))}if("data-cke-widget-id"in -c){if(c=a.instances[c["data-cke-widget-id"]])f=b.getFirst(h.isParserWidgetElement),g.push({wrapper:b,element:f,widget:c,editables:{}}),"1"!=f.attributes["data-cke-widget-keep-attr"]&&delete f.attributes["data-widget"]}else if("data-cke-widget-editable"in c)return 0<g.length&&(g[g.length-1].editables[c["data-cke-widget-editable"]]=b),!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId)for(var b=c[a.data.downcastingSessionId],d,e,f,g,h,k;d=b.shift();){e= -d.widget;f=d.element;g=e._.downcastFn&&e._.downcastFn.call(e,f);a.data.widgetsCopy&&e.getClipboardHtml&&(g=CKEDITOR.htmlParser.fragment.fromHtml(e.getClipboardHtml()),g=g.children[0]);for(k in d.editables)h=d.editables[k],delete h.attributes.contenteditable,h.setHtml(e.editables[k].getData());g||(g=f);d.wrapper.replaceWith(g)}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function G(a){var b=a.editor,d,c;b.on("toHtml",function(b){var c=n(a),e;for(b.data.dataValue.forEach(c.iterator, -CKEDITOR.NODE_ELEMENT,!0);e=c.toBeWrapped.pop();){var f=e[0],g=f.parent;g.type==CKEDITOR.NODE_ELEMENT&&g.attributes["data-cke-widget-wrapper"]&&g.replaceWith(f);a.wrapElement(e[0],e[1])}d=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(c)for(var d=b.editable().find(".cke_widget_wrapper"),e,f,g= -0,k=d.count();g<k;++g)e=d.getItem(g),f=e.getFirst(h.isDomWidgetElement),f.type==CKEDITOR.NODE_ELEMENT&&f.data("widget")?(f.replace(e),a.wrapElement(f)):e.remove();c=0;a.destroyAll(!0);a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(c=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(ba,t);a.range&&(a=h.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&b.setActiveFilter(a)}); -b.on("afterInsertHtml",function(c){c.data.intoRange?a.checkWidgets({initOnlyNew:!0}):(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,focusInited:d}),b.fire("unlockSnapshot"))})}function C(a){var b=a.selected,d=[],c=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&d.push(a);a=CKEDITOR.tools.indexOf(c,a);0<=a&&c.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,g,h;a.editor.fire("lockSnapshot");for(f&&(g=a.focused)&&m(a, -g);g=c.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(h=g.editor.checkDirty(),g.setSelected(!1),!h&&g.editor.resetDirty());f&&e&&(h=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!h&&a.editor.resetDirty());for(;g=d.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function I(a){a&&a.addFilterRule(function(a){return a.replace(/\s*cke_widget_selected/g,"").replace(/\s*cke_widget_focused/g,"").replace(/<span[^>]*cke_widget_drag_handler_container[^>]*.*?<\/span>/gmi, -"")})}function J(a,b,d){var c=0;b=H(b);var e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)d?e[f]||(c=e[f]=1):e[f]&&(delete e[f],c=1);c&&a.setData("classes",e)}}function F(a){a.cancel()}function M(a,b){function d(){var b=a.getSelectedHtml(!0);if(a.widgets.focused)return a.widgets.focused.getClipboardHtml();a.once("toDataFormat",function(a){a.data.widgetsCopy=!0},null,null,-1);return a.dataProcessor.toDataFormat(b)}var c=a.widgets.focused,e,f,g;U.hasCopyBin(a)||(f=new U(a,{beforeDestroy:function(){!b&& -c&&c.focus();g&&a.getSelection().selectBookmarks(g);e&&CKEDITOR.plugins.widgetselection.addFillers(a.editable())},afterDestroy:function(){b&&!a.readOnly&&(c?a.widgets.del(c):a.extractSelectedHtml(),a.fire("saveSnapshot"))}}),c||(e=CKEDITOR.env.webkit&&CKEDITOR.plugins.widgetselection.isWholeContentSelected(a.editable()),g=a.getSelection().createBookmarks(!0)),f.handle(d()))}function H(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function E(){var a=CKEDITOR.document.getActive(), -b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function Q(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function O(a,b){P(a);K(a);X(a);S(a);L(a);Z(a);ca(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var c=b.data.getTarget();h.getNestedEditable(a,c)||a.inline&&h.isDomDragHandler(c)||b.data.preventDefault()}); -a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){M(a.editor,b==CKEDITOR.CTRL+88);return}if(b in R||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function P(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)} -function K(a){if(a.parts){var b={},c,d;for(d in a.parts)c=a.wrapper.findOne(a.parts[d]),b[d]=c;a.parts=b}}function X(a){var b=a.editables,c,d;a.editables={};if(a.editables)for(c in b)d=b[c],a.initEditable(c,"string"==typeof d?{selector:d}:d)}function S(a){if(!0===a.mask)W(a);else if(a.mask){var b=new CKEDITOR.tools.buffers.throttle(250,ea,a),c=CKEDITOR.env.gecko?300:0,d,e;a.on("focus",function(){b.input();d=a.editor.on("change",b.input);e=a.on("blur",function(){d.removeListener();e.removeListener()})}); -a.editor.on("instanceReady",function(){setTimeout(function(){b.input()},c)});a.editor.on("mode",function(){setTimeout(function(){b.input()},c)});if(CKEDITOR.env.gecko){var f=a.element.find("img");CKEDITOR.tools.array.forEach(f.toArray(),function(a){a.on("load",function(){b.input()})})}for(var g in a.editables)a.editables[g].on("focus",function(){a.editor.on("change",b.input);e&&e.removeListener()}),a.editables[g].on("blur",function(){a.editor.removeListener("change",b.input)});b.input()}}function W(a){var b= -a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}function ea(){if(this.wrapper){this.maskPart=this.maskPart||this.mask;var a=this.parts[this.maskPart],b;if(a){b=this.wrapper.findOne(".cke_widget_partial_mask");b||(b=new CKEDITOR.dom.element("img",this.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_partial_mask"}), -this.wrapper.append(b));this.mask=b;var c=b.$,d=a.$,e=!(c.offsetTop==d.offsetTop&&c.offsetLeft==d.offsetLeft);if(c.offsetWidth!=d.offsetWidth||c.offsetHeight!=d.offsetHeight||e)c=a.getParent(),d=CKEDITOR.plugins.widget.isDomWidget(c),b.setStyles({top:a.$.offsetTop+(d?0:c.$.offsetTop)+"px",left:a.$.offsetLeft+(d?0:c.$.offsetLeft)+"px",width:a.$.offsetWidth+"px",height:a.$.offsetHeight+"px"})}}}function L(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(h.isDomDragHandlerContainer),d;c?d=c.findOne("img"): -(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png);display:none;"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1",src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable", -"true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",T,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=c}}function T(a){function b(){var c;for(t.reset();c=h.pop();)c.removeListener();var d=k;c=a.sender;var e=this.repository.finder, -f=this.repository.liner,g=this.editor,l=this.editor.editable();CKEDITOR.tools.isEmpty(f.visible)||(d=e.getRange(d[0]),this.focus(),g.fire("drop",{dropRange:d,target:d.startContainer}));l.removeClass("cke_widget_dragging");f.hideVisible();g.fire("dragend",{target:c})}if(CKEDITOR.tools.getMouseButton(a)===CKEDITOR.MOUSE_BUTTON_LEFT){var c=this.repository.finder,d=this.repository.locator,e=this.repository.liner,f=this.editor,g=f.editable(),h=[],k=[],l,q;this.repository._.draggedWidget=this;var m=c.greedySearch(), -t=CKEDITOR.tools.eventsBuffer(50,function(){l=d.locate(m);k=d.sort(q,1);k.length&&(e.prepare(m,l),e.placeLine(k[0]),e.cleanup())});g.addClass("cke_widget_dragging");h.push(g.on("mousemove",function(a){q=a.data.$.clientY;t.input()}));f.fire("dragstart",{target:a.sender});h.push(f.document.once("mouseup",b,this));g.isInline()||h.push(CKEDITOR.document.once("mouseup",b,this))}}function Z(a){var b=null;a.on("data",function(){var a=this.data.classes,c;if(b!=a){for(c in b)a&&a[c]||this.removeClass(c);for(c in a)this.addClass(c); -b=a}})}function ca(a){a.on("data",function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function aa(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}function da(){function a(){}function b(a,c,d){return d&&this.checkElement(a)?(a=d.widgets.getByElement(a,!0))&&a.checkStyleActive(this): -!1}function c(a){function b(a,c,d){for(var e=a.length,f=0;f<e;){if(c.call(d,a[f],f,a))return a[f];f++}}function e(a){function b(a,c){var d=CKEDITOR.tools.object.keys(a),e=CKEDITOR.tools.object.keys(c);if(d.length!==e.length)return!1;for(var f in a)if(("object"!==typeof a[f]||"object"!==typeof c[f]||!b(a[f],c[f]))&&a[f]!==c[f])return!1;return!0}return function(c){return b(a.getDefinition(),c.getDefinition())}}var f=a.widget,g;d[f]||(d[f]={});for(var h=0,k=a.group.length;h<k;h++)g=a.group[h],d[f][g]|| -(d[f][g]=[]),g=d[f][g],b(g,e(a))||g.push(a)}var d={};CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget;(this.group="string"==typeof a.group?[a.group]:a.group)&&c(this)},apply:function(a){var b;a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&(b=a.widgets.focused,this.group&&this.removeStylesFromSameGroup(a),b.applyStyle(this))},remove:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)}, -removeStylesFromSameGroup:function(a){var b=!1,c,e;if(!(a instanceof CKEDITOR.editor))return!1;e=a.elementPath();if(this.checkApplicable(e,a))for(var f=0,g=this.group.length;f<g;f++){c=d[this.widget][this.group[f]];for(var h=0;h<c.length;h++)c[h]!==this&&c[h].checkActive(e,a)&&(a.widgets.focused.removeStyle(c[h]),b=!0)}return b},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},checkApplicable:function(a,b){return b instanceof CKEDITOR.editor?this.checkElement(a.lastElement): -!1},checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return h.isDomWidgetWrapper(a)?(a=a.getFirst(h.isDomWidgetElement))&&a.data("widget")==this.widget:!1},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;a=a.widgets.registered[this.widget];var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;c[a.styleableElements]={classes:b,propertiesOnly:!0};return c}return a.styleToAllowedContentRules? -a.styleToAllowedContentRules(this):null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})}CKEDITOR.plugins.add("widget",{requires:"lineutils,clipboard,widgetselection",onLoad:function(){void 0!==CKEDITOR.document.$.querySelectorAll&&(CKEDITOR.addCss('.cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid #ffd25c;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid #ffd25c}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #47a4f5}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:block;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}.cke_editable[contenteditable\x3d"false"] .cke_widget_drag_handler_container{display:none;}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_widget_partial_mask{position:absolute;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}'), -da())},beforeInit:function(a){void 0!==CKEDITOR.document.$.querySelectorAll&&(a.widgets=new b(a))},afterInit:function(a){if(void 0!==CKEDITOR.document.$.querySelectorAll){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});u(a);I(a.undoManager)}}});b.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(b,c){var d=this.editor;c=CKEDITOR.tools.prototypedCopy(c);c.name=b; -c._=c._||{};d.fire("widgetDefinition",c);c.template&&(c.template=new CKEDITOR.template(c.template));f(d,c);a(this,c);this.registered[b]=c;if(c.dialog&&d.plugins.dialog)var e=CKEDITOR.on("dialogDefinition",function(a){a=a.data.definition;var b=a.dialog;a.getMode||b.getName()!==c.dialog||(a.getMode=function(){var a=b.getModel(d);return a&&a instanceof CKEDITOR.plugins.widget&&a.ready?CKEDITOR.dialog.EDITING_MODE:CKEDITOR.dialog.CREATION_MODE});e.removeListener()});return c},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)}, -checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=C(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=h.isDomWidgetWrapper;b=a.next();)c.select(this.getByElement(b));c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===a){var b=a.editor,c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper, -!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&q(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,e=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var e=d.count(),f=0;f<e;++f)(c=this.getByElement(d.getItem(f),!0))&&this.destroy(c)}else for(d in e)c=e[d],this.destroy(c, -a)},finalizeCreation:function(a){(a=a.getFirst())&&h.isDomWidgetWrapper(a)&&(this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus())},getByElement:function(){function a(c){return c.is(b)&&c.data("cke-widget-id")}var b={div:1,span:1};return function(b,c){if(!b)return null;var d=a(b);if(!c&&!d){var e=this.editor.editable();do b=b.getParent();while(b&&!b.equals(e)&&!(d=a(b)))}return this.instances[d]||null}}(),initOn:function(a,b,c){b?"string"==typeof b&&(b=this.registered[b]): +g.setHtml(this.fillerContent);g.setAttribute(this.fillerAttribute,b?"end":"start");g.setAttribute("data-cke-temp",1);g.setStyles({display:"block",width:0,height:0,padding:0,border:0,margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return g},removeFiller:function(b,g){if(b){var e=g.editor,a=g.editor.getSelection().getRanges()[0].startPath(),m=e.createRange(),l,k;a.contains(b)&&(l=b.getHtml(),k=!0);a="start"==b.getAttribute(this.fillerAttribute);b.remove();l&&0<l.length&& +l!=this.fillerContent?(g.insertHtmlIntoRange(l,e.getSelection().getRanges()[0]),m.setStartAt(g.getChild(g.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),e.getSelection().selectRanges([m])):k&&(a?m.setStartAt(g.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):m.setEndAt(g.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),g.editor.getSelection().selectRanges([m]))}},createFillerRegex:function(b){var g=this.createFiller(b).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi, +"\x3e[^\x3c]*\x3c");return new RegExp((b?"":"^")+g+(b?"$":""))},addSelectAllIntegration:function(b){var g=this;b.editable().attachListener(b,"beforeCommandExec",function(e){var a=b.editable();"selectAll"==e.data.name&&a&&g.addFillers(a)},null,null,9999)}}})();"use strict";(function(){function b(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};E(this);A(this);this.on("checkWidgets", +l);this.editor.on("contentDomInvalidated",this.checkWidgets,this);C(this);y(this);u(this);z(this);B(this)}function h(a,b,c,d,f){var e=a.editor;CKEDITOR.tools.extend(this,d,{editor:e,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:h.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast? +d.downcasts[d.downcast]:d.downcast}},!0);a.fire("instanceCreated",this);O(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));f&&this.setData(f);this.data.classes||this.setData("classes",this.getClasses());this.dataReady=!0;da(this);this.fire("data",this.data);this.isInited()&&e.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function g(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a; +this._={};b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?(this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function e(a,b){a.addCommand(b.name,{exec:function(a,c){function d(){a.widgets.finalizeCreation(h)}var f=a.widgets.focused;if(f&&f.name==b.name)f.edit();else if(b.insert)b.insert({editor:a,commandData:c});else if(b.template){var f="function"== +typeof b.defaults?b.defaults():b.defaults,f=CKEDITOR.dom.element.createFromHtml(b.template.output(f),a.document),e,g=a.widgets.wrapElement(f,b.name),h=new CKEDITOR.dom.documentFragment(g.getDocument());h.append(g);(e=a.widgets.initOn(f,b,c&&c.startupData))?(f=e.once("edit",function(b){if(b.data.dialog)e.once("dialog",function(b){b=b.data;var c,f;c=b.once("ok",d,null,null,20);f=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(e,!0)});b.once("hide",function(){c.removeListener(); +f.removeListener()})});else d()},null,null,999),e.edit(),f.removeListener()):d()}},allowedContent:b.allowedContent,requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function a(a,b){function c(a,d){var f=b.upcast.split(","),e,g;for(g=0;g<f.length;g++)if(e=f[g],e===a.name)return b.upcasts[e].call(this,a,d);return!1}function d(b,c,f){var e=CKEDITOR.tools.getIndex(a._.upcasts,function(a){return a[2]>f});0>e&&(e=a._.upcasts.length);a._.upcasts.splice(e, +0,[CKEDITOR.tools.bind(b,c),c.name,f])}var f=b.upcast,e=b.upcastPriority||10;f&&("string"==typeof f?d(c,b,e):d(f,b,e))}function m(a,b){a.focused=null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function l(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,f,e,g;if(b){for(d in c)c[d].isReady()&&!b.contains(c[d].wrapper)&&this.destroy(c[d],!0);if(a&&a.initOnlyNew)c=this.initOnAll(); +else{var k=b.find(".cke_widget_wrapper"),c=[];d=0;for(f=k.count();d<f;d++){e=k.getItem(d);if(g=!this.getByElement(e,!0)){a:{g=r;for(var l=e;l=l.getParent();)if(g(l)){g=!0;break a}g=!1}g=!g}g&&b.contains(e)&&(e.addClass("cke_widget_new"),c.push(this.initOn(e.getFirst(h.isDomWidgetElement))))}}a&&a.focusInited&&1==c.length&&c[0].focus()}}}function k(a){if("undefined"!=typeof a.attributes&&a.attributes["data-widget"]){var b=c(a),d=f(a),e=!1;b&&b.value&&b.value.match(/^\s/g)&&(b.parent.attributes["data-cke-white-space-first"]= +1,b.value=b.value.replace(/^\s/g,"\x26nbsp;"),e=!0);d&&d.value&&d.value.match(/\s$/g)&&(d.parent.attributes["data-cke-white-space-last"]=1,d.value=d.value.replace(/\s$/g,"\x26nbsp;"),e=!0);e&&(a.attributes["data-cke-widget-white-space"]=1)}}function c(a){return a.find(function(a){return 3===a.type},!0).shift()}function f(a){return a.find(function(a){return 3===a.type},!0).pop()}function d(a,b,c){if(!c.allowedContent&&!c.disallowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d= +{});a=d[b];a||(a=c.allowedContent?new CKEDITOR.filter(c.allowedContent):this.editor.filter.clone(),d[b]=a,c.disallowedContent&&a.disallow(c.disallowedContent));return a}function n(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var f,e,g,k,l;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(h.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(l=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1; +k=0;for(f=d.length;k<f;++k)if(!1===d[k](a))return;for(k=0;k<l;++k)if(f=c[k],g={},e=f[0](a,g))return e instanceof CKEDITOR.htmlParser.element&&(a=e),a.attributes["data-cke-widget-data"]=encodeURIComponent(JSON.stringify(g)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,f[1]]),!1}}}}function w(a,b){return{tabindex:-1,contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")+(b?" cke_widget_"+b:"")}} +function v(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];if(d&&!d[c.name]){var d=a.split(b),f=a.parent;b=d.getIndex();a.children.length||(--b,a.remove());d.children.length||d.remove();return v(f,b,c)}}a.add(c,b)}function p(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function r(a){return a.hasAttribute("data-cke-temp")}function q(a,b,c,d){var f=a.editor;f.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable= +b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&f.setActiveFilter(d.filter),f.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"),b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,f.setActiveFilter(null),f.setActiveEnterMode(null,null));f.fire("unlockSnapshot")}function x(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function t(a, +b){return CKEDITOR.tools.trim(b)}function z(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("dragstart",function(c){var d=c.data.target;h.isDomDragHandler(d)&&(d=a.getByElement(d),c.data.dataTransfer.setData("cke/widget-id",d.id),b.focus(),d.focus())});b.on("drop",function(c){var d=c.data.dataTransfer,f=d.getData("cke/widget-id"),e=d.getTransferType(b),d=b.createRange();if(""!==f&&e===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS)c.cancel();else if(e==CKEDITOR.DATA_TRANSFER_INTERNAL)if(!f&&0<b.widgets.selected.length)c.data.dataTransfer.setData("text/html", +K(b));else if(f=a.instances[f])d.setStartBefore(f.wrapper),d.setEndAfter(f.wrapper),c.data.dragRange=d,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,c.data.dataTransfer.setData("text/html",f.getClipboardHtml()),b.widgets.destroy(f,!0)});b.on("contentDom",function(){var d=b.editable();CKEDITOR.tools.extend(a,{finder:new c.finder(b,{lookups:{"default":function(b){if(!b.is(CKEDITOR.dtd.$listItem)&&b.is(CKEDITOR.dtd.$block)&& +!h.isDomNestedEditable(b)&&!a._.draggedWidget.wrapper.contains(b)){var c=h.getNestedEditable(d,b);if(c){b=a._.draggedWidget;if(a.getByElement(c)==b)return;c=CKEDITOR.filter.instances[c.data("cke-filter")];b=b.requiredContent;if(c&&b&&!c.check(b))return}return CKEDITOR.LINEUTILS_BEFORE|CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})}, +!0)})}function y(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,f,e;c.attachListener(d,"mousedown",function(c){var d=c.data.getTarget();f=d instanceof CKEDITOR.dom.element?a.getByElement(d):null;e=0;f&&(f.inline&&d.type==CKEDITOR.NODE_ELEMENT&&d.hasAttribute("data-cke-widget-drag-handler")?(e=1,a.focused!=f&&b.getSelection().removeAllRanges()):h.getNestedEditable(f.wrapper,d)?f=null:(c.data.preventDefault(),CKEDITOR.env.ie||f.focus()))});c.attachListener(d, +"mouseup",function(){e&&f&&f.wrapper&&(e=0,f.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){setTimeout(function(){f&&f.wrapper&&c.contains(f.wrapper)&&(f.focus(),f=null)})})});b.on("doubleclick",function(b){var c=a.getByElement(b.data.element);if(c&&!h.getNestedEditable(c.wrapper,b.data.element))return c.fire("doubleclick",{element:b.data.element})},null,null,1)}function u(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,f;c?f=c.fire("key",{keyCode:b.data.keyCode}): +d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),f=!1):8==c||46==c?(f=d.editor.getSelection().getRanges(),d=f[0],f=!(1==f.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):f=void 0);return f},null,null,1)}function B(a){function b(d){1>a.selected.length||M(c,"cut"===d.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable(); +a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function C(a){function b(){var a=f.getSelection();if((a=(a&&a.getRanges())[0])&&!a.collapsed){var d=c(a.startContainer),e=c(a.endContainer);!d&&e?(a.setEndBefore(e.wrapper),a.select()):d&&!e&&(a.setStartAfter(d.wrapper),a.select())}}function c(a){return a?a.type==CKEDITOR.NODE_TEXT?c(a.getParent()):f.widgets.getByElement(a):null}function d(){a.fire("checkSelection")}var f=a.editor;f.on("selectionCheck",d);f.on("contentDom",function(){f.editable().attachListener(f, +"key",function(){setTimeout(d,10)})});if(!CKEDITOR.env.ie)a.on("checkSelection",b);a.on("checkSelection",a.checkSelection,a);f.on("selectionChange",function(b){var c=(b=h.getNestedEditable(f.editable(),b.data.selection.getStartElement()))&&a.getByElement(b),d=a.widgetHoldingFocusedEditable;d?d===c&&d.focusedEditable.equals(b)||(q(a,d,null),c&&b&&q(a,c,b)):c&&b&&q(a,c,b)});f.on("dataReady",function(){G(a).commit()});f.on("blur",function(){var b;(b=a.focused)&&m(a,b);(b=a.widgetHoldingFocusedEditable)&& +q(a,b,null)})}function A(a){var b=a.editor,d={};b.on("toDataFormat",function(b){var e=CKEDITOR.tools.getNextNumber(),g=[];b.data.downcastingSessionId=e;d[e]=g;b.data.dataValue.forEach(function(b){var d=b.attributes,e;if("data-cke-widget-white-space"in d){e=c(b);var k=f(b);e.parent.attributes["data-cke-white-space-first"]&&(e.value=e.value.replace(/^ /g," "));k.parent.attributes["data-cke-white-space-last"]&&(k.value=k.value.replace(/ $/g," "))}if("data-cke-widget-id"in d){if(d=a.instances[d["data-cke-widget-id"]])e= +b.getFirst(h.isParserWidgetElement),g.push({wrapper:b,element:e,widget:d,editables:{}}),"1"!=e.attributes["data-cke-widget-keep-attr"]&&delete e.attributes["data-widget"]}else if("data-cke-widget-editable"in d)return 0<g.length&&(g[g.length-1].editables[d["data-cke-widget-editable"]]=b),!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId)for(var b=d[a.data.downcastingSessionId],c,f,e,g,h,k;c=b.shift();){f=c.widget;e=c.element;g=f._.downcastFn&& +f._.downcastFn.call(f,e);a.data.widgetsCopy&&f.getClipboardHtml&&(g=CKEDITOR.htmlParser.fragment.fromHtml(f.getClipboardHtml()),g=g.children[0]);for(k in c.editables)h=c.editables[k],delete h.attributes.contenteditable,h.setHtml(f.editables[k].getData());g||(g=e);c.wrapper.replaceWith(g)}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function E(a){var b=a.editor,c,d;b.on("toHtml",function(b){var d=n(a),f;for(b.data.dataValue.forEach(d.iterator,CKEDITOR.NODE_ELEMENT,!0);f=d.toBeWrapped.pop();){var e= +f[0],g=e.parent;g.type==CKEDITOR.NODE_ELEMENT&&g.attributes["data-cke-widget-wrapper"]&&g.replaceWith(e);a.wrapElement(f[0],f[1])}c=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(d)for(var c=b.editable().find(".cke_widget_wrapper"),f,e,g=0,k=c.count();g<k;++g)f=c.getItem(g),e=f.getFirst(h.isDomWidgetElement), +e.type==CKEDITOR.NODE_ELEMENT&&e.data("widget")?(e.replace(f),a.wrapElement(e)):f.remove();d=0;a.destroyAll(!0);a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(d=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(S,t);a.range&&(a=h.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&b.setActiveFilter(a)});b.on("afterInsertHtml",function(d){d.data.intoRange?a.checkWidgets({initOnlyNew:!0}): +(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,focusInited:c}),b.fire("unlockSnapshot"))})}function G(a){var b=a.selected,c=[],d=b.slice(0),f=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){f=a;return this},commit:function(){var e=a.focused!==f,g,h;a.editor.fire("lockSnapshot");for(e&&(g=a.focused)&&m(a,g);g=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(h=g.editor.checkDirty(), +g.setSelected(!1),!h&&g.editor.resetDirty());e&&f&&(h=a.editor.checkDirty(),a.focused=f,a.fire("widgetFocused",{widget:f}),f.setFocused(!0),!h&&a.editor.resetDirty());for(;g=c.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function I(a){a&&a.addFilterRule(function(a){return a.replace(/\s*cke_widget_selected/g,"").replace(/\s*cke_widget_focused/g,"").replace(/<span[^>]*cke_widget_drag_handler_container[^>]*.*?<\/span>/gmi,"")})}function L(a,b,c){var d=0;b=H(b);var f=a.data.classes|| +{},e;if(b){for(f=CKEDITOR.tools.clone(f);e=b.pop();)c?f[e]||(d=f[e]=1):f[e]&&(delete f[e],d=1);d&&a.setData("classes",f)}}function F(a){a.cancel()}function M(a,b){var c=a.widgets.focused,d,f,e;U.hasCopyBin(a)||(f=new U(a,{beforeDestroy:function(){!b&&c&&c.focus();e&&a.getSelection().selectBookmarks(e);d&&CKEDITOR.plugins.widgetselection.addFillers(a.editable())},afterDestroy:function(){b&&!a.readOnly&&(c?a.widgets.del(c):a.extractSelectedHtml(),a.fire("saveSnapshot"))}}),c||(d=CKEDITOR.env.webkit&& +CKEDITOR.plugins.widgetselection.isWholeContentSelected(a.editable()),e=a.getSelection().createBookmarks(!0)),f.handle(K(a)))}function H(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function J(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function D(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(), +this.editor.selectionChange(1))}function K(a){var b=a.getSelectedHtml(!0);if(a.widgets.focused)return a.widgets.focused.getClipboardHtml();a.once("toDataFormat",function(a){a.data.widgetsCopy=!0},null,null,-1);return a.dataProcessor.toDataFormat(b)}function O(a,b){N(a);Y(a);R(a);W(a);T(a);ca(a);aa(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var c=b.data.getTarget();h.getNestedEditable(a,c)||a.inline&&h.isDomDragHandler(c)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new"); +a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){M(a.editor,b==CKEDITOR.CTRL+88);return}if(b in V||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function N(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function Y(a,b){a.partSelectors||(a.partSelectors= +a.parts);if(a.parts){var c={},d,f;for(f in a.partSelectors)b||!a.parts[f]||"string"==typeof a.parts[f]?(d=a.wrapper.findOne(a.partSelectors[f]),c[f]=d):c[f]=a.parts[f];a.parts=c}}function R(a){var b=a.editables,c,d;a.editables={};if(a.editables)for(c in b)d=b[c],a.initEditable(c,"string"==typeof d?{selector:d}:d)}function W(a){if(!0===a.mask)ea(a);else if(a.mask){var b=new CKEDITOR.tools.buffers.throttle(250,X,a),c=CKEDITOR.env.gecko?300:0,d,f;a.on("focus",function(){b.input();d=a.editor.on("change", +b.input);f=a.on("blur",function(){d.removeListener();f.removeListener()})});a.editor.on("instanceReady",function(){setTimeout(function(){b.input()},c)});a.editor.on("mode",function(){setTimeout(function(){b.input()},c)});if(CKEDITOR.env.gecko){var e=a.element.find("img");CKEDITOR.tools.array.forEach(e.toArray(),function(a){a.on("load",function(){b.input()})})}for(var g in a.editables)a.editables[g].on("focus",function(){a.editor.on("change",b.input);f&&f.removeListener()}),a.editables[g].on("blur", +function(){a.editor.removeListener("change",b.input)});b.input()}}function ea(a){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}function X(){if(this.wrapper){this.maskPart=this.maskPart||this.mask;var a=this.parts[this.maskPart],b;if(a&&"string"!=typeof a){b=this.wrapper.findOne(".cke_widget_partial_mask");b||(b=new CKEDITOR.dom.element("img", +this.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_partial_mask"}),this.wrapper.append(b));this.mask=b;var c=b.$,d=a.$,f=!(c.offsetTop==d.offsetTop&&c.offsetLeft==d.offsetLeft);if(c.offsetWidth!=d.offsetWidth||c.offsetHeight!=d.offsetHeight||f)c=a.getParent(),d=CKEDITOR.plugins.widget.isDomWidget(c),b.setStyles({top:a.$.offsetTop+(d?0:c.$.offsetTop)+"px",left:a.$.offsetLeft+(d?0:c.$.offsetLeft)+"px",width:a.$.offsetWidth+"px",height:a.$.offsetHeight+ +"px"})}}}function T(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(h.isDomDragHandlerContainer),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png);display:none;"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1", +src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",Z,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",function(a){a.data.preventDefault(!0)}); +a.dragHandlerContainer=c}}function Z(a){function b(){var c;for(t.reset();c=h.pop();)c.removeListener();var d=k;c=a.sender;var f=this.repository.finder,e=this.repository.liner,g=this.editor,l=this.editor.editable();CKEDITOR.tools.isEmpty(e.visible)||(d=f.getRange(d[0]),this.focus(),g.fire("drop",{dropRange:d,target:d.startContainer}));l.removeClass("cke_widget_dragging");e.hideVisible();g.fire("dragend",{target:c})}if(CKEDITOR.tools.getMouseButton(a)===CKEDITOR.MOUSE_BUTTON_LEFT){var c=this.repository.finder, +d=this.repository.locator,f=this.repository.liner,e=this.editor,g=e.editable(),h=[],k=[],l,m;this.repository._.draggedWidget=this;var q=c.greedySearch(),t=CKEDITOR.tools.eventsBuffer(50,function(){l=d.locate(q);k=d.sort(m,1);k.length&&(f.prepare(q,l),f.placeLine(k[0]),f.cleanup())});g.addClass("cke_widget_dragging");h.push(g.on("mousemove",function(a){m=a.data.$.clientY;t.input()}));e.fire("dragstart",{target:a.sender});h.push(e.document.once("mouseup",b,this));g.isInline()||h.push(CKEDITOR.document.once("mouseup", +b,this))}}function ca(a){var b=null;a.on("data",function(){var a=this.data.classes,c;if(b!=a){for(c in b)a&&a[c]||this.removeClass(c);for(c in a)this.addClass(c);b=a}})}function aa(a){a.on("data",function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function da(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))} +function ba(){function a(){}function b(a,c,d){return d&&this.checkElement(a)?(a=d.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}function c(a){function b(a,c,d){for(var f=a.length,e=0;e<f;){if(c.call(d,a[e],e,a))return a[e];e++}}function f(a){function b(a,c){var d=CKEDITOR.tools.object.keys(a),f=CKEDITOR.tools.object.keys(c);if(d.length!==f.length)return!1;for(var e in a)if(("object"!==typeof a[e]||"object"!==typeof c[e]||!b(a[e],c[e]))&&a[e]!==c[e])return!1;return!0}return function(c){return b(a.getDefinition(), +c.getDefinition())}}var e=a.widget,g;d[e]||(d[e]={});for(var h=0,k=a.group.length;h<k;h++)g=a.group[h],d[e][g]||(d[e][g]=[]),g=d[e][g],b(g,f(a))||g.push(a)}var d={};CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget;(this.group="string"==typeof a.group?[a.group]:a.group)&&c(this)},apply:function(a){var b;a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&(b=a.widgets.focused,this.group&&this.removeStylesFromSameGroup(a),b.applyStyle(this))},remove:function(a){a instanceof +CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)},removeStylesFromSameGroup:function(a){var b=!1,c,f;if(!(a instanceof CKEDITOR.editor))return!1;f=a.elementPath();if(this.checkApplicable(f,a))for(var e=0,g=this.group.length;e<g;e++){c=d[this.widget][this.group[e]];for(var h=0;h<c.length;h++)c[h]!==this&&c[h].checkActive(f,a)&&(a.widgets.focused.removeStyle(c[h]),b=!0)}return b},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)}, +checkApplicable:function(a,b){return b instanceof CKEDITOR.editor?this.checkElement(a.lastElement):!1},checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return h.isDomWidgetWrapper(a)?(a=a.getFirst(h.isDomWidgetElement))&&a.data("widget")==this.widget:!1},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;a=a.widgets.registered[this.widget];var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null; +c[a.styleableElements]={classes:b,propertiesOnly:!0};return c}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this):null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})}CKEDITOR.plugins.add("widget",{requires:"lineutils,clipboard,widgetselection",onLoad:function(){void 0!==CKEDITOR.document.$.querySelectorAll&&(CKEDITOR.addCss('.cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid #ffd25c;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid #ffd25c}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #47a4f5}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:block;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}.cke_editable[contenteditable\x3d"false"] .cke_widget_drag_handler_container{display:none;}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_widget_partial_mask{position:absolute;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}'), +ba())},beforeInit:function(a){void 0!==CKEDITOR.document.$.querySelectorAll&&(a.widgets=new b(a))},afterInit:function(a){if(void 0!==CKEDITOR.document.$.querySelectorAll){var b=a.widgets.registered,c,d,f;for(d in b)c=b[d],(f=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:f,command:c.name,toolbar:"insert,10"});x(a);I(a.undoManager)}}});b.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(b,c){var d=this.editor;c=CKEDITOR.tools.prototypedCopy(c);c.name=b; +c._=c._||{};d.fire("widgetDefinition",c);c.template&&(c.template=new CKEDITOR.template(c.template));e(d,c);a(this,c);this.registered[b]=c;if(c.dialog&&d.plugins.dialog)var f=CKEDITOR.on("dialogDefinition",function(a){a=a.data.definition;var b=a.dialog;a.getMode||b.getName()!==c.dialog||(a.getMode=function(){var a=b.getModel(d);return a&&a instanceof CKEDITOR.plugins.widget&&a.ready?CKEDITOR.dialog.EDITING_MODE:CKEDITOR.dialog.CREATION_MODE});f.removeListener()});return c},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)}, +checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=G(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=h.isDomWidgetWrapper;b=a.next();)c.select(this.getByElement(b));c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===a){var b=a.editor,c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper, +!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&q(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,f=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var f=d.count(),e=0;e<f;++e)(c=this.getByElement(d.getItem(e),!0))&&this.destroy(c)}else for(d in f)c=f[d],this.destroy(c, +a)},finalizeCreation:function(a){(a=a.getFirst())&&h.isDomWidgetWrapper(a)&&(this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus())},getByElement:function(){function a(c){return c.is(b)&&c.data("cke-widget-id")}var b={div:1,span:1};return function(b,c){if(!b)return null;var d=a(b);if(!c&&!d){var f=this.editor.editable();do b=b.getParent();while(b&&!b.equals(f)&&!(d=a(b)))}return this.instances[d]||null}}(),initOn:function(a,b,c){b?"string"==typeof b&&(b=this.registered[b]): b=this.registered[a.data("widget")];if(!b)return null;var d=this.wrapElement(a,b.name);return d?d.hasClass("cke_widget_new")?(a=new h(this,this._.nextId++,a,b,c),a.isInited()?this.instances[a.id]=a:null):this.getByElement(a):null},initOnAll:function(a){a=(a||this.editor.editable()).find(".cke_widget_new");for(var b=[],c,d=a.count();d--;)(c=this.initOn(a.getItem(d).getFirst(h.isDomWidgetElement)))&&b.push(c);return b},onWidget:function(a){var b=Array.prototype.slice.call(arguments);b.shift();for(var c in this.instances){var d= -this.instances[c];d.name==a&&d.on.apply(d,b)}this.on("instanceCreated",function(c){c=c.data;c.name==a&&c.on.apply(c,b)})},parseElementClasses:function(a){if(!a)return null;a=CKEDITOR.tools.trim(a).split(/\s+/);for(var b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,b){var c=null,d,e;if(a instanceof CKEDITOR.dom.element){b=b||a.data("widget");d=this.registered[b];if(!d)return null;if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c; -a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);a.data("widget",b);(e=r(d,a.getName()))&&l(a);c=new CKEDITOR.dom.element(e?"span":"div",a.getDocument());c.setAttributes(w(e,b));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){b=b||a.attributes["data-widget"];d=this.registered[b];if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&& -c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]=b);(e=r(d,a.name))&&l(a);c=new CKEDITOR.htmlParser.element(e?"span":"div",w(e,b));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var f;d&&(f=a.getIndex(),a.remove());c.add(a);d&&z(d,f,c)}return c},_tests_createEditableFilter:c};CKEDITOR.event.implementOn(b.prototype);h.prototype= -{addClass:function(a){this.element.addClass(a);this.wrapper.addClass(h.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){J(this,a,1)},checkStyleActive:function(a){a=H(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),this.element.removeAttributes(["data-cke-widget-data", -"data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a],d=!0;c.removeListener("focus",Q);c.removeListener("blur",E);this.editor.focusManager.remove(c);if(c.filter){for(var e in this.repository.instances){var f=this.repository.instances[e];f.editables&&(f=f.editables[a])&&f!==c&&c.filter===f.filter&&(d=!1)}d&&(c.filter.destroy(),(d=this.repository._.filters[this.name])&& +this.instances[c];d.name==a&&d.on.apply(d,b)}this.on("instanceCreated",function(c){c=c.data;c.name==a&&c.on.apply(c,b)})},parseElementClasses:function(a){if(!a)return null;a=CKEDITOR.tools.trim(a).split(/\s+/);for(var b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,b){var c=null,d,f;if(a instanceof CKEDITOR.dom.element){b=b||a.data("widget");d=this.registered[b];if(!d)return null;if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c; +a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);a.data("widget",b);(f=p(d,a.getName()))&&k(a);c=new CKEDITOR.dom.element(f?"span":"div",a.getDocument());c.setAttributes(w(f,b));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){b=b||a.attributes["data-widget"];d=this.registered[b];if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&& +c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]=b);(f=p(d,a.name))&&k(a);c=new CKEDITOR.htmlParser.element(f?"span":"div",w(f,b));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var e;d&&(e=a.getIndex(),a.remove());c.add(a);d&&v(d,e,c)}return c},_tests_createEditableFilter:d};CKEDITOR.event.implementOn(b.prototype);h.prototype= +{addClass:function(a){this.element.addClass(a);this.wrapper.addClass(h.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){L(this,a,1)},checkStyleActive:function(a){a=H(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),this.element.removeAttributes(["data-cke-widget-data", +"data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a],d=!0;c.removeListener("focus",D);c.removeListener("blur",J);this.editor.focusManager.remove(c);if(c.filter){for(var f in this.repository.instances){var e=this.repository.instances[f];e.editables&&(e=e.editables[a])&&e!==c&&c.filter===e.filter&&(d=!1)}d&&(c.filter.destroy(),(d=this.repository._.filters[this.name])&& delete d[a])}b||(this.repository.destroyAll(!1,c),c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable","data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var c,d;!1!==b.fire("dialog",a)&&(c=a.on("show",function(){a.setupContent(b)}),d=a.on("ok",function(){var c,d=b.on("data", function(a){c=1;a.cancel()},null,null,0);b.editor.fire("saveSnapshot");a.commitContent(b);d.removeListener();c&&(b.fire("data",b.data),b.editor.fire("saveSnapshot"))}),a.once("hide",function(){c.removeListener();d.removeListener()}))},b);return!0},getClasses:function(){return this.repository.parseElementClasses(this.element.getAttribute("class"))},getClipboardHtml:function(){var a=this.editor.createRange();a.setStartBefore(this.wrapper);a.setEndAfter(this.wrapper);return this.editor.editable().getHtmlFromRange(a).getHtml()}, -hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var d=this._findOneNotNested(b.selector);return d&&d.is(CKEDITOR.dtd.$editable)?(d=new g(this.editor,d,{filter:c.call(this.repository,this.name,a,b)}),this.editables[a]=d,d.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":d.enterMode}),d.filter&&d.data("cke-filter",d.filter.id),d.addClass("cke_widget_editable"),d.removeClass("cke_widget_editable_focused"),b.pathName&&d.data("cke-display-name", -b.pathName),this.editor.focusManager.add(d),d.on("focus",Q,this),CKEDITOR.env.ie&&d.on("blur",E,this),d._.initialSetData=!0,d.setData(d.getHtml()),!0):!1},_findOneNotNested:function(a){a=this.wrapper.find(a);for(var b,c,d=0;d<a.count();d++)if(b=a.getItem(d),c=b.getAscendant(h.isDomWidgetWrapper),this.wrapper.equals(c))return b;return null},isInited:function(){return!(!this.wrapper||!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection(); -if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(h.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){J(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=e[a])}d&&this.dataReady&&(aa(this),this.fire("data",c));return this},setFocused:function(a){this.wrapper[a?"addClass": -"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,b={x:b.offsetLeft,y:b.offsetTop-15};c&&b.x==c.x&&b.y==c.y||(c=a.checkDirty(),a.fire("lockSnapshot"),this.dragHandlerContainer.setStyles({top:b.y+"px",left:b.x+"px"}),this.dragHandlerContainer.removeStyle("display"), -a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b)}};CKEDITOR.event.implementOn(h.prototype);h.getNestedEditable=function(a,b){return!b||b.equals(a)?null:h.isDomNestedEditable(b)?b:h.getNestedEditable(a,b.getParent())};h.isDomDragHandler=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-drag-handler")};h.isDomDragHandlerContainer=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")};h.isDomNestedEditable= -function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")};h.isDomWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-widget")};h.isDomWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")};h.isDomWidget=function(a){return a?this.isDomWidgetWrapper(a)||this.isDomWidgetElement(a):!1};h.isParserWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]}; -h.isParserWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-cke-widget-wrapper"]};h.WRAPPER_CLASS_PREFIX="cke_widget_wrapper_";g.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.dom.element.prototype),{setData:function(a){this._.initialSetData||this.editor.widgets.destroyAll(!1,this);this._.initialSetData=!1;a=this.editor.dataProcessor.toHtml(a,{context:this.getName(),filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)}, -getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(),filter:this.filter,enterMode:this.enterMode})}});var ba=/^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i,R={37:1,38:1,39:1,40:1,8:1,46:1};R[CKEDITOR.SHIFT+121]= -1;var U=CKEDITOR.tools.createClass({$:function(a,b){this._.createCopyBin(a,b);this._.createListeners(b)},_:{createCopyBin:function(a){var b=a.document,c=CKEDITOR.env.edge&&16<=CKEDITOR.env.version,d=!a.blockless&&!CKEDITOR.env.ie||c?"div":"span",c=b.createElement(d),b=b.createElement(d);b.setAttributes({id:"cke_copybin","data-cke-temp":"1"});c.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});c.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-5000px");this.editor= -a;this.copyBin=c;this.container=b},createListeners:function(a){a&&(a.beforeDestroy&&(this.beforeDestroy=a.beforeDestroy),a.afterDestroy&&(this.afterDestroy=a.afterDestroy))}},proto:{handle:function(a){var b=this.copyBin,c=this.editor,d=this.container,e=CKEDITOR.env.ie&&9>CKEDITOR.env.version,f=c.document.getDocumentElement().$,g=c.createRange(),h=this,k=CKEDITOR.env.mac&&CKEDITOR.env.webkit,l=k?100:0,q=window.requestAnimationFrame&&!k?requestAnimationFrame:setTimeout,m,t,n;b.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e\x3c/span\x3e'+ -a+'\x3cspan data-cke-copybin-end\x3d"1"\x3e\x3c/span\x3e');c.fire("lockSnapshot");d.append(b);c.editable().append(d);m=c.on("selectionChange",F,null,null,0);t=c.widgets.on("checkSelection",F,null,null,0);e&&(n=f.scrollTop);g.selectNodeContents(b);g.select();e&&(f.scrollTop=n);return new CKEDITOR.tools.promise(function(a){q(function(){h.beforeDestroy&&h.beforeDestroy();d.remove();m.removeListener();t.removeListener();c.fire("unlockSnapshot");h.afterDestroy&&h.afterDestroy();a()},l)})}},statics:{hasCopyBin:function(a){return!!U.getCopyBin(a)}, -getCopyBin:function(a){return a.document.getById("cke_copybin")}}});CKEDITOR.plugins.widget=h;h.repository=b;h.nestedEditable=g})();"use strict";(function(){function b(a){function b(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),this.deflated=!0)}function d(){var b=a.editable(),c=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,b)).block&& -(b=c.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),b.replace(this.widget.wrapper),this.widget.wrapper.move(b)),this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var e=this.widget,b=f,c=e.wrapper,g=e.data.align,e=e.data.hasCaption;if(b){for(var h=3;h--;)c.removeClass(b[h]);"center"==g?e&&c.addClass(b[1]):"none"!=g&&c.addClass(b[z[g]])}else"center"==g?(e?c.setStyle("text-align","center"):c.removeStyle("text-align"),c.removeStyle("float")):("none"==g?c.removeStyle("float"): -c.setStyle("float",g),c.removeStyle("text-align"))}}var f=a.config.image2_alignClasses,k=a.config.image2_captionedClass;return{allowedContent:e(a),requiredContent:"img[src,alt]",features:c(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href,target]"}},parts:{image:"img",caption:"figcaption"},dialog:"image2",template:'\x3cimg alt\x3d"" src\x3d"" /\x3e',data:function(){var c= -this.features;this.data.hasCaption&&!a.filter.checkFeature(c.caption)&&(this.data.hasCaption=!1);"none"==this.data.align||a.filter.checkFeature(c.align)||(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:b,inflate:d});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt}); -if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var e in this.data.classes)this.parts.image.removeClass(e);if(a.filter.checkFeature(c.dimension)){c=this.data;c={width:c.width,height:c.height};e=this.parts.image;for(var f in c)c[f]?e.setAttribute(f,c[f]):e.removeAttribute(f)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2,c=this.parts.image,d={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"", -width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},e=c.getAscendant("a");e&&this.wrapper.contains(e)&&(this.parts.link=e);d.align||(c=d.hasCaption?this.element:c,f?(c.hasClass(f[0])?d.align="left":c.hasClass(f[2])&&(d.align="right"),d.align?c.removeClass(f[z[d.align]]):d.align="none"):(d.align=c.getStyle("float")||"none",c.removeStyle("float")));a.plugins.link&&this.parts.link&&(d.link=b.getLinkAttributesParser()(a,this.parts.link), -(c=d.link.advanced)&&c.advCSSClasses&&(c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(d.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(d);a.filter.checkFeature(this.features.dimension)&&!0!==a.config.image2_disableResizer&&m(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF;if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF})}, -addClass:function(a){n(this).addClass(a)},hasClass:function(a){return n(this).hasClass(a)},removeClass:function(a){n(this).removeClass(a)},getClasses:function(){var a=new RegExp("^("+[].concat(k,f).join("|")+")$");return function(){var b=this.repository.parseElementClasses(n(this).getAttribute("class")),c;for(c in b)a.test(c)&&delete b[c];return b}}(),upcast:h(a),downcast:g(a),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/,(this.data.alt||"")+" "+this.pathName)}}}function h(b){var c= -f(b),d=b.config.image2_captionedClass;return function(b,e){var f={width:1,height:1},g=b.name,h;if(!b.attributes["data-cke-realelement"]&&(c(b)?("div"==g&&(h=b.getFirst("figure"))&&(b.replaceWith(h),b=h),e.align="center",h=b.getFirst("img")||b.getFirst("a").getFirst("img")):"figure"==g&&b.hasClass(d)?h=b.find(function(a){return"img"===a.name&&-1!==CKEDITOR.tools.array.indexOf(["figure","a"],a.parent.name)},!0)[0]:a(b)&&(h="a"==b.name?b.children[0]:b),h)){for(var k in f)(f=h.attributes[k])&&f.match(r)&& -delete h.attributes[k];return b}}}function g(a){var b=a.config.image2_alignClasses;return function(a){var c="a"==a.name?a.getFirst():a,d=c.attributes,e=this.data.align;if(!this.inline){var f=a.getFirst("span");f&&f.replaceWith(f.getFirst({img:1,a:1}))}e&&"none"!=e&&(f=CKEDITOR.tools.parseCssText(d.style||""),"center"==e&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):e in{left:1,right:1}&&(b?c.addClass(b[z[e]]):f["float"]=e),b||CKEDITOR.tools.isEmpty(f)|| -(d.style=CKEDITOR.tools.writeCssText(f)));return a}}function f(b){var c=b.config.image2_captionedClass,d=b.config.image2_alignClasses,e={figure:1,a:1,img:1};return function(f){if(!(f.name in{div:1,p:1}))return!1;var g=f.children;if(1!==g.length)return!1;g=g[0];if(!(g.name in e))return!1;if("p"==f.name){if(!a(g))return!1}else if("figure"==g.name){if(!g.hasClass(c))return!1}else if(b.enterMode==CKEDITOR.ENTER_P||!a(g))return!1;return(d?f.hasClass(d[1]):"center"==CKEDITOR.tools.parseCssText(f.attributes.style|| -"",!0)["text-align"])?!0:!1}}function a(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function m(a){var b=a.editor,c=b.editable(),d=b.document,e=a.resizer=d.createElement("span");e.addClass("cke_image_resizer");e.setAttribute("title",b.lang.image2.resizer);e.append(new CKEDITOR.dom.text("",d));if(a.inline)a.wrapper.append(e);else{var f=a.parts.link||a.parts.image,g=f.getParent(),h=d.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(f);h.append(e); -a.element.append(h,!0);g.is("span")&&g.remove()}e.on("mousedown",function(f){function g(a,b,c){var e=CKEDITOR.document,f=[];d.equals(e)||f.push(e.on(a,b));f.push(d.on(a,b));if(c)for(a=f.length;a--;)c.push(f.pop())}function h(){S=x+n*L;W=Math.round(S/r)}function k(){W=w-T;S=Math.round(W*r)}var l=a.parts.image,m=function(){var a=b.config.image2_maxSize,c;if(!a)return null;a=CKEDITOR.tools.copy(a);c=CKEDITOR.plugins.image2.getNatural(l);a.width=Math.max("natural"===a.width?c.width:a.width,15);a.height= -Math.max("natural"===a.height?c.height:a.height,15);return a}(),n="right"==a.data.align?-1:1,B=f.data.$.screenX,v=f.data.$.screenY,x=l.$.clientWidth,w=l.$.clientHeight,r=x/w,z=[],K="cke_image_s"+(~n?"e":"w"),X,S,W,ea,L,T,Z;b.fire("saveSnapshot");g("mousemove",function(a){X=a.data.$;L=X.screenX-B;T=v-X.screenY;Z=Math.abs(L/T);1==n?0>=L?0>=T?h():Z>=r?h():k():0>=T?Z>=r?k():h():k():0>=L?0>=T?Z>=r?k():h():k():0>=T?h():Z>=r?h():k();a=m&&(S>m.width||W>m.height);15>S||15>W||a||(ea={width:S,height:W},l.setAttributes(ea))}, -z);g("mouseup",function(){for(var d;d=z.pop();)d.removeListener();c.removeClass(K);e.removeClass("cke_image_resizing");ea&&(a.setData(ea),b.fire("saveSnapshot"));ea=!1},z);c.addClass(K);e.addClass("cke_image_resizing")});a.on("data",function(){e["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function k(a){var b=[],c;return function(e){var f=a.getCommand("justify"+e);if(f){b.push(function(){f.refresh(a,a.elementPath())});if(e in{right:1,left:1,center:1})f.on("exec",function(c){var f= -d(a);if(f){f.setData("align",e);for(f=b.length;f--;)b[f]();c.cancel()}});f.on("refresh",function(b){var f=d(a),g={right:1,left:1,center:1};f&&(void 0===c&&(c=a.filter.checkFeature(a.widgets.registered.image.features.align)),c?this.setState(f.data.align==e?CKEDITOR.TRISTATE_ON:e in g?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}function l(a){if(a.plugins.link){var b=CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){b= -b.definition;var c=b.onShow,e=b.onOk;b.onShow=function(){var b=d(a),e=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),e.hide()):(e.show(),c.apply(this,arguments))};b.onOk=function(){var b=d(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var c={};this.commitContent(c);b.setData("link",c)}else e.apply(this,arguments)}}});a.on("destroy",function(){b.removeListener()});a.getCommand("unlink").on("exec", -function(b){var c=d(a);c&&c.parts.link&&(c.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())});a.getCommand("unlink").on("refresh",function(b){var c=d(a);c&&(this.setState(c.data.link||c.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}function d(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function e(a){var b=a.config.image2_alignClasses;a={div:{match:f(a)},p:{match:f(a)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+ -a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles="text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles="float,display");return a}function c(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a?"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function n(a){return a.data.hasCaption? -a.element:a.parts.image}var w=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),z={left:0,center:1,right:2},r=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss('.cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_editable[contenteditable\x3d"false"] .cke_image_resizer{display:none;}.cke_widget_wrapper\x3ea{display:inline-block}')}, -init:function(a){if(!a.plugins.detectConflict("image2",["easyimage"])){var c=a.config,d=a.lang.image2,e=b(a);c.filebrowserImage2BrowseUrl=c.filebrowserImageBrowseUrl;c.filebrowserImage2UploadUrl=c.filebrowserImageUploadUrl;e.pathName=d.pathName;e.editables.caption.pathName=d.pathNameCaption;a.widgets.add("image",e);a.ui.addButton&&a.ui.addButton("Image",{label:a.lang.common.image,command:"image",toolbar:"insert,10"});a.contextMenu&&(a.addMenuGroup("image",10),a.addMenuItem("image",{label:d.menu,command:"image", -group:"image"}));CKEDITOR.dialog.add("image2",this.path+"dialogs/image2.js")}},afterInit:function(a){var b={left:1,right:1,center:1,block:1},c=k(a),d;for(d in b)c(d);l(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,f){var g={};e?g.attributes={"class":e[1]}:g.styles={"text-align":"center"};g=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",g);c(g,f);f.move(g);return g}function c(b,d){if(d.getParent()){var e=a.createRange();e.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START); -d.remove();g.insertElementIntoRange(b,e)}else b.replace(d)}var d=a.document,e=a.config.image2_alignClasses,f=a.config.image2_captionedClass,g=a.editable(),h=["hasCaption","align","link"],k={align:function(c,d,f){var g=c.element;c.changed.align?c.newData.hasCaption||("center"==f&&(c.deflate(),c.element=b(a,g)),c.changed.hasCaption||"center"!=d||"center"==f||(c.deflate(),d=g.findOne("a,img"),d.replace(g),c.element=d)):"center"==f&&c.changed.hasCaption&&!c.newData.hasCaption&&(c.deflate(),c.element= -b(a,g));!e&&g.is("figure")&&("center"==f?g.setStyle("display","inline-block"):g.removeStyle("display"))},hasCaption:function(b,e,g){b.changed.hasCaption&&(e=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(w.output({captionedClass:f,captionPlaceholder:a.lang.image2.captionPlaceholder}),d),c(g,b.element),e.replace(g.findOne("img")),b.element=g):(e.replace(b.element),b.element=e))},link:function(b,c,e){if(b.changed.link){var f=b.element.is("img")? -b.element:b.element.findOne("img"),g=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!e||b.element.is("img")&&e,k;h&&b.deflate();e?(c||(k=d.createElement("a",{attributes:{href:b.newData.link.url}}),k.replace(f),f.move(k)),e=CKEDITOR.plugins.image2.getLinkAttributesGetter()(a,e),CKEDITOR.tools.isEmpty(e.set)||(k||g).setAttributes(e.set),e.removed.length&&(k||g).removeAttributes(e.removed)):(e=g.findOne("img"),e.replace(g),k=e);h&&(b.element=k)}}};return function(a){var b,c; +hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var c=this._findOneNotNested(b.selector);return c&&c.is(CKEDITOR.dtd.$editable)?(c=new g(this.editor,c,{filter:d.call(this.repository,this.name,a,b)}),this.editables[a]=c,c.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":c.enterMode}),c.filter&&c.data("cke-filter",c.filter.id),c.addClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),b.pathName&&c.data("cke-display-name", +b.pathName),this.editor.focusManager.add(c),c.on("focus",D,this),CKEDITOR.env.ie&&c.on("blur",J,this),c._.initialSetData=!0,c.setData(c.getHtml()),!0):!1},_findOneNotNested:function(a){a=this.wrapper.find(a);for(var b,c,d=0;d<a.count();d++)if(b=a.getItem(d),c=b.getAscendant(h.isDomWidgetWrapper),this.wrapper.equals(c))return b;return null},isInited:function(){return!(!this.wrapper||!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection(); +if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},refreshMask:function(){W(this)},refreshParts:function(a){Y(this,"undefined"!==typeof a?a:!0)},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(h.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){L(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var f=a;for(a in f)c[a]!==f[a]&&(d=1,c[a]=f[a])}d&&this.dataReady&& +(da(this),this.fire("data",c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,b={x:b.offsetLeft,y:b.offsetTop-15};c&&b.x==c.x&&b.y==c.y||(c=a.checkDirty(),a.fire("lockSnapshot"), +this.dragHandlerContainer.setStyles({top:b.y+"px",left:b.x+"px"}),this.dragHandlerContainer.removeStyle("display"),a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b)}};CKEDITOR.event.implementOn(h.prototype);h.getNestedEditable=function(a,b){return!b||b.equals(a)?null:h.isDomNestedEditable(b)?b:h.getNestedEditable(a,b.getParent())};h.isDomDragHandler=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-drag-handler")};h.isDomDragHandlerContainer=function(a){return a.type== +CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")};h.isDomNestedEditable=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")};h.isDomWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-widget")};h.isDomWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")};h.isDomWidget=function(a){return a?this.isDomWidgetWrapper(a)||this.isDomWidgetElement(a):!1};h.isParserWidgetElement= +function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]};h.isParserWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-cke-widget-wrapper"]};h.WRAPPER_CLASS_PREFIX="cke_widget_wrapper_";g.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.dom.element.prototype),{setData:function(a){this._.initialSetData||this.editor.widgets.destroyAll(!1,this);this._.initialSetData=!1;a=this.editor.dataProcessor.toHtml(a,{context:this.getName(), +filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)},getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(),filter:this.filter,enterMode:this.enterMode})}});var S=/^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i, +V={37:1,38:1,39:1,40:1,8:1,46:1};V[CKEDITOR.SHIFT+121]=1;var U=CKEDITOR.tools.createClass({$:function(a,b){this._.createCopyBin(a,b);this._.createListeners(b)},_:{createCopyBin:function(a){var b=a.document,c=CKEDITOR.env.edge&&16<=CKEDITOR.env.version,d=!a.blockless&&!CKEDITOR.env.ie||c?"div":"span",c=b.createElement(d),b=b.createElement(d);b.setAttributes({id:"cke_copybin","data-cke-temp":"1"});c.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});c.setStyle("ltr"==a.config.contentsLangDirection? +"left":"right","-5000px");this.editor=a;this.copyBin=c;this.container=b},createListeners:function(a){a&&(a.beforeDestroy&&(this.beforeDestroy=a.beforeDestroy),a.afterDestroy&&(this.afterDestroy=a.afterDestroy))}},proto:{handle:function(a){var b=this.copyBin,c=this.editor,d=this.container,f=CKEDITOR.env.ie&&9>CKEDITOR.env.version,e=c.document.getDocumentElement().$,g=c.createRange(),h=this,k=CKEDITOR.env.mac&&CKEDITOR.env.webkit,l=k?100:0,m=window.requestAnimationFrame&&!k?requestAnimationFrame:setTimeout, +q,t,u;b.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e\x3c/span\x3e'+a+'\x3cspan data-cke-copybin-end\x3d"1"\x3e\x3c/span\x3e');c.fire("lockSnapshot");d.append(b);c.editable().append(d);q=c.on("selectionChange",F,null,null,0);t=c.widgets.on("checkSelection",F,null,null,0);f&&(u=e.scrollTop);g.selectNodeContents(b);g.select();f&&(e.scrollTop=u);return new CKEDITOR.tools.promise(function(a){m(function(){h.beforeDestroy&&h.beforeDestroy();d.remove();q.removeListener();t.removeListener();c.fire("unlockSnapshot"); +h.afterDestroy&&h.afterDestroy();a()},l)})}},statics:{hasCopyBin:function(a){return!!U.getCopyBin(a)},getCopyBin:function(a){return a.document.getById("cke_copybin")}}});CKEDITOR.plugins.widget=h;h.repository=b;h.nestedEditable=g})();"use strict";(function(){function b(a){function b(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),this.deflated=!0)}function c(){var b=a.editable(),d=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element, +"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,b)).block&&(b=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),b.replace(this.widget.wrapper),this.widget.wrapper.move(b)),this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var f=this.widget,b=e,d=f.wrapper,g=f.data.align,f=f.data.hasCaption;if(b){for(var h=3;h--;)d.removeClass(b[h]);"center"==g?f&&d.addClass(b[1]):"none"!=g&&d.addClass(b[v[g]])}else"center"== +g?(f?d.setStyle("text-align","center"):d.removeStyle("text-align"),d.removeStyle("float")):("none"==g?d.removeStyle("float"):d.setStyle("float",g),d.removeStyle("text-align"))}}var e=a.config.image2_alignClasses,k=a.config.image2_captionedClass;return{allowedContent:f(a),requiredContent:"img[src,alt]",features:d(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href,target]"}}, +parts:{image:"img",caption:"figcaption"},dialog:"image2",template:'\x3cimg alt\x3d"" src\x3d"" /\x3e',data:function(){var d=this.features;this.data.hasCaption&&!a.filter.checkFeature(d.caption)&&(this.data.hasCaption=!1);"none"==this.data.align||a.filter.checkFeature(d.align)||(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:b,inflate:c});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&& +delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt});if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var f in this.data.classes)this.parts.image.removeClass(f);if(a.filter.checkFeature(d.dimension)){d=this.data;d={width:d.width,height:d.height};f=this.parts.image;for(var e in d)d[e]?f.setAttribute(e,d[e]):f.removeAttribute(e)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2, +c=this.parts.image,d={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"",width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},f=c.getAscendant("a");f&&this.wrapper.contains(f)&&(this.parts.link=f);d.align||(c=d.hasCaption?this.element:c,e?(c.hasClass(e[0])?d.align="left":c.hasClass(e[2])&&(d.align="right"),d.align?c.removeClass(e[v[d.align]]):d.align="none"):(d.align=c.getStyle("float")||"none",c.removeStyle("float"))); +a.plugins.link&&this.parts.link&&(d.link=b.getLinkAttributesParser()(a,this.parts.link),(c=d.link.advanced)&&c.advCSSClasses&&(c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(d.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(d);a.filter.checkFeature(this.features.dimension)&&!0!==a.config.image2_disableResizer&&m(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF; +if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF})},addClass:function(a){n(this).addClass(a)},hasClass:function(a){return n(this).hasClass(a)},removeClass:function(a){n(this).removeClass(a)},getClasses:function(){var a=new RegExp("^("+[].concat(k,e).join("|")+")$");return function(){var b=this.repository.parseElementClasses(n(this).getAttribute("class")),c;for(c in b)a.test(c)&&delete b[c];return b}}(),upcast:h(a),downcast:g(a),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/, +(this.data.alt||"")+" "+this.pathName)}}}function h(b){var c=e(b),d=b.config.image2_captionedClass;return function(b,f){var e={width:1,height:1},g=b.name,h;if(!b.attributes["data-cke-realelement"]&&(c(b)?("div"==g&&(h=b.getFirst("figure"))&&(b.replaceWith(h),b=h),f.align="center",h=b.getFirst("img")||b.getFirst("a").getFirst("img")):"figure"==g&&b.hasClass(d)?h=b.find(function(a){return"img"===a.name&&-1!==CKEDITOR.tools.array.indexOf(["figure","a"],a.parent.name)},!0)[0]:a(b)&&(h="a"==b.name?b.children[0]: +b),h)){for(var k in e)(e=h.attributes[k])&&e.match(p)&&delete h.attributes[k];return b}}}function g(a){var b=a.config.image2_alignClasses;return function(a){var c="a"==a.name?a.getFirst():a,d=c.attributes,f=this.data.align;if(!this.inline){var e=a.getFirst("span");e&&e.replaceWith(e.getFirst({img:1,a:1}))}f&&"none"!=f&&(e=CKEDITOR.tools.parseCssText(d.style||""),"center"==f&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):f in{left:1, +right:1}&&(b?c.addClass(b[v[f]]):e["float"]=f),b||CKEDITOR.tools.isEmpty(e)||(d.style=CKEDITOR.tools.writeCssText(e)));return a}}function e(b){var c=b.config.image2_captionedClass,d=b.config.image2_alignClasses,f={figure:1,a:1,img:1};return function(e){if(!(e.name in{div:1,p:1}))return!1;var g=e.children;if(1!==g.length)return!1;g=g[0];if(!(g.name in f))return!1;if("p"==e.name){if(!a(g))return!1}else if("figure"==g.name){if(!g.hasClass(c))return!1}else if(b.enterMode==CKEDITOR.ENTER_P||!a(g))return!1; +return(d?e.hasClass(d[1]):"center"==CKEDITOR.tools.parseCssText(e.attributes.style||"",!0)["text-align"])?!0:!1}}function a(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function m(a){var b=a.editor,c=b.editable(),d=b.document,f=a.resizer=d.createElement("span");f.addClass("cke_image_resizer");f.setAttribute("title",b.lang.image2.resizer);f.append(new CKEDITOR.dom.text("",d));if(a.inline)a.wrapper.append(f);else{var e=a.parts.link||a.parts.image,g=e.getParent(), +h=d.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(e);h.append(f);a.element.append(h,!0);g.is("span")&&g.remove()}f.on("mousedown",function(e){function g(a,b,c){var f=CKEDITOR.document,e=[];d.equals(f)||e.push(f.on(a,b));e.push(d.on(a,b));if(c)for(a=e.length;a--;)c.push(e.pop())}function h(){R=w+n*X;W=Math.round(R/B)}function k(){W=p-T;R=Math.round(W*B)}var l=a.parts.image,m=function(){var a=b.config.image2_maxSize,c;if(!a)return null;a=CKEDITOR.tools.copy(a);c=CKEDITOR.plugins.image2.getNatural(l); +a.width=Math.max("natural"===a.width?c.width:a.width,15);a.height=Math.max("natural"===a.height?c.height:a.height,15);return a}(),n="right"==a.data.align?-1:1,u=e.data.$.screenX,y=e.data.$.screenY,w=l.$.clientWidth,p=l.$.clientHeight,B=w/p,v=[],N="cke_image_s"+(~n?"e":"w"),Y,R,W,ea,X,T,Z;b.fire("saveSnapshot");g("mousemove",function(a){Y=a.data.$;X=Y.screenX-u;T=y-Y.screenY;Z=Math.abs(X/T);1==n?0>=X?0>=T?h():Z>=B?h():k():0>=T?Z>=B?k():h():k():0>=X?0>=T?Z>=B?k():h():k():0>=T?h():Z>=B?h():k();a=m&& +(R>m.width||W>m.height);15>R||15>W||a||(ea={width:R,height:W},l.setAttributes(ea))},v);g("mouseup",function(){for(var d;d=v.pop();)d.removeListener();c.removeClass(N);f.removeClass("cke_image_resizing");ea&&(a.setData(ea),b.fire("saveSnapshot"));ea=!1},v);c.addClass(N);f.addClass("cke_image_resizing")});a.on("data",function(){f["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function l(a){var b=[],d;return function(f){var e=a.getCommand("justify"+f);if(e){b.push(function(){e.refresh(a, +a.elementPath())});if(f in{right:1,left:1,center:1})e.on("exec",function(d){var e=c(a);if(e){e.setData("align",f);for(e=b.length;e--;)b[e]();d.cancel()}});e.on("refresh",function(b){var e=c(a),g={right:1,left:1,center:1};e&&(void 0===d&&(d=a.filter.checkFeature(a.widgets.registered.image.features.align)),d?this.setState(e.data.align==f?CKEDITOR.TRISTATE_ON:f in g?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}function k(a){if(a.plugins.link){var b= +CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){b=b.definition;var d=b.onShow,f=b.onOk;b.onShow=function(){var b=c(a),f=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),f.hide()):(f.show(),d.apply(this,arguments))};b.onOk=function(){var b=c(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);b.setData("link",d)}else f.apply(this, +arguments)}}});a.on("destroy",function(){b.removeListener()});a.getCommand("unlink").on("exec",function(b){var d=c(a);d&&d.parts.link&&(d.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())});a.getCommand("unlink").on("refresh",function(b){var d=c(a);d&&(this.setState(d.data.link||d.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}function c(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function f(a){var b=a.config.image2_alignClasses; +a={div:{match:e(a)},p:{match:e(a)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles="text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles="float,display");return a}function d(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a? +"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function n(a){return a.data.hasCaption?a.element:a.parts.image}var w=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),v={left:0,center:1,right:2},p=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss('.cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_editable[contenteditable\x3d"false"] .cke_image_resizer{display:none;}.cke_widget_wrapper\x3ea{display:inline-block}')}, +init:function(a){if(!a.plugins.detectConflict("image2",["easyimage"])){var c=a.config,d=a.lang.image2,f=b(a);c.filebrowserImage2BrowseUrl=c.filebrowserImageBrowseUrl;c.filebrowserImage2UploadUrl=c.filebrowserImageUploadUrl;f.pathName=d.pathName;f.editables.caption.pathName=d.pathNameCaption;a.widgets.add("image",f);a.ui.addButton&&a.ui.addButton("Image",{label:a.lang.common.image,command:"image",toolbar:"insert,10"});a.contextMenu&&(a.addMenuGroup("image",10),a.addMenuItem("image",{label:d.menu,command:"image", +group:"image"}));CKEDITOR.dialog.add("image2",this.path+"dialogs/image2.js")}},afterInit:function(a){var b={left:1,right:1,center:1,block:1},c=l(a),d;for(d in b)c(d);k(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,e){var g={};f?g.attributes={"class":f[1]}:g.styles={"text-align":"center"};g=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",g);c(g,e);e.move(g);return g}function c(b,d){if(d.getParent()){var f=a.createRange();f.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START); +d.remove();g.insertElementIntoRange(b,f)}else b.replace(d)}var d=a.document,f=a.config.image2_alignClasses,e=a.config.image2_captionedClass,g=a.editable(),h=["hasCaption","align","link"],k={align:function(c,d,e){var g=c.element;c.changed.align?c.newData.hasCaption||("center"==e&&(c.deflate(),c.element=b(a,g)),c.changed.hasCaption||"center"!=d||"center"==e||(c.deflate(),d=g.findOne("a,img"),d.replace(g),c.element=d)):"center"==e&&c.changed.hasCaption&&!c.newData.hasCaption&&(c.deflate(),c.element= +b(a,g));!f&&g.is("figure")&&("center"==e?g.setStyle("display","inline-block"):g.removeStyle("display"))},hasCaption:function(b,f,g){b.changed.hasCaption&&(f=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(w.output({captionedClass:e,captionPlaceholder:a.lang.image2.captionPlaceholder}),d),c(g,b.element),f.replace(g.findOne("img")),b.element=g):(f.replace(b.element),b.element=f))},link:function(b,c,f){if(b.changed.link){var e=b.element.is("img")? +b.element:b.element.findOne("img"),g=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!f||b.element.is("img")&&f,k;h&&b.deflate();f?(c||(k=d.createElement("a",{attributes:{href:b.newData.link.url}}),k.replace(e),e.move(k)),f=CKEDITOR.plugins.image2.getLinkAttributesGetter()(a,f),CKEDITOR.tools.isEmpty(f.set)||(k||g).setAttributes(f.set),f.removed.length&&(k||g).removeAttributes(f.removed)):(f=g.findOne("img"),f.replace(g),k=f);h&&(b.element=k)}}};return function(a){var b,c; a.changed={};for(c=0;c<h.length;c++)b=h[c],a.changed[b]=a.oldData?a.oldData[b]!==a.newData[b]:!1;for(c=0;c<h.length;c++)b=h[c],k[b](a,a.oldData?a.oldData[b]:null,a.newData[b]);a.inflate()}},checkHasNaturalRatio:function(a){var b=a.$;a=this.getNatural(a);return Math.round(b.clientWidth/a.width*a.height)==b.clientHeight||Math.round(b.clientHeight/a.height*a.width)==b.clientWidth},getNatural:function(a){if(a.$.naturalWidth)a={width:a.$.naturalWidth,height:a.$.naturalHeight};else{var b=new Image;b.src= -a.getAttribute("src");a={width:b.width,height:b.height}}return a},getLinkAttributesGetter:function(){return CKEDITOR.plugins.link.getLinkAttributes},getLinkAttributesParser:function(){return CKEDITOR.plugins.link.parseLinkAttributes}}})();CKEDITOR.config.image2_captionedClass="image";(function(){function b(b,a){var m,k;a.on("refresh",function(a){var b=[h],e;for(e in a.data.states)b.push(a.data.states[e]);this.setState(CKEDITOR.tools.search(b,g)?g:h)},a,null,100);a.on("exec",function(a){m=b.getSelection(); -k=m.createBookmarks(1);a.data||(a.data={});a.data.done=!1},a,null,0);a.on("exec",function(){b.forceNextSelectionCheck();m.selectBookmarks(k)},a,null,100)}var h=CKEDITOR.TRISTATE_DISABLED,g=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(f){var a=CKEDITOR.plugins.indent.genericDefinition;b(f,f.addCommand("indent",new a(!0)));b(f,f.addCommand("outdent",new a));f.ui.addButton&&(f.ui.addButton("Indent",{label:f.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}), -f.ui.addButton("Outdent",{label:f.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));f.on("dirChanged",function(a){var b=f.createRange(),g=a.data.node;b.setStartBefore(g);b.setEndAfter(g);for(var d=new CKEDITOR.dom.walker(b),e;e=d.next();)if(e.type==CKEDITOR.NODE_ELEMENT)if(!e.equals(g)&&e.getDirection())b.setStartAfter(e),d=new CKEDITOR.dom.walker(b);else{var c=f.config.indentClasses;if(c)for(var h="ltr"==a.data.dir?["_rtl",""]:["","_rtl"],w=0;w<c.length;w++)e.hasClass(c[w]+ -h[0])&&(e.removeClass(c[w]+h[0]),e.addClass(c[w]+h[1]));c=e.getStyle("margin-right");h=e.getStyle("margin-left");c?e.setStyle("margin-left",c):e.removeStyle("margin-left");h?e.setStyle("margin-right",h):e.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(b){this.isIndent=!!b;this.startDisabled=!this.isIndent},specificDefinition:function(b,a,g){this.name=a;this.editor=b;this.jobs={};this.enterBr=b.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!g;this.relatedGlobal= -g?"indent":"outdent";this.indentKey=g?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(b,a){b.on("pluginsLoaded",function(){for(var b in a)(function(a,b){var d=a.getCommand(b.relatedGlobal),e;for(e in b.jobs)d.on("exec",function(c){c.data.done||(a.fire("lockSnapshot"),b.execJob(a,e)&&(c.data.done=!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,e),d.on("refresh",function(c){c.data.states||(c.data.states={});c.data.states[b.name+"@"+e]=b.refreshJob(a, -e,c.data.path)},this,null,e);a.addFeature(b)})(this,a[b])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(b,a){var g=this.jobs[a];if(g.state!=h)return g.exec.call(this,b)},refreshJob:function(b,a,g){a=this.jobs[a];b.activeFilter.checkFeature(this)?a.state=a.refresh.call(this,b,g):a.state=h;return a.state},getContext:function(b){return b.contains(this.context)}}})();(function(){function b(a){function b(d){for(var h= -k.startContainer,m=k.endContainer;h&&!h.getParent().equals(d);)h=h.getParent();for(;m&&!m.getParent().equals(d);)m=m.getParent();if(!h||!m)return!1;for(var y=[],v=!1;!v;)h.equals(m)&&(v=!0),y.push(h),h=h.getNext();if(1>y.length)return!1;h=d.getParents(!0);for(m=0;m<h.length;m++)if(h[m].getName&&f[h[m].getName()]){d=h[m];break}for(var h=e.isIndent?1:-1,m=y[0],y=y[y.length-1],v=CKEDITOR.plugins.list.listToArray(d,c),x=v[y.getCustomData("listarray_index")].indent,m=m.getCustomData("listarray_index");m<= -y.getCustomData("listarray_index");m++)if(v[m].indent+=h,0<h){for(var B=v[m].parent,p=m-1;0<=p;p--)if(v[p].indent===h){B=v[p].parent;break}v[m].parent=new CKEDITOR.dom.element(B.getName(),B.getDocument())}for(m=y.getCustomData("listarray_index")+1;m<v.length&&v[m].indent>x;m++)v[m].indent+=h;h=CKEDITOR.plugins.list.arrayToList(v,c,null,a.config.enterMode,d.getDirection());if(!e.isIndent){var A;if((A=d.getParent())&&A.is("li"))for(var y=h.listNode.getChildren(),r=[],C,m=y.count()-1;0<=m;m--)(C=y.getItem(m))&& -C.is&&C.is("li")&&r.push(C)}h&&h.listNode.replace(d);if(r&&r.length)for(m=0;m<r.length;m++){for(C=d=r[m];(C=C.getNext())&&C.is&&C.getName()in f;)CKEDITOR.env.needsNbspFiller&&!d.getFirst(g)&&d.append(k.document.createText(" ")),d.append(C);d.insertAfter(A)}h&&a.fire("contentDomInvalidated");return!0}for(var e=this,c=this.database,f=this.context,k,m=a.getSelection(),m=(m&&m.getRanges()).createIterator();k=m.getNextRange();){for(var r=k.getCommonAncestor();r&&(r.type!=CKEDITOR.NODE_ELEMENT||!f[r.getName()]);){if(a.editable().equals(r)){r= -!1;break}r=r.getParent()}r||(r=k.startPath().contains(f))&&k.setEndAt(r,CKEDITOR.POSITION_BEFORE_END);if(!r){var p=k.getEnclosedNode();p&&p.type==CKEDITOR.NODE_ELEMENT&&p.getName()in f&&(k.setStartAt(p,CKEDITOR.POSITION_AFTER_START),k.setEndAt(p,CKEDITOR.POSITION_BEFORE_END),r=p)}r&&k.startContainer.type==CKEDITOR.NODE_ELEMENT&&k.startContainer.getName()in f&&(p=new CKEDITOR.dom.walker(k),p.evaluator=h,k.startContainer=p.next());r&&k.endContainer.type==CKEDITOR.NODE_ELEMENT&&k.endContainer.getName()in -f&&(p=new CKEDITOR.dom.walker(k),p.evaluator=h,k.endContainer=p.previous());if(r)return b(r)}return 0}function h(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is("li")}function g(b){return f(b)&&a(b)}var f=CKEDITOR.dom.walker.whitespaces(!0),a=CKEDITOR.dom.walker.bookmark(!1,!0),m=CKEDITOR.TRISTATE_DISABLED,k=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(a){function d(a){e.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];a.on("key", -function(b){var d=a.elementPath();if("wysiwyg"==a.mode&&b.data.keyCode==this.indentKey&&d){var e=this.getContext(d);!e||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,d,e)||(a.execCommand(this.relatedGlobal),b.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=CKEDITOR.plugins.indentList.firstItemInPath(this.context,b,c);return c&&this.isIndent&&!d?k:m}:function(a,b){return!this.getContext(b)||this.isIndent?m:k}, -exec:CKEDITOR.tools.bind(b,this)}}var e=CKEDITOR.plugins.indent;e.registerCommands(a,{indentlist:new d(a,"indentlist",!0),outdentlist:new d(a,"outdentlist")});CKEDITOR.tools.extend(d.prototype,e.specificDefinition.prototype,{context:{ol:1,ul:1}})}});CKEDITOR.plugins.indentList={};CKEDITOR.plugins.indentList.firstItemInPath=function(a,b,e){var c=b.contains(h);e||(e=b.contains(a));return e&&c&&c.equals(e.getFirst(h))}})();(function(){function b(b,a){a=void 0===a||a;var g;if(a)g=b.getComputedStyle("text-align"); +a.getAttribute("src");a={width:b.width,height:b.height}}return a},getLinkAttributesGetter:function(){return CKEDITOR.plugins.link.getLinkAttributes},getLinkAttributesParser:function(){return CKEDITOR.plugins.link.parseLinkAttributes}}})();CKEDITOR.config.image2_captionedClass="image";(function(){function b(b,a){var m,l;a.on("refresh",function(a){var b=[h],f;for(f in a.data.states)b.push(a.data.states[f]);this.setState(CKEDITOR.tools.search(b,g)?g:h)},a,null,100);a.on("exec",function(a){m=b.getSelection(); +l=m.createBookmarks(1);a.data||(a.data={});a.data.done=!1},a,null,0);a.on("exec",function(){b.forceNextSelectionCheck();m.selectBookmarks(l)},a,null,100)}var h=CKEDITOR.TRISTATE_DISABLED,g=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(e){var a=CKEDITOR.plugins.indent.genericDefinition;b(e,e.addCommand("indent",new a(!0)));b(e,e.addCommand("outdent",new a));e.ui.addButton&&(e.ui.addButton("Indent",{label:e.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}), +e.ui.addButton("Outdent",{label:e.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));e.on("dirChanged",function(a){var b=e.createRange(),g=a.data.node;b.setStartBefore(g);b.setEndAfter(g);for(var c=new CKEDITOR.dom.walker(b),f;f=c.next();)if(f.type==CKEDITOR.NODE_ELEMENT)if(!f.equals(g)&&f.getDirection())b.setStartAfter(f),c=new CKEDITOR.dom.walker(b);else{var d=e.config.indentClasses;if(d)for(var h="ltr"==a.data.dir?["_rtl",""]:["","_rtl"],w=0;w<d.length;w++)f.hasClass(d[w]+ +h[0])&&(f.removeClass(d[w]+h[0]),f.addClass(d[w]+h[1]));d=f.getStyle("margin-right");h=f.getStyle("margin-left");d?f.setStyle("margin-left",d):f.removeStyle("margin-left");h?f.setStyle("margin-right",h):f.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(b){this.isIndent=!!b;this.startDisabled=!this.isIndent},specificDefinition:function(b,a,g){this.name=a;this.editor=b;this.jobs={};this.enterBr=b.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!g;this.relatedGlobal= +g?"indent":"outdent";this.indentKey=g?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(b,a){b.on("pluginsLoaded",function(){for(var b in a)(function(a,b){var c=a.getCommand(b.relatedGlobal),f;for(f in b.jobs)c.on("exec",function(c){c.data.done||(a.fire("lockSnapshot"),b.execJob(a,f)&&(c.data.done=!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,f),c.on("refresh",function(c){c.data.states||(c.data.states={});c.data.states[b.name+"@"+f]=b.refreshJob(a, +f,c.data.path)},this,null,f);a.addFeature(b)})(this,a[b])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(b,a){var g=this.jobs[a];if(g.state!=h)return g.exec.call(this,b)},refreshJob:function(b,a,g){a=this.jobs[a];b.activeFilter.checkFeature(this)?a.state=a.refresh.call(this,b,g):a.state=h;return a.state},getContext:function(b){return b.contains(this.context)}}})();(function(){function b(a){function b(c){for(var h= +l.startContainer,m=l.endContainer;h&&!h.getParent().equals(c);)h=h.getParent();for(;m&&!m.getParent().equals(c);)m=m.getParent();if(!h||!m)return!1;for(var r=[],y=!1;!y;)h.equals(m)&&(y=!0),r.push(h),h=h.getNext();if(1>r.length)return!1;h=c.getParents(!0);for(m=0;m<h.length;m++)if(h[m].getName&&e[h[m].getName()]){c=h[m];break}for(var h=f.isIndent?1:-1,m=r[0],r=r[r.length-1],y=CKEDITOR.plugins.list.listToArray(c,d),u=y[r.getCustomData("listarray_index")].indent,m=m.getCustomData("listarray_index");m<= +r.getCustomData("listarray_index");m++)if(y[m].indent+=h,0<h){for(var p=y[m].parent,C=m-1;0<=C;C--)if(y[C].indent===h){p=y[C].parent;break}y[m].parent=new CKEDITOR.dom.element(p.getName(),p.getDocument())}for(m=r.getCustomData("listarray_index")+1;m<y.length&&y[m].indent>u;m++)y[m].indent+=h;h=CKEDITOR.plugins.list.arrayToList(y,d,null,a.config.enterMode,c.getDirection());if(!f.isIndent){var A;if((A=c.getParent())&&A.is("li"))for(var r=h.listNode.getChildren(),E=[],v,m=r.count()-1;0<=m;m--)(v=r.getItem(m))&& +v.is&&v.is("li")&&E.push(v)}h&&h.listNode.replace(c);if(E&&E.length)for(m=0;m<E.length;m++){for(v=c=E[m];(v=v.getNext())&&v.is&&v.getName()in e;)CKEDITOR.env.needsNbspFiller&&!c.getFirst(g)&&c.append(l.document.createText(" ")),c.append(v);c.insertAfter(A)}h&&a.fire("contentDomInvalidated");return!0}for(var f=this,d=this.database,e=this.context,l,m=a.getSelection(),m=(m&&m.getRanges()).createIterator();l=m.getNextRange();){for(var p=l.getCommonAncestor();p&&(p.type!=CKEDITOR.NODE_ELEMENT||!e[p.getName()]);){if(a.editable().equals(p)){p= +!1;break}p=p.getParent()}p||(p=l.startPath().contains(e))&&l.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);if(!p){var r=l.getEnclosedNode();r&&r.type==CKEDITOR.NODE_ELEMENT&&r.getName()in e&&(l.setStartAt(r,CKEDITOR.POSITION_AFTER_START),l.setEndAt(r,CKEDITOR.POSITION_BEFORE_END),p=r)}p&&l.startContainer.type==CKEDITOR.NODE_ELEMENT&&l.startContainer.getName()in e&&(r=new CKEDITOR.dom.walker(l),r.evaluator=h,l.startContainer=r.next());p&&l.endContainer.type==CKEDITOR.NODE_ELEMENT&&l.endContainer.getName()in +e&&(r=new CKEDITOR.dom.walker(l),r.evaluator=h,l.endContainer=r.previous());if(p)return b(p)}return 0}function h(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is("li")}function g(b){return e(b)&&a(b)}var e=CKEDITOR.dom.walker.whitespaces(!0),a=CKEDITOR.dom.walker.bookmark(!1,!0),m=CKEDITOR.TRISTATE_DISABLED,l=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(a){function c(a){f.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];a.on("key", +function(b){var c=a.elementPath();if("wysiwyg"==a.mode&&b.data.keyCode==this.indentKey&&c){var f=this.getContext(c);!f||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,c,f)||(a.execCommand(this.relatedGlobal),b.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=CKEDITOR.plugins.indentList.firstItemInPath(this.context,b,c);return c&&this.isIndent&&!d?l:m}:function(a,b){return!this.getContext(b)||this.isIndent?m:l}, +exec:CKEDITOR.tools.bind(b,this)}}var f=CKEDITOR.plugins.indent;f.registerCommands(a,{indentlist:new c(a,"indentlist",!0),outdentlist:new c(a,"outdentlist")});CKEDITOR.tools.extend(c.prototype,f.specificDefinition.prototype,{context:{ol:1,ul:1}})}});CKEDITOR.plugins.indentList={};CKEDITOR.plugins.indentList.firstItemInPath=function(a,b,f){var d=b.contains(h);f||(f=b.contains(a));return f&&d&&d.equals(f.getFirst(h))}})();(function(){function b(b,a){a=void 0===a||a;var g;if(a)g=b.getComputedStyle("text-align"); else{for(;!b.hasAttribute||!b.hasAttribute("align")&&!b.getStyle("text-align");){g=b.getParent();if(!g)break;b=g}g=b.getStyle("text-align")||b.getAttribute("align")||""}g&&(g=g.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!g&&a&&(g="rtl"==b.getComputedStyle("direction")?"right":"left");return g}function h(b,a,g){this.editor=b;this.name=a;this.value=g;this.context="p";a=b.config.justifyClasses;var h=b.config.enterMode==CKEDITOR.ENTER_P?"p":"div";if(a){switch(g){case "left":this.cssClassName= a[0];break;case "center":this.cssClassName=a[1];break;case "right":this.cssClassName=a[2];break;case "justify":this.cssClassName=a[3]}this.cssClassRegex=new RegExp("(?:^|\\s+)(?:"+a.join("|")+")(?\x3d$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName||null}};b.config.enterMode==CKEDITOR.ENTER_BR&& -(this.allowedContent.div=!0)}function g(b){var a=b.editor,g=a.createRange();g.setStartBefore(b.data.node);g.setEndAfter(b.data.node);for(var h=new CKEDITOR.dom.walker(g),l;l=h.next();)if(l.type==CKEDITOR.NODE_ELEMENT)if(!l.equals(b.data.node)&&l.getDirection())g.setStartAfter(l),h=new CKEDITOR.dom.walker(g);else{var d=a.config.justifyClasses;d&&(l.hasClass(d[0])?(l.removeClass(d[0]),l.addClass(d[2])):l.hasClass(d[2])&&(l.removeClass(d[2]),l.addClass(d[0])));d=l.getStyle("text-align");"left"==d?l.setStyle("text-align", -"right"):"right"==d&&l.setStyle("text-align","left")}}h.prototype={exec:function(f){var a=f.getSelection(),g=f.config.enterMode;if(a){for(var h=a.createBookmarks(),l=a.getRanges(),d=this.cssClassName,e,c,n=f.config.useComputedState,n=void 0===n||n,w=l.length-1;0<=w;w--)for(e=l[w].createIterator(),e.enlargeBr=g!=CKEDITOR.ENTER_BR;c=e.getNextParagraph(g==CKEDITOR.ENTER_P?"p":"div");)if(!c.isReadOnly()){var z=c.getName(),r;r=f.activeFilter.check(z+"{text-align}");if((z=f.activeFilter.check(z+"("+d+")"))|| -r){c.removeAttribute("align");c.removeStyle("text-align");var p=d&&(c.$.className=CKEDITOR.tools.ltrim(c.$.className.replace(this.cssClassRegex,""))),q=this.state==CKEDITOR.TRISTATE_OFF&&(!n||b(c,!0)!=this.value);d&&z?q?c.addClass(d):p||c.removeAttribute("class"):q&&r&&c.setStyle("text-align",this.value)}}f.focus();f.forceNextSelectionCheck();a.selectBookmarks(h)}},refresh:function(f,a){var g=a.block||a.blockLimit,h=g.getName(),l=g.equals(f.editable()),h=this.cssClassName?f.activeFilter.check(h+"("+ -this.cssClassName+")"):f.activeFilter.check(h+"{text-align}");l&&!CKEDITOR.dtd.$list[a.lastElement.getName()]?this.setState(CKEDITOR.TRISTATE_OFF):!l&&h?this.setState(b(g,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(b){if(!b.blockless){var a=new h(b,"justifyleft","left"),m=new h(b,"justifycenter","center"),k=new h(b,"justifyright","right"),l=new h(b,"justifyblock", -"justify");b.addCommand("justifyleft",a);b.addCommand("justifycenter",m);b.addCommand("justifyright",k);b.addCommand("justifyblock",l);b.ui.addButton&&(b.ui.addButton("JustifyLeft",{label:b.lang.common.alignLeft,command:"justifyleft",toolbar:"align,10"}),b.ui.addButton("JustifyCenter",{label:b.lang.common.center,command:"justifycenter",toolbar:"align,20"}),b.ui.addButton("JustifyRight",{label:b.lang.common.alignRight,command:"justifyright",toolbar:"align,30"}),b.ui.addButton("JustifyBlock",{label:b.lang.common.justify, -command:"justifyblock",toolbar:"align,40"}));b.on("dirChanged",g)}}})})();CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var b=function(b){var g=this._,f=g.menu;g.state!==CKEDITOR.TRISTATE_DISABLED&&(g.on&&f?f.hide():(g.previousState=g.state,f||(f=g.menu=new CKEDITOR.menu(b,{panel:{className:"cke_menu_panel",attributes:{"aria-label":b.lang.common.options}}}),f.onHide=CKEDITOR.tools.bind(function(){var a=this.command?b.getCommand(this.command).modes:this.modes;this.setState(!a|| -a[b.mode]?g.previousState:CKEDITOR.TRISTATE_DISABLED);g.on=0},this),this.onMenu&&f.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),g.on=1,setTimeout(function(){f.show(CKEDITOR.document.getById(g.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(h){delete h.panel;this.base(h);this.hasArrow="menu";this.click=b},statics:{handler:{create:function(b){return new CKEDITOR.ui.menuButton(b)}}}})},beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_MENUBUTTON, -CKEDITOR.ui.menuButton.handler)}});CKEDITOR.UI_MENUBUTTON="menubutton";"use strict";(function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(b){var h=b.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],g=this,f=b.lang.language,a={},m,k,l,d;b.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(b,c){var d=a["language_"+c];if(d)b[d.style.checkActive(b.elementPath(),b)?"removeStyle":"applyStyle"](d.style)}, -refresh:function(a){this.setState(g.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(d=0;d<h.length;d++)m=h[d].split(":"),k=m[0],l="language_"+k,a[l]={label:m[1],langId:k,group:"language",order:d,ltr:"rtl"!=(""+m[2]).toLowerCase(),onClick:function(){b.execCommand("language",this.langId)},role:"menuitemcheckbox"},a[l].style=new CKEDITOR.style({element:"span",attributes:{lang:k,dir:a[l].ltr?"ltr":"rtl"}});a.language_remove={label:f.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED, -order:a.length,onClick:function(){var a=g.getCurrentLangElement(b);a&&b.execCommand("language",a.getAttribute("lang"))}};b.addMenuGroup("language",1);b.addMenuGroup("language_remove");b.addMenuItems(a);b.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:f.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var d={},c=g.getCurrentLangElement(b),f;for(f in a)d[f]=CKEDITOR.TRISTATE_OFF;d.language_remove=c?CKEDITOR.TRISTATE_OFF: -CKEDITOR.TRISTATE_DISABLED;c&&(d["language_"+c.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return d}});b.addRemoveFormatFilter&&b.addRemoveFormatFilter(function(a){return!(a.is("span")&&a.getAttribute("dir")&&a.getAttribute("lang"))})},getCurrentLangElement:function(b){var h=b.elementPath();b=h&&h.elements;var g;if(h)for(var f=0;f<b.length;f++)h=b[f],!g&&"span"==h.getName()&&h.hasAttribute("dir")&&h.hasAttribute("lang")&&(g=h);return g}})})();(function(){function b(a,b,c,d){for(var e=CKEDITOR.plugins.list.listToArray(b.root, -c),f=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(f.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}for(var h=b.root.getDocument(),k,l,g=0;g<f.length;g++){var m=f[g].getCustomData("listarray_index");k=e[m].parent;k.is(this.type)||(l=h.createElement(this.type),k.copyAttributes(l,{start:1,type:1}),l.removeStyle("list-style-type"),e[m].parent=l)}c=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode); -for(var n,e=c.listNode.getChildCount(),g=0;g<e&&(n=c.listNode.getChild(g));g++)n.getName()==this.type&&d.push(n);c.listNode.replace(b.root);a.fire("contentDomInvalidated")}function h(a,b,c){var d=b.contents,e=b.root.getDocument(),f=[];if(1==d.length&&d[0].equals(b.root)){var g=e.createElement("div");d[0].moveChildren&&d[0].moveChildren(g);d[0].append(g);d[0]=g}b=b.contents[0].getParent();for(g=0;g<d.length;g++)b=b.getCommonAncestor(d[g].getParent());a=a.config.useComputedState;var h,k;a=void 0=== -a||a;for(g=0;g<d.length;g++)for(var l=d[g],m;m=l.getParent();){if(m.equals(b)){f.push(l);!k&&l.getDirection()&&(k=1);l=l.getDirection(a);null!==h&&(h=h&&h!=l?null:l);break}l=m}if(!(1>f.length)){d=f[f.length-1].getNext();g=e.createElement(this.type);for(c.push(g);f.length;)c=f.shift(),a=e.createElement("li"),l=c,l.is("pre")||r.test(l.getName())||"false"==l.getAttribute("contenteditable")?c.appendTo(a):(c.copyAttributes(a),h&&c.getDirection()&&(a.removeStyle("direction"),a.removeAttribute("dir")),c.moveChildren(a), -c.remove()),a.appendTo(g);h&&k&&g.setAttribute("dir",h);d?g.insertBefore(d):g.appendTo(b)}}function g(a,b,c){function d(c){if(!(!(l=k[c?"getFirst":"getLast"]())||l.is&&l.isBlockBoundary()||!(m=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||m.is&&m.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](l)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,c),f=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&& -(f.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}h=null;for(g=0;g<f.length;g++)h=f[g].getCustomData("listarray_index"),e[h].indent=-1;for(g=h+1;g<e.length;g++)if(e[g].indent>e[g-1].indent+1){f=e[g-1].indent+1-e[g].indent;for(h=e[g].indent;e[g]&&e[g].indent>=h;)e[g].indent+=f,g++;g--}var k=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,l,m;d(!0);d();k.replace(b.root);a.fire("contentDomInvalidated")}function f(a,b){this.name= -a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function a(a,b,c,d){for(var e,f;e=a[d?"getLast":"getFirst"](p);)(f=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",f),e.remove(),c?e[d?"insertBefore":"insertAfter"](c):b.append(e,d),c=e}function m(b){function c(d){var e=b[d?"getPrevious":"getNext"](w);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(b.getName())&&(a(b,e,null,!d),b.remove(),b=e)}c();c(1)}function k(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in -CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function l(b,c,e){b.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var f=e.extractContents();c.trim(!1,!0);var g=c.createBookmark(),h=new CKEDITOR.dom.elementPath(c.startContainer),k=h.block,h=h.lastElement.getAscendant("li",1)||k,l=new CKEDITOR.dom.elementPath(e.startContainer),n=l.contains(CKEDITOR.dtd.$listItem),l=l.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():l&&(k=l.getPrevious(w))&& -z(k)&&k.remove();(k=f.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br")&&k.remove();(k=c.startContainer.getChild(c.startOffset))?f.insertBefore(k):c.startContainer.append(f);n&&(f=d(n))&&(h.contains(n)?(a(f,n.getParent(),n),f.remove()):h.append(f));for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){l=e.startPath();f=l.block;if(!f)break;f.is("li")&&(h=f.getParent(),f.equals(h.getLast(w))&&f.equals(h.getFirst(w))&&(f=h));e.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove()}e=e.clone();f= -b.editable();e.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return w(a)&&!z(a)};(e=e.next())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list&&m(e);c.moveToBookmark(g);c.select();b.fire("saveSnapshot")}function d(a){return(a=a.getLast(w))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in e?a:null}var e={ol:1,ul:1},c=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),w=function(a){return!(c(a)||n(a))},z=CKEDITOR.dom.walker.bogus(); -CKEDITOR.plugins.list={listToArray:function(a,b,c,d,f){if(!e[a.getName()])return[];d||(d=0);c||(c=[]);for(var g=0,h=a.getChildCount();g<h;g++){var k=a.getChild(g);k.type==CKEDITOR.NODE_ELEMENT&&k.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(k,b,c,d+1);if("li"==k.$.nodeName.toLowerCase()){var l={parent:a,indent:d,element:k,contents:[]};f?l.grandparent=f:(l.grandparent=a.getParent(),l.grandparent&&"li"==l.grandparent.$.nodeName.toLowerCase()&&(l.grandparent=l.grandparent.getParent())); -b&&CKEDITOR.dom.element.setMarker(b,k,"listarray_index",c.length);c.push(l);for(var m=0,n=k.getChildCount(),p;m<n;m++)p=k.getChild(m),p.type==CKEDITOR.NODE_ELEMENT&&e[p.getName()]?CKEDITOR.plugins.list.listToArray(p,b,c,d+1,l.grandparent):l.contents.push(p)}}return c},arrayToList:function(a,b,c,d,f){c||(c=0);if(!a||a.length<c+1)return null;for(var g,h=a[c].parent.getDocument(),k=new CKEDITOR.dom.documentFragment(h),l=null,m=c,p=Math.max(a[c].indent,0),r=null,z,F,M=d==CKEDITOR.ENTER_P?"p":"div";;){var H= -a[m];g=H.grandparent;z=H.element.getDirection(1);if(H.indent==p){l&&a[m].parent.getName()==l.getName()||(l=a[m].parent.clone(!1,1),f&&l.setAttribute("dir",f),k.append(l));r=l.append(H.element.clone(0,1));z!=l.getDirection(1)&&r.setAttribute("dir",z);for(g=0;g<H.contents.length;g++)r.append(H.contents[g].clone(1,1));m++}else if(H.indent==Math.max(p,0)+1)H=a[m-1].element.getDirection(1),m=CKEDITOR.plugins.list.arrayToList(a,null,m,d,H!=z?z:null),!r.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>= -h.$.documentMode&&r.append(h.createText(" ")),r.append(m.listNode),m=m.nextIndex;else if(-1==H.indent&&!c&&g){e[g.getName()]?(r=H.element.clone(!1,!0),z!=g.getDirection(1)&&r.setAttribute("dir",z)):r=new CKEDITOR.dom.documentFragment(h);var l=g.getDirection(1)!=z,E=H.element,Q=E.getAttribute("class"),O=E.getAttribute("style"),P=r.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(d!=CKEDITOR.ENTER_BR||l||O||Q),K,X=H.contents.length,S;for(g=0;g<X;g++)if(K=H.contents[g],n(K)&&1<X)P?S=K.clone(1,1):r.append(K.clone(1, -1));else if(K.type==CKEDITOR.NODE_ELEMENT&&K.isBlockBoundary()){l&&!K.getDirection()&&K.setAttribute("dir",z);F=K;var W=E.getAttribute("style");W&&F.setAttribute("style",W.replace(/([^;])$/,"$1;")+(F.getAttribute("style")||""));Q&&K.addClass(Q);F=null;S&&(r.append(S),S=null);r.append(K.clone(1,1))}else P?(F||(F=h.createElement(M),r.append(F),l&&F.setAttribute("dir",z)),O&&F.setAttribute("style",O),Q&&F.setAttribute("class",Q),S&&(F.append(S),S=null),F.append(K.clone(1,1))):r.append(K.clone(1,1)); -S&&((F||r).append(S),S=null);r.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&m!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(z=r.getLast())&&z.type==CKEDITOR.NODE_ELEMENT&&z.is("br")&&z.remove(),(z=r.getLast(w))&&z.type==CKEDITOR.NODE_ELEMENT&&z.is(CKEDITOR.dtd.$block)||r.append(h.createElement("br")));z=r.$.nodeName.toLowerCase();"div"!=z&&"p"!=z||r.appendBogus();k.append(r);l=null;m++}else return null;F=null;if(a.length<=m||Math.max(a[m].indent,0)<p)break}if(b)for(a=k.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&& -(CKEDITOR.dom.element.clearMarkers(b,a),a.getName()in CKEDITOR.dtd.$listItem&&(c=a,h=f=d=void 0,d=c.getDirection()))){for(f=c.getParent();f&&!(h=f.getDirection());)f=f.getParent();d==h&&c.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:k,nextIndex:m}}};var r=/^h[1-6]$/,p=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);f.prototype={exec:function(a){function c(a){return e[a.root.getName()]&&!d(a.root,[CKEDITOR.NODE_COMMENT])}function d(a,b){return CKEDITOR.tools.array.filter(a.getChildren().toArray(), -function(a){return-1===CKEDITOR.tools.array.indexOf(b,a.type)}).length}function f(a){var b=!0;if(0===a.getChildCount())return!1;a.forEach(function(a){if(a.type!==CKEDITOR.NODE_COMMENT)return b=!1},null,!0);return b}this.refresh(a,a.elementPath());var k=a.config,l=a.getSelection(),n=l&&l.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var p=a.editable();if(p.getFirst(w)){var r=1==n.length&&n[0];(k=r&&r.getEnclosedNode())&&k.is&&this.type==k.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else k.enterMode== -CKEDITOR.ENTER_BR?p.appendBogus():n[0].fixBlock(1,k.enterMode==CKEDITOR.ENTER_P?"p":"div"),l.selectRanges(n)}for(var k=l.createBookmarks(!0),p=[],z={},n=n.createIterator(),C=0;(r=n.getNextRange())&&++C;){var I=r.getBoundaryNodes(),J=I.startNode,F=I.endNode;J.type==CKEDITOR.NODE_ELEMENT&&"td"==J.getName()&&r.setStartAt(I.startNode,CKEDITOR.POSITION_AFTER_START);F.type==CKEDITOR.NODE_ELEMENT&&"td"==F.getName()&&r.setEndAt(I.endNode,CKEDITOR.POSITION_BEFORE_END);r=r.createIterator();for(r.forceBrBreak= -this.state==CKEDITOR.TRISTATE_OFF;I=r.getNextParagraph();)if(!I.getCustomData("list_block")&&!f(I)){CKEDITOR.dom.element.setMarker(z,I,"list_block",1);for(var M=a.elementPath(I),J=M.elements,F=0,M=M.blockLimit,H,E=J.length-1;0<=E&&(H=J[E]);E--)if(e[H.getName()]&&M.contains(H)){M.removeCustomData("list_group_object_"+C);(J=H.getCustomData("list_group_object"))?J.contents.push(I):(J={root:H,contents:[I]},p.push(J),CKEDITOR.dom.element.setMarker(z,H,"list_group_object",J));F=1;break}F||(F=M,F.getCustomData("list_group_object_"+ -C)?F.getCustomData("list_group_object_"+C).contents.push(I):(J={root:F,contents:[I]},CKEDITOR.dom.element.setMarker(z,F,"list_group_object_"+C,J),p.push(J)))}}for(H=[];0<p.length;)J=p.shift(),this.state==CKEDITOR.TRISTATE_OFF?c(J)||(e[J.root.getName()]?b.call(this,a,J,z,H):h.call(this,a,J,H)):this.state==CKEDITOR.TRISTATE_ON&&e[J.root.getName()]&&!c(J)&&g.call(this,a,J,z);for(E=0;E<H.length;E++)m(H[E]);CKEDITOR.dom.element.clearAllMarkers(z);l.selectBookmarks(k);a.focus()},refresh:function(a,b){var c= -b.contains(e,1),d=b.blockLimit||b.root;c&&d.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){a.blockless||(a.addCommand("numberedlist",new f("numberedlist","ol")),a.addCommand("bulletedlist",new f("bulletedlist","ul")),a.ui.addButton&&(a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),a.ui.addButton("BulletedList", -{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var c=b.data.domEvent.getKey(),f;if("wysiwyg"==a.mode&&c in{8:1,46:1}){var g=a.getSelection().getRanges()[0],h=g&&g.startPath();if(g&&g.collapsed){var m=8==c,n=a.editable(),p=new CKEDITOR.dom.walker(g.clone());p.evaluator=function(a){return w(a)&&!z(a)};p.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};c=g.clone();if(m){var r;(r=h.contains(e))&&g.checkBoundaryOfElement(r, -CKEDITOR.START)&&(r=r.getParent())&&r.is("li")&&(r=d(r))?(f=r,r=r.getPrevious(w),c.moveToPosition(r&&z(r)?r:f,CKEDITOR.POSITION_BEFORE_START)):(p.range.setStartAt(n,CKEDITOR.POSITION_AFTER_START),p.range.setEnd(g.startContainer,g.startOffset),(r=p.previous())&&r.type==CKEDITOR.NODE_ELEMENT&&(r.getName()in e||r.is("li"))&&(r.is("li")||(p.range.selectNodeContents(r),p.reset(),p.evaluator=k,r=p.previous()),f=r,c.moveToElementEditEnd(f),c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END))); -if(f)l(a,c,g),b.cancel();else{var C=h.contains(e);C&&g.checkBoundaryOfElement(C,CKEDITOR.START)&&(f=C.getFirst(w),g.checkBoundaryOfElement(f,CKEDITOR.START)&&(r=C.getPrevious(w),d(f)?r&&(g.moveToElementEditEnd(r),g.select()):a.execCommand("outdent"),b.cancel()))}}else if(f=h.contains("li")){if(p.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),m=(n=f.getLast(w))&&k(n)?n:f,h=0,(r=p.next())&&r.type==CKEDITOR.NODE_ELEMENT&&r.getName()in e&&r.equals(n)?(h=1,r=p.next()):g.checkBoundaryOfElement(m,CKEDITOR.END)&& -(h=2),h&&r){g=g.clone();g.moveToElementEditStart(r);if(1==h&&(c.optimize(),!c.startContainer.equals(f))){for(f=c.startContainer;f.is(CKEDITOR.dtd.$inline);)C=f,f=f.getParent();C&&c.moveToPosition(C,CKEDITOR.POSITION_AFTER_END)}2==h&&(c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END),g.endPath().block&&g.moveToPosition(g.endPath().block,CKEDITOR.POSITION_AFTER_START));l(a,c,g);b.cancel()}}else p.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),(r=p.next())&&r.type==CKEDITOR.NODE_ELEMENT&& -r.is(e)&&(r=r.getFirst(w),h.block&&g.checkStartOfBlock()&&g.checkEndOfBlock()?(h.block.remove(),g.moveToElementEditStart(r),g.select()):d(r)?(g.moveToElementEditStart(r),g.select()):(g=g.clone(),g.moveToElementEditStart(r),l(a,c,g)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})})();"use strict";(function(){function b(a,b,c){return n(b)&&n(c)&&c.equals(b.getNext(function(a){return!(R(a)||U(a)||w(a))}))}function h(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))} -function g(a){var b=a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var c=k(b);if("true"==c.getAttribute("contenteditable"))return b;if(c.is(a.triggers))return c}return null}function f(a,b,c){v(a,b);v(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function a(a,b,d){return b=b[d?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!R(b)||n(b)&&!w(b)&&!c(a,b)})}function m(a,b,c){return a>b&&a<c}function k(a,b){if(a.data("cke-editable"))return null; -for(b||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function l(a){var b=a.doc,c=C('\x3cspan contenteditable\x3d"false" data-cke-magic-line\x3d"1" style\x3d"'+ca+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),e=CKEDITOR.getUrl(this.path+"images/"+(I.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");A(c,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this}, -lineChildren:[A(C('\x3cspan title\x3d"'+a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:ca+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+e+") center no-repeat "+a.boxColor+";cursor:pointer;"+(I.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(I.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}), -A(C(da,b),{base:aa+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),A(C(da,b),{base:aa+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){v(a,this);var b=a.holdDistance,c=this.size; -return c&&m(a.mouse.y,c.top-b,c.bottom+b)&&m(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,e=d.upper,f=d.lower,g=e||f,h=g.getParent(),k={};this.trigger=d;e&&v(a,e,!0);f&&v(a,f,!0);v(a,h,!0);a.inInlineMode&&x(a,!0);h.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x, -k.right="");e&&f?k.top=e.size.margin.bottom===f.size.margin.top?0|e.size.bottom+e.size.margin.bottom/2:e.size.margin.bottom<f.size.margin.top?e.size.bottom+e.size.margin.bottom:e.size.bottom+e.size.margin.bottom-f.size.margin.top:e?f||(k.top=e.size.bottom+e.size.margin.bottom):k.top=f.size.top-f.size.margin.top;d.is(P)||m(k.top,b.scroll.y-15,b.scroll.y+5)?(k.top=a.inInlineMode?0:b.scroll.y,this.look(P)):d.is(K)||m(k.top,b.pane.bottom-5,b.pane.bottom+15)?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+ -b.editable.padding.bottom:b.pane.bottom-1,this.look(K)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(X));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var l in k)k[l]=CKEDITOR.tools.cssLength(k[l]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new G("span",a.doc)});for(b=c.lineChildren.length;b--;)c.lineChildren[b].appendTo(c); -c.look(X);c.appendTo(c.wrap);c.unselectable();c.lineChildren[0].on("mouseup",function(b){c.detach();d(a,function(b){var c=a.line.trigger;b[c.is(H)?"insertBefore":"insertAfter"](c.is(H)?c.lower:c.upper)},!0);a.editor.focus();I.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();b.data.preventDefault(!0)});c.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=c}function d(a,b,c){var d=new CKEDITOR.dom.range(a.doc),e=a.editor,f;I.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(S): -(f=(f=k(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new G(M[f],a.doc),f.is("br")||a.doc.createText(S).appendTo(f));c&&e.fire("saveSnapshot");b(f);d.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([d]);a.hotNode=f;c&&e.fire("saveSnapshot")}function e(b,c){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function e(a){var f=I.ie&&9>I.version?" ":S,g=b.hotNode&&b.hotNode.getText()==f&&b.element.equals(b.hotNode)&&b.lastCmdDirection===!!c;d(b,function(d){g&& -b.hotNode&&b.hotNode.remove();d[c?"insertAfter":"insertBefore"](a);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!c});b.lastCmdDirection=!!c});I.ie||b.enterMode==CKEDITOR.ENTER_BR||b.hotNode.scrollIntoView();b.line.detach()}return function(d){d=d.getSelection().getStartElement();var f;d=d.getAscendant(T,1);if(!p(b,d)&&d&&!d.equals(b.editable)&&!d.contains(b.editable)){(f=k(d))&&"false"==f.getAttribute("contenteditable")&&(d=f);b.element=d;f=a(b,d,!c);var h;n(f)&&f.is(b.triggers)&& -f.is(L)&&(!a(b,f,!c)||(h=a(b,f,!c))&&n(h)&&h.is(b.triggers))?e(f):(h=g(b,d),n(h)&&(a(b,h,!c)?(d=a(b,h,!c))&&n(d)&&d.is(b.triggers)&&e(h):e(h)))}}}()}}function c(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function w(a){if(!n(a))return!1;var b;(b=z(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function z(a){return!!{absolute:1, -fixed:1}[a.getComputedStyle("position")]}function r(a,b){return n(b)?b.is(a.triggers):null}function p(a,b){if(!b)return!1;for(var c=b.getParents(1),d=c.length;d--;)for(var e=a.tabuList.length;e--;)if(c[d].hasAttribute(a.tabuList[e]))return!0;return!1}function q(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(ea)});if(!b)return!1;v(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function u(a){var b=a.editable,d=a.mouse,e=a.view,f=a.triggerOffset;x(a);var g=d.y> -(a.inInlineMode?e.editable.top+e.editable.height/2:Math.min(e.editable.height,e.pane.height)/2),b=b[g?"getLast":"getFirst"](function(a){return!(R(a)||U(a))});if(!b)return null;c(a,b)&&(b=a.line.wrap[g?"getPrevious":"getNext"](function(a){return!(R(a)||U(a))}));if(!n(b)||w(b)||!r(a,b))return null;v(a,b);return!g&&0<=b.size.top&&m(d.y,0,b.size.top+f)?(a=a.inInlineMode||0===e.scroll.y?P:X,new h([null,b,H,O,a])):g&&b.size.bottom<=e.pane.height&&m(d.y,b.size.bottom-f,e.pane.height)?(a=a.inInlineMode|| -m(b.size.bottom,e.pane.height-f,e.pane.height)?K:X,new h([b,null,E,O,a])):null}function t(b){var c=b.mouse,d=b.view,e=b.triggerOffset,f=g(b);if(!f)return null;v(b,f);var e=Math.min(e,0|f.size.outerHeight/2),k=[],l,t;if(m(c.y,f.size.top-1,f.size.top+e))t=!1;else if(m(c.y,f.size.bottom-e,f.size.bottom+1))t=!0;else return null;if(w(f)||q(b,f,t)||f.getParent().is(W))return null;var p=a(b,f,!t);if(p){if(p&&p.type==CKEDITOR.NODE_TEXT)return null;if(n(p)){if(w(p)||!r(b,p)||p.getParent().is(W))return null; -k=[p,f][t?"reverse":"concat"]().concat([Q,O])}}else f.equals(b.editable[t?"getLast":"getFirst"](b.isRelevant))?(x(b),t&&m(c.y,f.size.bottom-e,d.pane.height)&&m(f.size.bottom,d.pane.height-e,d.pane.height)?l=K:m(c.y,0,f.size.top+e)&&(l=P)):l=X,k=[null,f][t?"reverse":"concat"]().concat([t?E:H,O,l,f.equals(b.editable[t?"getLast":"getFirst"](b.isRelevant))?t?K:P:X]);return 0 in k?new h(k):null}function y(a,b,c,d){for(var e=b.getDocumentPosition(),f={},g={},h={},k={},l=V.length;l--;)f[V[l]]=parseInt(b.getComputedStyle.call(b, -"border-"+V[l]+"-width"),10)||0,h[V[l]]=parseInt(b.getComputedStyle.call(b,"padding-"+V[l]),10)||0,g[V[l]]=parseInt(b.getComputedStyle.call(b,"margin-"+V[l]),10)||0;c&&!d||B(a,d);k.top=e.y-(c?0:a.view.scroll.y);k.left=e.x-(c?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+f.top+f.bottom);k.width=k.outerWidth-(h.left+h.right+f.left+f.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop, -left:b.$.scrollLeft});return A({border:f,padding:h,margin:g,ignoreScroll:c},k,!0)}function v(a,b,c){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==c&&b.size.date>new Date-Z)return null;return A(b.size,y(a,b,c),{date:+new Date},!0)}function x(a,b){a.view.editable=y(a,a.editable,b,!0)}function B(a,b){a.view||(a.view={});var c=a.view;if(!(!b&&c&&c.date>new Date-Z)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();A(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth- -d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},!0)}}function D(a,b,c,d){for(var e=d,f=d,g=0,k=!1,l=!1,m=a.view.pane.height,n=a.mouse;n.y+g<m&&0<n.y-g;){k||(k=b(e,d));l||(l=b(f,d));!k&&0<n.y-g&&(e=c(a,{x:n.x,y:n.y-g}));!l&&n.y+g<m&&(f=c(a,{x:n.x,y:n.y+g}));if(k&&l)break;g+=2}return new h([e,f,null,null])}CKEDITOR.plugins.add("magicline",{init:function(b){var f=b.config,k=f.magicline_triggerOffset||30,m={editor:b, -enterMode:f.enterMode,triggerOffset:k,holdDistance:0|k*(f.magicline_holdDistance||.5),boxColor:f.magicline_color||"#ff0000",rtl:"rtl"==f.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(f.magicline_tabuList||[]),triggers:f.magicline_everywhere?T:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},q,r,v;m.isRelevant=function(a){return n(a)&&!c(m,a)&&!w(a)};b.on("contentDom",function(){var k=b.editable(),n=b.document,w=b.window;A(m,{editable:k,inInlineMode:k.isInline(),doc:n,win:w, -hotNode:null},!0);m.boundary=m.inInlineMode?m.editable:m.doc.getDocumentElement();k.is(F.$inline)||(m.inInlineMode&&!z(k)&&k.setStyles({position:"relative",top:null,left:null}),l.call(this,m),B(m),k.attachListener(b,"beforeUndoImage",function(){m.line.detach()}),k.attachListener(b,"beforeGetData",function(){m.line.wrap.getParent()&&(m.line.detach(),b.once("getData",function(){m.line.attach()},null,null,1E3))},null,null,0),k.attachListener(m.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(a){if("wysiwyg"== -b.mode)if(m.inInlineMode){var c=a.data.$.clientX;a=a.data.$.clientY;B(m);x(m,!0);var d=m.view.editable,e=m.view.scroll;c>d.left-e.x&&c<d.right-e.x&&a>d.top-e.y&&a<d.bottom-e.y||(clearTimeout(v),v=null,m.line.detach())}else clearTimeout(v),v=null,m.line.detach()}),k.attachListener(k,"keyup",function(){m.hiddenMode=0}),k.attachListener(k,"keydown",function(a){if("wysiwyg"==b.mode)switch(a.data.getKeystroke()){case 2228240:case 16:m.hiddenMode=1,m.line.detach()}}),k.attachListener(m.inInlineMode?k:n, -"mousemove",function(a){r=!0;if("wysiwyg"==b.mode&&!b.readOnly&&!v){var c={x:a.data.$.clientX,y:a.data.$.clientY};v=setTimeout(function(){m.mouse=c;v=m.trigger=null;B(m);r&&!m.hiddenMode&&b.focusManager.hasFocus&&!m.line.mouseNear()&&(m.element=ba(m,!0))&&((m.trigger=u(m)||t(m)||N(m))&&!p(m,m.trigger.upper||m.trigger.lower)?m.line.attach().place():(m.trigger=null,m.line.detach()),r=!1)},30)}}),k.attachListener(w,"scroll",function(){"wysiwyg"==b.mode&&(m.line.detach(),I.webkit&&(m.hiddenMode=1,clearTimeout(q), -q=setTimeout(function(){m.mouseDown||(m.hiddenMode=0)},50)))}),k.attachListener(J?n:w,"mousedown",function(){"wysiwyg"==b.mode&&(m.line.detach(),m.hiddenMode=1,m.mouseDown=1)}),k.attachListener(J?n:w,"mouseup",function(){m.hiddenMode=0;m.mouseDown=0}),b.addCommand("accessPreviousSpace",e(m)),b.addCommand("accessNextSpace",e(m,!0)),b.setKeystroke([[f.magicline_keystrokePrevious,"accessPreviousSpace"],[f.magicline_keystrokeNext,"accessNextSpace"]]),b.on("loadSnapshot",function(){var a,c,d,e;for(e in{p:1, -br:1,div:1})for(a=b.document.getElementsByTag(e),d=a.count();d--;)if((c=a.getItem(d)).data("cke-magicline-hot")){m.hotNode=c;m.lastCmdDirection="true"===c.data("cke-magicline-dir")?!0:!1;return}}),b._.magiclineBackdoor={accessFocusSpace:d,boxTrigger:h,isLine:c,getAscendantTrigger:g,getNonEmptyNeighbour:a,getSize:y,that:m,triggerEdge:t,triggerEditable:u,triggerExpand:N})},this)}});var A=CKEDITOR.tools.extend,G=CKEDITOR.dom.element,C=G.createFromHtml,I=CKEDITOR.env,J=CKEDITOR.env.ie&&9>CKEDITOR.env.version, -F=CKEDITOR.dtd,M={},H=128,E=64,Q=32,O=16,P=4,K=2,X=1,S=" ",W=F.$listItem,ea=F.$tableContent,L=A({},F.$nonEditable,F.$empty),T=F.$block,Z=100,ca="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",aa=ca+"border-color:transparent;display:block;border-style:solid;",da="\x3cspan\x3e"+S+"\x3c/span\x3e";M[CKEDITOR.ENTER_BR]="br";M[CKEDITOR.ENTER_P]="p";M[CKEDITOR.ENTER_DIV]="div";h.prototype={set:function(a,b,c){this.properties= -a+b+(c||X);return this},is:function(a){return(this.properties&a)==a}};var ba=function(){function a(b,c){var d=b.$.elementFromPoint(c.x,c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,d,e){if(!b.mouse)return null;var f=b.doc,g=b.line.wrap;e=e||b.mouse;var h=a(f,e);d&&c(b,h)&&(g.hide(),h=a(f,e),g.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||I.ie&&9>I.version&&!b.boundary.equals(h)&&!b.boundary.contains(h)?null:h}}(),R=CKEDITOR.dom.walker.whitespaces(),U=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT), -N=function(){function a(c){var e=c.element,g,h,k;if(!n(e)||e.contains(c.editable)||e.isReadOnly())return null;k=D(c,function(a,b){return!b.equals(a)},function(a,b){return ba(a,!0,b)},e);g=k.upper;h=k.lower;if(b(c,g,h))return k.set(Q,8);if(g&&e.contains(g))for(;!g.getParent().equals(e);)g=g.getParent();else g=e.getFirst(function(a){return d(c,a)});if(h&&e.contains(h))for(;!h.getParent().equals(e);)h=h.getParent();else h=e.getLast(function(a){return d(c,a)});if(!g||!h)return null;v(c,g);v(c,h);if(!m(c.mouse.y, -g.size.top,h.size.bottom))return null;for(var e=Number.MAX_VALUE,l,q,t,p;h&&!h.equals(g)&&(q=g.getNext(c.isRelevant));)l=Math.abs(f(c,g,q)-c.mouse.y),l<e&&(e=l,t=g,p=q),g=q,v(c,g);if(!t||!p||!m(c.mouse.y,t.size.top,p.size.bottom))return null;k.upper=t;k.lower=p;return k.set(Q,8)}function d(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||U(b)||w(b)||c(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=a(c),e;if(e=d){e=d.upper;var f=d.lower;e=!e||!f||w(f)||w(e)||f.equals(e)|| -e.equals(f)||f.contains(e)||e.contains(f)?!1:r(c,e)&&r(c,f)&&b(c,e,f)?!0:!1}return e?d:null}}(),V=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function b(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var b=[],f=["style","className"],d=0;d<f.length;d++){var e=a.$.elements.namedItem(f[d]);e&&(e=new CKEDITOR.dom.element(e), -b.push([e,e.nextSibling]),e.remove())}return b}function h(a,b){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&"form"==a.getName()&&0<b.length)for(var f=b.length-1;0<=f;f--){var d=b[f][0],e=b[f][1];e?d.insertBefore(e):d.appendTo(a)}}function g(a,f){var g=b(a),d={},e=a.$;f||(d["class"]=e.className||"",e.className="");d.inline=e.style.cssText||"";f||(e.style.cssText="position: static; overflow: visible");h(g);return d}function f(a,f){var g=b(a),d=a.$;"class"in f&&(d.className=f["class"]);"inline"in f&&(d.style.cssText= -f.inline);h(g)}function a(a){if(!a.editable().isInline()){var b=CKEDITOR.instances,f;for(f in b){var d=b[f];"wysiwyg"!=d.mode||d.readOnly||(d=d.document.getBody(),d.setAttribute("contentEditable",!1),d.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(b){function h(){var a=e.getViewPaneSize();b.resize(a.width,a.height,null,!0)}if(b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var l=b.lang,d=CKEDITOR.document,e=d.getWindow(), -c,n,w,z=CKEDITOR.TRISTATE_OFF;b.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var r=b.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),p=b.ui.space("contents");if("wysiwyg"==b.mode){var q=b.getSelection();c=q&&q.getRanges();n=e.getScrollPosition()}else{var u=b.editable().$;c=!CKEDITOR.env.ie&&[u.selectionStart,u.selectionEnd];n=[u.scrollLeft,u.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){e.on("resize", -h);w=e.getScrollPosition();for(q=b.container;q=q.getParent();)q.setCustomData("maximize_saved_styles",g(q)),q.setStyle("z-index",b.config.baseFloatZIndex-5);p.setCustomData("maximize_saved_styles",g(p,!0));r.setCustomData("maximize_saved_styles",g(r,!0));p={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};d.getDocumentElement().setStyles(p);!CKEDITOR.env.gecko&&d.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||d.getBody().setStyles(p);CKEDITOR.env.ie? -setTimeout(function(){e.$.scrollTo(0,0)},0):e.$.scrollTo(0,0);r.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");r.$.offsetLeft;r.setStyles({"z-index":b.config.baseFloatZIndex-5,left:"0px",top:"0px"});r.addClass("cke_maximized");h();p=r.getDocumentPosition();r.setStyles({left:-1*p.x+"px",top:-1*p.y+"px"});CKEDITOR.env.gecko&&a(b)}else if(this.state==CKEDITOR.TRISTATE_ON){e.removeListener("resize",h);for(var q=[p,r],t=0;t<q.length;t++)f(q[t],q[t].getCustomData("maximize_saved_styles")), -q[t].removeCustomData("maximize_saved_styles");for(q=b.container;q=q.getParent();)f(q,q.getCustomData("maximize_saved_styles")),q.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){e.$.scrollTo(w.x,w.y)},0):e.$.scrollTo(w.x,w.y);r.removeClass("cke_maximized");CKEDITOR.env.webkit&&(r.setStyle("display","inline"),setTimeout(function(){r.setStyle("display","block")},0));b.fire("resize",{outerHeight:b.container.$.offsetHeight,contentsHeight:p.$.offsetHeight,outerWidth:b.container.$.offsetWidth})}this.toggleState(); -if(q=this.uiItems[0])p=this.state==CKEDITOR.TRISTATE_OFF?l.maximize.maximize:l.maximize.minimize,q=CKEDITOR.document.getById(q._.id),q.getChild(1).setHtml(p),q.setAttribute("title",p),q.setAttribute("href",'javascript:void("'+p+'");');"wysiwyg"==b.mode?c?(CKEDITOR.env.gecko&&a(b),b.getSelection().selectRanges(c),(u=b.getSelection().getStartElement())&&u.scrollIntoView(!0)):e.$.scrollTo(n.x,n.y):(c&&(u.selectionStart=c[0],u.selectionEnd=c[1]),u.scrollLeft=n[0],u.scrollTop=n[1]);c=n=null;z=this.state; -b.fire("maximize",this.state)},canUndo:!1});b.ui.addButton&&b.ui.addButton("Maximize",{label:l.maximize.maximize,command:"maximize",toolbar:"tools,10"});b.on("mode",function(){var a=b.getCommand("maximize");a.setState(a.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:z)},null,null,100)}}})})();(function(){function b(a,b){return CKEDITOR.tools.array.filter(a,function(a){return a.canHandle(b)}).sort(function(a,b){return a.priority===b.priority?0:a.priority-b.priority})}function h(a,b){var d= -a.shift();d&&d.handle(b,function(){h(a,b)})}function g(a){var b=CKEDITOR.tools.array.reduce(a,function(a,b){return CKEDITOR.tools.array.isArray(b.filters)?a.concat(b.filters):a},[]);return CKEDITOR.tools.array.filter(b,function(a,e){return CKEDITOR.tools.array.indexOf(b,a)===e})}function f(b,f){var d=0,e,c;if(!CKEDITOR.tools.array.isArray(b)||0===b.length)return!0;e=CKEDITOR.tools.array.filter(b,function(b){return-1===CKEDITOR.tools.array.indexOf(a,b)});if(0<e.length)for(c=0;c<e.length;c++)(function(b){CKEDITOR.scriptLoader.queue(b, -function(c){c&&a.push(b);++d===e.length&&f()})})(e[c]);return 0===e.length}var a=[],m=CKEDITOR.tools.createClass({$:function(){this.handlers=[]},proto:{register:function(a){"number"!==typeof a.priority&&(a.priority=10);this.handlers.push(a)},addPasteListener:function(a){a.on("paste",function(l){var d=b(this.handlers,l),e;if(0!==d.length){e=g(d);e=f(e,function(){return a.fire("paste",l.data)});if(!e)return l.cancel();h(d,l)}},this,null,3)}}});CKEDITOR.plugins.add("pastetools",{requires:"clipboard", -beforeInit:function(a){a.pasteTools=new m;a.pasteTools.addPasteListener(a)}});CKEDITOR.plugins.pastetools={filters:{},loadFilters:f,createFilter:function(a){var b=CKEDITOR.tools.array.isArray(a.rules)?a.rules:[a.rules],d=a.additionalTransforms;return function(a,c){var f=new CKEDITOR.htmlParser.basicWriter,g=new CKEDITOR.htmlParser.filter,h;d&&(a=d(a,c));CKEDITOR.tools.array.forEach(b,function(b){g.addRules(b(a,c,g))});h=CKEDITOR.htmlParser.fragment.fromHtml(a);g.applyTo(h);h.writeHtml(f);return f.getHtml()}}, -getClipboardData:function(a,b){var d;return CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"text/html"===b?(d=a.dataTransfer.getData(b,!0))||"text/html"!==b?d:a.dataValue:null},getConfigValue:function(a,b){if(a&&a.config){var d=CKEDITOR.tools,e=a.config,c=d.object.keys(e),f=["pasteTools_"+b,"pasteFromWord_"+b,"pasteFromWord"+d.capitalize(b,!0)],f=d.array.find(f,function(a){return-1!==d.array.indexOf(c,a)});return e[f]}}};CKEDITOR.pasteFilters={}})();(function(){CKEDITOR.plugins.add("pastefromgdocs", -{requires:"pastetools",init:function(b){var h=CKEDITOR.plugins.getPath("pastetools"),g=this.path;b.pasteTools.register({filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(g+"filter/default.js")],canHandle:function(b){return/id=(\"|\')?docs\-internal\-guid\-/.test(b.data.dataValue)},handle:function(f,a){var g=f.data,h=CKEDITOR.plugins.pastetools.getClipboardData(g,"text/html");g.dontFilter=!0;g.dataValue=CKEDITOR.pasteFilters.gdocs(h,b);!0===b.config.forcePasteAsPlainText&&(g.type="text"); -a()}})}})})();(function(){CKEDITOR.plugins.add("pastefromword",{requires:"pastetools",init:function(b){function h(a){var b=CKEDITOR.plugins.pastefromword&&CKEDITOR.plugins.pastefromword.images,d,e=[];if(b&&a.editor.filter.check("img[src]")&&(d=b.extractTagsFromHtml(a.data.dataValue),0!==d.length&&(b=b.extractFromRtf(a.data.dataTransfer["text/rtf"]),0!==b.length&&(CKEDITOR.tools.array.forEach(b,function(a){e.push(a.type?"data:"+a.type+";base64,"+CKEDITOR.tools.convertBytesToBase64(CKEDITOR.tools.convertHexStringToBytes(a.hex)): -null)},this),d.length===e.length))))for(b=0;b<d.length;b++)0===d[b].indexOf("file://")&&e[b]&&(a.data.dataValue=a.data.dataValue.replace(d[b],e[b]))}var g=0,f=CKEDITOR.plugins.getPath("pastetools"),a=this.path,m=void 0===b.config.pasteFromWord_inlineImages?!0:b.config.pasteFromWord_inlineImages,f=[CKEDITOR.getUrl(f+"filter/common.js"),CKEDITOR.getUrl(a+"filter/default.js")];b.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a,b){g=1;a.execCommand("paste",{type:"html",notification:b&& -"undefined"!==typeof b.notification?b.notification:!0})}});CKEDITOR.plugins.clipboard.addPasteButton(b,"PasteFromWord",{label:b.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});b.pasteTools.register({filters:b.config.pasteFromWordCleanupFile?[b.config.pasteFromWordCleanupFile]:f,canHandle:function(a){a=a.data.dataValue;var b=/(class=\"?Mso|style=(?:\"|\')[^\"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,b=/<meta\s*name=(?:\"|\')?generator(?:\"|\')?\s*content=(?:\"|\')?microsoft/gi.test(a)|| -b.test(a);return a&&(g||b)},handle:function(a,f){var d=a.data,e=CKEDITOR.plugins.pastetools.getClipboardData(d,"text/html"),c=CKEDITOR.plugins.pastetools.getClipboardData(d,"text/rtf"),e={dataValue:e,dataTransfer:{"text/rtf":c}};if(!1!==b.fire("pasteFromWord",e)||g){d.dontFilter=!0;if(g||!b.config.pasteFromWordPromptCleanup||confirm(b.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(e.dataValue,b),b.fire("afterPasteFromWord",e),d.dataValue=e.dataValue,!0===b.config.forcePasteAsPlainText? -d.type="text":CKEDITOR.plugins.clipboard.isCustomCopyCutSupported||"allow-word"!==b.config.forcePasteAsPlainText||(d.type="html");g=0;f()}}});if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&m)b.on("afterPasteFromWord",h)}})})();(function(){var b={canUndo:!1,async:!0,exec:function(b,g){var f=b.lang,a=CKEDITOR.tools.keystrokeToString(f.common.keyboard,b.getCommandKeystroke(CKEDITOR.env.ie?b.commands.paste:this)),m=g&&"undefined"!==typeof g.notification?g.notification:!g||!g.from||"keystrokeHandler"=== -g.from&&CKEDITOR.env.ie,f=m&&"string"===typeof m?m:f.pastetext.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+a.aria+'"\x3e'+a.display+"\x3c/kbd\x3e");b.execCommand("paste",{type:"text",notification:m?f:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(h){var g=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+86:CKEDITOR.CTRL+CKEDITOR.SHIFT+86;h.addCommand("pastetext",b);h.setKeystroke(g,"pastetext");CKEDITOR.plugins.clipboard.addPasteButton(h,"PasteText", -{label:h.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(h.config.forcePasteAsPlainText)h.on("beforePaste",function(b){"html"!=b.data.type&&(b.data.type="text")});h.on("pasteState",function(b){h.getCommand("pastetext").setState(b.data)})}})})();CKEDITOR.plugins.add("removeformat",{init:function(b){b.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);b.ui.addButton&&b.ui.addButton("RemoveFormat",{label:b.lang.removeformat.toolbar,command:"removeFormat", -toolbar:"cleanup,10"})}});CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(b){for(var h=b._.removeFormatRegex||(b._.removeFormatRegex=new RegExp("^(?:"+b.config.removeFormatTags.replace(/,/g,"|")+")$","i")),g=b._.removeAttributes||(b._.removeAttributes=b.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,a=b.getSelection().getRanges().createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},k=[],l;l=a.getNextRange();){var d=l.createBookmark(); -l=b.createRange();l.setStartBefore(d.startNode);d.endNode&&l.setEndAfter(d.endNode);l.collapsed||l.enlarge(CKEDITOR.ENLARGE_ELEMENT);var e=l.createBookmark(),c=e.startNode,n=e.endNode,w=function(a){for(var c=b.elementPath(a),d=c.elements,e=1,g;(g=d[e])&&!g.equals(c.block)&&!g.equals(c.blockLimit);e++)h.test(g.getName())&&f(b,g)&&a.breakParent(g)};w(c);if(n)for(w(n),c=c.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);c&&!c.equals(n);)if(c.isReadOnly()){if(c.getPosition(n)&CKEDITOR.POSITION_CONTAINS)break; -c=c.getNext(m)}else w=c.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==c.getName()&&c.data("cke-realelement")||c.hasAttribute("data-cke-bookmark")||!f(b,c)||(h.test(c.getName())?c.remove(1):(c.removeAttributes(g),b.fire("removeFormatCleanup",c))),c=w;e.startNode.remove();e.endNode&&e.endNode.remove();l.moveToBookmark(d);k.push(l)}b.forceNextSelectionCheck();b.getSelection().selectRanges(k)}}},filter:function(b,h){for(var g=b._.removeFormatFilters||[],f=0;f<g.length;f++)if(!1===g[f](h))return!1; -return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(b){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(b)};CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var";CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";(function(){function b(b,f,a){var m,k;if(a="string"==typeof a?CKEDITOR.document.getById(a):new CKEDITOR.dom.element(a))if(m= -b.fire("uiSpace",{space:f,html:""}).html)b.on("uiSpace",function(a){a.data.space==f&&a.cancel()},null,null,1),k=a.append(CKEDITOR.dom.element.createFromHtml(h.output({id:b.id,name:b.name,langDir:b.lang.dir,langCode:b.langCode,space:f,spaceId:b.ui.spaceId(f),content:m}))),a.getCustomData("cke_hasshared")?k.hide():a.setCustomData("cke_hasshared",1),k.unselectable(),k.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()}),b.focusManager.add(k,1),b.on("focus",function(){for(var b= -0,d,e=a.getChildren();d=e.getItem(b);b++)d.type==CKEDITOR.NODE_ELEMENT&&!d.equals(k)&&d.hasClass("cke_shared")&&d.hide();k.show()}),b.on("destroy",function(){k.remove()})}var h=CKEDITOR.addTemplate("sharedcontainer",'\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{spaceId}" class\x3d"cke_{space}" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'); -CKEDITOR.plugins.add("sharedspace",{init:function(g){g.on("loaded",function(){var f=g.config.sharedSpaces;if(f)for(var a in f)b(g,a,f[a])},null,null,9)}})})();(function(){var b={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var g=this.state!=CKEDITOR.TRISTATE_ON||b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!b.focusManager.hasFocus?"removeClass":"attachClass";b.editable()[g]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks", -{onLoad:function(){var b="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),g,f,a,m,k=CKEDITOR.getUrl(this.path),l=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),d=l?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":"",e,c;for(g=f=a=m="";e=b.pop();)c=b.length?",":"",g+=".cke_show_blocks "+e+d+c,a+=".cke_show_blocks.cke_contents_ltr "+e+d+c,m+=".cke_show_blocks.cke_contents_rtl "+e+d+c,f+=".cke_show_blocks "+e+d+"{background-image:url("+CKEDITOR.getUrl(k+"images/block_"+e+".png")+")}"; -CKEDITOR.addCss((g+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(f,a+"{background-position:top left;padding-left:8px}",m+"{background-position:top right;padding-right:8px}"));l||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")}, -init:function(h){function g(){f.refresh(h)}if(!h.blockless){var f=h.addCommand("showblocks",b);f.canUndo=!1;h.config.startupOutlineBlocks&&f.setState(CKEDITOR.TRISTATE_ON);h.ui.addButton&&h.ui.addButton("ShowBlocks",{label:h.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});h.on("mode",function(){f.state!=CKEDITOR.TRISTATE_DISABLED&&f.refresh(h)});h.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(h.on("focus",g),h.on("blur",g));h.on("contentDom",function(){f.state!=CKEDITOR.TRISTATE_DISABLED&& -f.refresh(h)})}}})})();(function(){var b={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var g=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";b.editable()[g]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var b;b=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 \x3e tr \x3e td, .%1 table.%2 \x3e tr \x3e th,;.%1 table.%2 \x3e tbody \x3e tr \x3e td, .%1 table.%2 \x3e tbody \x3e tr \x3e th,;.%1 table.%2 \x3e thead \x3e tr \x3e td, .%1 table.%2 \x3e thead \x3e tr \x3e th,;.%1 table.%2 \x3e tfoot \x3e tr \x3e td, .%1 table.%2 \x3e tfoot \x3e tr \x3e th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g, +(this.allowedContent.div=!0)}function g(b){var a=b.editor,g=a.createRange();g.setStartBefore(b.data.node);g.setEndAfter(b.data.node);for(var h=new CKEDITOR.dom.walker(g),k;k=h.next();)if(k.type==CKEDITOR.NODE_ELEMENT)if(!k.equals(b.data.node)&&k.getDirection())g.setStartAfter(k),h=new CKEDITOR.dom.walker(g);else{var c=a.config.justifyClasses;c&&(k.hasClass(c[0])?(k.removeClass(c[0]),k.addClass(c[2])):k.hasClass(c[2])&&(k.removeClass(c[2]),k.addClass(c[0])));c=k.getStyle("text-align");"left"==c?k.setStyle("text-align", +"right"):"right"==c&&k.setStyle("text-align","left")}}h.prototype={exec:function(e){var a=e.getSelection(),g=e.config.enterMode;if(a){for(var h=a.createBookmarks(),k=a.getRanges(),c=this.cssClassName,f,d,n=e.config.useComputedState,n=void 0===n||n,w=k.length-1;0<=w;w--)for(f=k[w].createIterator(),f.enlargeBr=g!=CKEDITOR.ENTER_BR;d=f.getNextParagraph(g==CKEDITOR.ENTER_P?"p":"div");)if(!d.isReadOnly()){var v=d.getName(),p;p=e.activeFilter.check(v+"{text-align}");if((v=e.activeFilter.check(v+"("+c+")"))|| +p){d.removeAttribute("align");d.removeStyle("text-align");var r=c&&(d.$.className=CKEDITOR.tools.ltrim(d.$.className.replace(this.cssClassRegex,""))),q=this.state==CKEDITOR.TRISTATE_OFF&&(!n||b(d,!0)!=this.value);c&&v?q?d.addClass(c):r||d.removeAttribute("class"):q&&p&&d.setStyle("text-align",this.value)}}e.focus();e.forceNextSelectionCheck();a.selectBookmarks(h)}},refresh:function(e,a){var g=a.block||a.blockLimit,h=g.getName(),k=g.equals(e.editable()),h=this.cssClassName?e.activeFilter.check(h+"("+ +this.cssClassName+")"):e.activeFilter.check(h+"{text-align}");k&&!CKEDITOR.dtd.$list[a.lastElement.getName()]?this.setState(CKEDITOR.TRISTATE_OFF):!k&&h?this.setState(b(g,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(b){if(!b.blockless){var a=new h(b,"justifyleft","left"),m=new h(b,"justifycenter","center"),l=new h(b,"justifyright","right"),k=new h(b,"justifyblock", +"justify");b.addCommand("justifyleft",a);b.addCommand("justifycenter",m);b.addCommand("justifyright",l);b.addCommand("justifyblock",k);b.ui.addButton&&(b.ui.addButton("JustifyLeft",{label:b.lang.common.alignLeft,command:"justifyleft",toolbar:"align,10"}),b.ui.addButton("JustifyCenter",{label:b.lang.common.center,command:"justifycenter",toolbar:"align,20"}),b.ui.addButton("JustifyRight",{label:b.lang.common.alignRight,command:"justifyright",toolbar:"align,30"}),b.ui.addButton("JustifyBlock",{label:b.lang.common.justify, +command:"justifyblock",toolbar:"align,40"}));b.on("dirChanged",g)}}})})();CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var b=function(b){var g=this._,e=g.menu;g.state!==CKEDITOR.TRISTATE_DISABLED&&(g.on&&e?e.hide():(g.previousState=g.state,e||(e=g.menu=new CKEDITOR.menu(b,{panel:{className:"cke_menu_panel",attributes:{"aria-label":b.lang.common.options}}}),e.onHide=CKEDITOR.tools.bind(function(){var a=this.command?b.getCommand(this.command).modes:this.modes;this.setState(!a|| +a[b.mode]?g.previousState:CKEDITOR.TRISTATE_DISABLED);g.on=0},this),this.onMenu&&e.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),g.on=1,setTimeout(function(){e.show(CKEDITOR.document.getById(g.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(h){delete h.panel;this.base(h);this.hasArrow="menu";this.click=b},statics:{handler:{create:function(b){return new CKEDITOR.ui.menuButton(b)}}}})},beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_MENUBUTTON, +CKEDITOR.ui.menuButton.handler)}});CKEDITOR.UI_MENUBUTTON="menubutton";"use strict";(function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(b){var h=b.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],g=this,e=b.lang.language,a={},m,l,k,c;b.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(b,c){var e=a["language_"+c];if(e)b[e.style.checkActive(b.elementPath(),b)?"removeStyle":"applyStyle"](e.style)}, +refresh:function(a){this.setState(g.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(c=0;c<h.length;c++)m=h[c].split(":"),l=m[0],k="language_"+l,a[k]={label:m[1],langId:l,group:"language",order:c,ltr:"rtl"!=(""+m[2]).toLowerCase(),onClick:function(){b.execCommand("language",this.langId)},role:"menuitemcheckbox"},a[k].style=new CKEDITOR.style({element:"span",attributes:{lang:l,dir:a[k].ltr?"ltr":"rtl"}});a.language_remove={label:e.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED, +order:a.length,onClick:function(){var a=g.getCurrentLangElement(b);a&&b.execCommand("language",a.getAttribute("lang"))}};b.addMenuGroup("language",1);b.addMenuGroup("language_remove");b.addMenuItems(a);b.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:e.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var c={},d=g.getCurrentLangElement(b),e;for(e in a)c[e]=CKEDITOR.TRISTATE_OFF;c.language_remove=d?CKEDITOR.TRISTATE_OFF: +CKEDITOR.TRISTATE_DISABLED;d&&(c["language_"+d.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return c}});b.addRemoveFormatFilter&&b.addRemoveFormatFilter(function(a){return!(a.is("span")&&a.getAttribute("dir")&&a.getAttribute("lang"))})},getCurrentLangElement:function(b){var h=b.elementPath();b=h&&h.elements;var g;if(h)for(var e=0;e<b.length;e++)h=b[e],!g&&"span"==h.getName()&&h.hasAttribute("dir")&&h.hasAttribute("lang")&&(g=h);return g}})})();(function(){function b(a,b,c,d){for(var f=CKEDITOR.plugins.list.listToArray(b.root, +c),e=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(e.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}for(var h=b.root.getDocument(),k,l,g=0;g<e.length;g++){var m=e[g].getCustomData("listarray_index");k=f[m].parent;k.is(this.type)||(l=h.createElement(this.type),k.copyAttributes(l,{start:1,type:1}),l.removeStyle("list-style-type"),f[m].parent=l)}c=CKEDITOR.plugins.list.arrayToList(f,c,null,a.config.enterMode); +for(var n,f=c.listNode.getChildCount(),g=0;g<f&&(n=c.listNode.getChild(g));g++)n.getName()==this.type&&d.push(n);c.listNode.replace(b.root);a.fire("contentDomInvalidated")}function h(a,b,c){var d=b.contents,f=b.root.getDocument(),e=[];if(1==d.length&&d[0].equals(b.root)){var g=f.createElement("div");d[0].moveChildren&&d[0].moveChildren(g);d[0].append(g);d[0]=g}b=b.contents[0].getParent();for(g=0;g<d.length;g++)b=b.getCommonAncestor(d[g].getParent());a=a.config.useComputedState;var h,k;a=void 0=== +a||a;for(g=0;g<d.length;g++)for(var l=d[g],m;m=l.getParent();){if(m.equals(b)){e.push(l);!k&&l.getDirection()&&(k=1);l=l.getDirection(a);null!==h&&(h=h&&h!=l?null:l);break}l=m}if(!(1>e.length)){d=e[e.length-1].getNext();g=f.createElement(this.type);for(c.push(g);e.length;)c=e.shift(),a=f.createElement("li"),l=c,l.is("pre")||p.test(l.getName())||"false"==l.getAttribute("contenteditable")?c.appendTo(a):(c.copyAttributes(a),h&&c.getDirection()&&(a.removeStyle("direction"),a.removeAttribute("dir")),c.moveChildren(a), +c.remove()),a.appendTo(g);h&&k&&g.setAttribute("dir",h);d?g.insertBefore(d):g.appendTo(b)}}function g(a,b,c){function d(c){if(!(!(l=k[c?"getFirst":"getLast"]())||l.is&&l.isBlockBoundary()||!(m=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||m.is&&m.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](l)}for(var f=CKEDITOR.plugins.list.listToArray(b.root,c),e=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&& +(e.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}h=null;for(g=0;g<e.length;g++)h=e[g].getCustomData("listarray_index"),f[h].indent=-1;for(g=h+1;g<f.length;g++)if(f[g].indent>f[g-1].indent+1){e=f[g-1].indent+1-f[g].indent;for(h=f[g].indent;f[g]&&f[g].indent>=h;)f[g].indent+=e,g++;g--}var k=CKEDITOR.plugins.list.arrayToList(f,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,l,m;d(!0);d();k.replace(b.root);a.fire("contentDomInvalidated")}function e(a,b){this.name= +a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function a(a,b,c,d){for(var f,e;f=a[d?"getLast":"getFirst"](r);)(e=f.getDirection(1))!==b.getDirection(1)&&f.setAttribute("dir",e),f.remove(),c?f[d?"insertBefore":"insertAfter"](c):b.append(f,d),c=f}function m(b){function c(d){var f=b[d?"getPrevious":"getNext"](w);f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(b.getName())&&(a(b,f,null,!d),b.remove(),b=f)}c();c(1)}function l(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in +CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function k(b,d,f){b.fire("saveSnapshot");f.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var e=f.extractContents();d.trim(!1,!0);var g=d.createBookmark(),h=new CKEDITOR.dom.elementPath(d.startContainer),k=h.block,h=h.lastElement.getAscendant("li",1)||k,l=new CKEDITOR.dom.elementPath(f.startContainer),n=l.contains(CKEDITOR.dtd.$listItem),l=l.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():l&&(k=l.getPrevious(w))&& +v(k)&&k.remove();(k=e.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br")&&k.remove();(k=d.startContainer.getChild(d.startOffset))?e.insertBefore(k):d.startContainer.append(e);n&&(e=c(n))&&(h.contains(n)?(a(e,n.getParent(),n),e.remove()):h.append(e));for(;f.checkStartOfBlock()&&f.checkEndOfBlock();){l=f.startPath();e=l.block;if(!e)break;e.is("li")&&(h=e.getParent(),e.equals(h.getLast(w))&&e.equals(h.getFirst(w))&&(e=h));f.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);e.remove()}f=f.clone();e= +b.editable();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=new CKEDITOR.dom.walker(f);f.evaluator=function(a){return w(a)&&!v(a)};(f=f.next())&&f.type==CKEDITOR.NODE_ELEMENT&&f.getName()in CKEDITOR.dtd.$list&&m(f);d.moveToBookmark(g);d.select();b.fire("saveSnapshot")}function c(a){return(a=a.getLast(w))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in f?a:null}var f={ol:1,ul:1},d=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),w=function(a){return!(d(a)||n(a))},v=CKEDITOR.dom.walker.bogus(); +CKEDITOR.plugins.list={listToArray:function(a,b,c,d,e){if(!f[a.getName()])return[];d||(d=0);c||(c=[]);for(var g=0,h=a.getChildCount();g<h;g++){var k=a.getChild(g);k.type==CKEDITOR.NODE_ELEMENT&&k.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(k,b,c,d+1);if("li"==k.$.nodeName.toLowerCase()){var l={parent:a,indent:d,element:k,contents:[]};e?l.grandparent=e:(l.grandparent=a.getParent(),l.grandparent&&"li"==l.grandparent.$.nodeName.toLowerCase()&&(l.grandparent=l.grandparent.getParent())); +b&&CKEDITOR.dom.element.setMarker(b,k,"listarray_index",c.length);c.push(l);for(var m=0,n=k.getChildCount(),r;m<n;m++)r=k.getChild(m),r.type==CKEDITOR.NODE_ELEMENT&&f[r.getName()]?CKEDITOR.plugins.list.listToArray(r,b,c,d+1,l.grandparent):l.contents.push(r)}}return c},arrayToList:function(a,b,c,d,e){c||(c=0);if(!a||a.length<c+1)return null;for(var g,h=a[c].parent.getDocument(),k=new CKEDITOR.dom.documentFragment(h),l=null,m=c,r=Math.max(a[c].indent,0),p=null,v,F,M=d==CKEDITOR.ENTER_P?"p":"div";;){var H= +a[m];g=H.grandparent;v=H.element.getDirection(1);if(H.indent==r){l&&a[m].parent.getName()==l.getName()||(l=a[m].parent.clone(!1,1),e&&l.setAttribute("dir",e),k.append(l));p=l.append(H.element.clone(0,1));v!=l.getDirection(1)&&p.setAttribute("dir",v);for(g=0;g<H.contents.length;g++)p.append(H.contents[g].clone(1,1));m++}else if(H.indent==Math.max(r,0)+1)H=a[m-1].element.getDirection(1),m=CKEDITOR.plugins.list.arrayToList(a,null,m,d,H!=v?v:null),!p.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>= +h.$.documentMode&&p.append(h.createText(" ")),p.append(m.listNode),m=m.nextIndex;else if(-1==H.indent&&!c&&g){f[g.getName()]?(p=H.element.clone(!1,!0),v!=g.getDirection(1)&&p.setAttribute("dir",v)):p=new CKEDITOR.dom.documentFragment(h);var l=g.getDirection(1)!=v,J=H.element,D=J.getAttribute("class"),K=J.getAttribute("style"),O=p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(d!=CKEDITOR.ENTER_BR||l||K||D),N,Y=H.contents.length,R;for(g=0;g<Y;g++)if(N=H.contents[g],n(N)&&1<Y)O?R=N.clone(1,1):p.append(N.clone(1, +1));else if(N.type==CKEDITOR.NODE_ELEMENT&&N.isBlockBoundary()){l&&!N.getDirection()&&N.setAttribute("dir",v);F=N;var W=J.getAttribute("style");W&&F.setAttribute("style",W.replace(/([^;])$/,"$1;")+(F.getAttribute("style")||""));D&&N.addClass(D);F=null;R&&(p.append(R),R=null);p.append(N.clone(1,1))}else O?(F||(F=h.createElement(M),p.append(F),l&&F.setAttribute("dir",v)),K&&F.setAttribute("style",K),D&&F.setAttribute("class",D),R&&(F.append(R),R=null),F.append(N.clone(1,1))):p.append(N.clone(1,1)); +R&&((F||p).append(R),R=null);p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&m!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(v=p.getLast())&&v.type==CKEDITOR.NODE_ELEMENT&&v.is("br")&&v.remove(),(v=p.getLast(w))&&v.type==CKEDITOR.NODE_ELEMENT&&v.is(CKEDITOR.dtd.$block)||p.append(h.createElement("br")));v=p.$.nodeName.toLowerCase();"div"!=v&&"p"!=v||p.appendBogus();k.append(p);l=null;m++}else return null;F=null;if(a.length<=m||Math.max(a[m].indent,0)<r)break}if(b)for(a=k.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&& +(CKEDITOR.dom.element.clearMarkers(b,a),a.getName()in CKEDITOR.dtd.$listItem&&(c=a,h=e=d=void 0,d=c.getDirection()))){for(e=c.getParent();e&&!(h=e.getDirection());)e=e.getParent();d==h&&c.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:k,nextIndex:m}}};var p=/^h[1-6]$/,r=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(a){function c(a){return f[a.root.getName()]&&!d(a.root,[CKEDITOR.NODE_COMMENT])}function d(a,b){return CKEDITOR.tools.array.filter(a.getChildren().toArray(), +function(a){return-1===CKEDITOR.tools.array.indexOf(b,a.type)}).length}function e(a){var b=!0;if(0===a.getChildCount())return!1;a.forEach(function(a){if(a.type!==CKEDITOR.NODE_COMMENT)return b=!1},null,!0);return b}this.refresh(a,a.elementPath());var k=a.config,l=a.getSelection(),n=l&&l.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var r=a.editable();if(r.getFirst(w)){var p=1==n.length&&n[0];(k=p&&p.getEnclosedNode())&&k.is&&this.type==k.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else k.enterMode== +CKEDITOR.ENTER_BR?r.appendBogus():n[0].fixBlock(1,k.enterMode==CKEDITOR.ENTER_P?"p":"div"),l.selectRanges(n)}for(var k=l.createBookmarks(!0),r=[],v={},n=n.createIterator(),G=0;(p=n.getNextRange())&&++G;){var I=p.getBoundaryNodes(),L=I.startNode,F=I.endNode;L.type==CKEDITOR.NODE_ELEMENT&&"td"==L.getName()&&p.setStartAt(I.startNode,CKEDITOR.POSITION_AFTER_START);F.type==CKEDITOR.NODE_ELEMENT&&"td"==F.getName()&&p.setEndAt(I.endNode,CKEDITOR.POSITION_BEFORE_END);p=p.createIterator();for(p.forceBrBreak= +this.state==CKEDITOR.TRISTATE_OFF;I=p.getNextParagraph();)if(!I.getCustomData("list_block")&&!e(I)){CKEDITOR.dom.element.setMarker(v,I,"list_block",1);for(var M=a.elementPath(I),L=M.elements,F=0,M=M.blockLimit,H,J=L.length-1;0<=J&&(H=L[J]);J--)if(f[H.getName()]&&M.contains(H)){M.removeCustomData("list_group_object_"+G);(L=H.getCustomData("list_group_object"))?L.contents.push(I):(L={root:H,contents:[I]},r.push(L),CKEDITOR.dom.element.setMarker(v,H,"list_group_object",L));F=1;break}F||(F=M,F.getCustomData("list_group_object_"+ +G)?F.getCustomData("list_group_object_"+G).contents.push(I):(L={root:F,contents:[I]},CKEDITOR.dom.element.setMarker(v,F,"list_group_object_"+G,L),r.push(L)))}}for(H=[];0<r.length;)L=r.shift(),this.state==CKEDITOR.TRISTATE_OFF?c(L)||(f[L.root.getName()]?b.call(this,a,L,v,H):h.call(this,a,L,H)):this.state==CKEDITOR.TRISTATE_ON&&f[L.root.getName()]&&!c(L)&&g.call(this,a,L,v);for(J=0;J<H.length;J++)m(H[J]);CKEDITOR.dom.element.clearAllMarkers(v);l.selectBookmarks(k);a.focus()},refresh:function(a,b){var c= +b.contains(f,1),d=b.blockLimit||b.root;c&&d.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){a.blockless||(a.addCommand("numberedlist",new e("numberedlist","ol")),a.addCommand("bulletedlist",new e("bulletedlist","ul")),a.ui.addButton&&(a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),a.ui.addButton("BulletedList", +{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var d=b.data.domEvent.getKey(),e;if("wysiwyg"==a.mode&&d in{8:1,46:1}){var g=a.getSelection().getRanges()[0],h=g&&g.startPath();if(g&&g.collapsed){var m=8==d,n=a.editable(),r=new CKEDITOR.dom.walker(g.clone());r.evaluator=function(a){return w(a)&&!v(a)};r.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};d=g.clone();if(m){var p;(p=h.contains(f))&&g.checkBoundaryOfElement(p, +CKEDITOR.START)&&(p=p.getParent())&&p.is("li")&&(p=c(p))?(e=p,p=p.getPrevious(w),d.moveToPosition(p&&v(p)?p:e,CKEDITOR.POSITION_BEFORE_START)):(r.range.setStartAt(n,CKEDITOR.POSITION_AFTER_START),r.range.setEnd(g.startContainer,g.startOffset),(p=r.previous())&&p.type==CKEDITOR.NODE_ELEMENT&&(p.getName()in f||p.is("li"))&&(p.is("li")||(r.range.selectNodeContents(p),r.reset(),r.evaluator=l,p=r.previous()),e=p,d.moveToElementEditEnd(e),d.moveToPosition(d.endPath().block,CKEDITOR.POSITION_BEFORE_END))); +if(e)k(a,d,g),b.cancel();else{var G=h.contains(f);G&&g.checkBoundaryOfElement(G,CKEDITOR.START)&&(e=G.getFirst(w),g.checkBoundaryOfElement(e,CKEDITOR.START)&&(p=G.getPrevious(w),c(e)?p&&(g.moveToElementEditEnd(p),g.select()):a.execCommand("outdent"),b.cancel()))}}else if(e=h.contains("li")){if(r.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),m=(n=e.getLast(w))&&l(n)?n:e,h=0,(p=r.next())&&p.type==CKEDITOR.NODE_ELEMENT&&p.getName()in f&&p.equals(n)?(h=1,p=r.next()):g.checkBoundaryOfElement(m,CKEDITOR.END)&& +(h=2),h&&p){g=g.clone();g.moveToElementEditStart(p);if(1==h&&(d.optimize(),!d.startContainer.equals(e))){for(e=d.startContainer;e.is(CKEDITOR.dtd.$inline);)G=e,e=e.getParent();G&&d.moveToPosition(G,CKEDITOR.POSITION_AFTER_END)}2==h&&(d.moveToPosition(d.endPath().block,CKEDITOR.POSITION_BEFORE_END),g.endPath().block&&g.moveToPosition(g.endPath().block,CKEDITOR.POSITION_AFTER_START));k(a,d,g);b.cancel()}}else r.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),(p=r.next())&&p.type==CKEDITOR.NODE_ELEMENT&& +p.is(f)&&(p=p.getFirst(w),h.block&&g.checkStartOfBlock()&&g.checkEndOfBlock()?(h.block.remove(),g.moveToElementEditStart(p),g.select()):c(p)?(g.moveToElementEditStart(p),g.select()):(g=g.clone(),g.moveToElementEditStart(p),k(a,d,g)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})})();"use strict";(function(){function b(a,b,c){return n(b)&&n(c)&&c.equals(b.getNext(function(a){return!(S(a)||V(a)||w(a))}))}function h(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))} +function g(a){var b=a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var c=l(b);if("true"==c.getAttribute("contenteditable"))return b;if(c.is(a.triggers))return c}return null}function e(a,b,c){y(a,b);y(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function a(a,b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!S(b)||n(b)&&!w(b)&&!d(a,b)})}function m(a,b,c){return a>b&&a<c}function l(a,b){if(a.data("cke-editable"))return null; +for(b||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function k(a){var b=a.doc,d=G('\x3cspan contenteditable\x3d"false" data-cke-magic-line\x3d"1" style\x3d"'+ca+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),f=CKEDITOR.getUrl(this.path+"images/"+(I.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");A(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this}, +lineChildren:[A(G('\x3cspan title\x3d"'+a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:ca+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+f+") center no-repeat "+a.boxColor+";cursor:pointer;"+(I.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(I.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}), +A(G(da,b),{base:aa+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),A(G(da,b),{base:aa+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){y(a,this);var b=a.holdDistance,c=this.size; +return c&&m(a.mouse.y,c.top-b,c.bottom+b)&&m(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,f=d.upper,e=d.lower,g=f||e,h=g.getParent(),k={};this.trigger=d;f&&y(a,f,!0);e&&y(a,e,!0);y(a,h,!0);a.inInlineMode&&u(a,!0);h.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x, +k.right="");f&&e?k.top=f.size.margin.bottom===e.size.margin.top?0|f.size.bottom+f.size.margin.bottom/2:f.size.margin.bottom<e.size.margin.top?f.size.bottom+f.size.margin.bottom:f.size.bottom+f.size.margin.bottom-e.size.margin.top:f?e||(k.top=f.size.bottom+f.size.margin.bottom):k.top=e.size.top-e.size.margin.top;d.is(O)||m(k.top,b.scroll.y-15,b.scroll.y+5)?(k.top=a.inInlineMode?0:b.scroll.y,this.look(O)):d.is(N)||m(k.top,b.pane.bottom-5,b.pane.bottom+15)?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+ +b.editable.padding.bottom:b.pane.bottom-1,this.look(N)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(Y));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var l in k)k[l]=CKEDITOR.tools.cssLength(k[l]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new E("span",a.doc)});for(b=d.lineChildren.length;b--;)d.lineChildren[b].appendTo(d); +d.look(Y);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();c(a,function(b){var c=a.line.trigger;b[c.is(H)?"insertBefore":"insertAfter"](c.is(H)?c.lower:c.upper)},!0);a.editor.focus();I.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();b.data.preventDefault(!0)});d.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=d}function c(a,b,c){var d=new CKEDITOR.dom.range(a.doc),f=a.editor,e;I.ie&&a.enterMode==CKEDITOR.ENTER_BR?e=a.doc.createText(R): +(e=(e=l(a.element,!0))&&e.data("cke-enter-mode")||a.enterMode,e=new E(M[e],a.doc),e.is("br")||a.doc.createText(R).appendTo(e));c&&f.fire("saveSnapshot");b(e);d.moveToPosition(e,CKEDITOR.POSITION_AFTER_START);f.getSelection().selectRanges([d]);a.hotNode=e;c&&f.fire("saveSnapshot")}function f(b,d){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function f(a){var e=I.ie&&9>I.version?" ":R,g=b.hotNode&&b.hotNode.getText()==e&&b.element.equals(b.hotNode)&&b.lastCmdDirection===!!d;c(b,function(c){g&& +b.hotNode&&b.hotNode.remove();c[d?"insertAfter":"insertBefore"](a);c.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!d});b.lastCmdDirection=!!d});I.ie||b.enterMode==CKEDITOR.ENTER_BR||b.hotNode.scrollIntoView();b.line.detach()}return function(c){c=c.getSelection().getStartElement();var e;c=c.getAscendant(T,1);if(!r(b,c)&&c&&!c.equals(b.editable)&&!c.contains(b.editable)){(e=l(c))&&"false"==e.getAttribute("contenteditable")&&(c=e);b.element=c;e=a(b,c,!d);var h;n(e)&&e.is(b.triggers)&& +e.is(X)&&(!a(b,e,!d)||(h=a(b,e,!d))&&n(h)&&h.is(b.triggers))?f(e):(h=g(b,c),n(h)&&(a(b,h,!d)?(c=a(b,h,!d))&&n(c)&&c.is(b.triggers)&&f(h):f(h)))}}}()}}function d(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function w(a){if(!n(a))return!1;var b;(b=v(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function v(a){return!!{absolute:1, +fixed:1}[a.getComputedStyle("position")]}function p(a,b){return n(b)?b.is(a.triggers):null}function r(a,b){if(!b)return!1;for(var c=b.getParents(1),d=c.length;d--;)for(var f=a.tabuList.length;f--;)if(c[d].hasAttribute(a.tabuList[f]))return!0;return!1}function q(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(ea)});if(!b)return!1;y(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function x(a){var b=a.editable,c=a.mouse,f=a.view,e=a.triggerOffset;u(a);var g=c.y> +(a.inInlineMode?f.editable.top+f.editable.height/2:Math.min(f.editable.height,f.pane.height)/2),b=b[g?"getLast":"getFirst"](function(a){return!(S(a)||V(a))});if(!b)return null;d(a,b)&&(b=a.line.wrap[g?"getPrevious":"getNext"](function(a){return!(S(a)||V(a))}));if(!n(b)||w(b)||!p(a,b))return null;y(a,b);return!g&&0<=b.size.top&&m(c.y,0,b.size.top+e)?(a=a.inInlineMode||0===f.scroll.y?O:Y,new h([null,b,H,K,a])):g&&b.size.bottom<=f.pane.height&&m(c.y,b.size.bottom-e,f.pane.height)?(a=a.inInlineMode|| +m(b.size.bottom,f.pane.height-e,f.pane.height)?N:Y,new h([b,null,J,K,a])):null}function t(b){var c=b.mouse,d=b.view,f=b.triggerOffset,e=g(b);if(!e)return null;y(b,e);var f=Math.min(f,0|e.size.outerHeight/2),k=[],l,r;if(m(c.y,e.size.top-1,e.size.top+f))r=!1;else if(m(c.y,e.size.bottom-f,e.size.bottom+1))r=!0;else return null;if(w(e)||q(b,e,r)||e.getParent().is(W))return null;var t=a(b,e,!r);if(t){if(t&&t.type==CKEDITOR.NODE_TEXT)return null;if(n(t)){if(w(t)||!p(b,t)||t.getParent().is(W))return null; +k=[t,e][r?"reverse":"concat"]().concat([D,K])}}else e.equals(b.editable[r?"getLast":"getFirst"](b.isRelevant))?(u(b),r&&m(c.y,e.size.bottom-f,d.pane.height)&&m(e.size.bottom,d.pane.height-f,d.pane.height)?l=N:m(c.y,0,e.size.top+f)&&(l=O)):l=Y,k=[null,e][r?"reverse":"concat"]().concat([r?J:H,K,l,e.equals(b.editable[r?"getLast":"getFirst"](b.isRelevant))?r?N:O:Y]);return 0 in k?new h(k):null}function z(a,b,c,d){for(var f=b.getDocumentPosition(),e={},g={},h={},k={},l=Q.length;l--;)e[Q[l]]=parseInt(b.getComputedStyle.call(b, +"border-"+Q[l]+"-width"),10)||0,h[Q[l]]=parseInt(b.getComputedStyle.call(b,"padding-"+Q[l]),10)||0,g[Q[l]]=parseInt(b.getComputedStyle.call(b,"margin-"+Q[l]),10)||0;c&&!d||B(a,d);k.top=f.y-(c?0:a.view.scroll.y);k.left=f.x-(c?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+e.top+e.bottom);k.width=k.outerWidth-(h.left+h.right+e.left+e.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop, +left:b.$.scrollLeft});return A({border:e,padding:h,margin:g,ignoreScroll:c},k,!0)}function y(a,b,c){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==c&&b.size.date>new Date-Z)return null;return A(b.size,z(a,b,c),{date:+new Date},!0)}function u(a,b){a.view.editable=z(a,a.editable,b,!0)}function B(a,b){a.view||(a.view={});var c=a.view;if(!(!b&&c&&c.date>new Date-Z)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();A(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth- +d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},!0)}}function C(a,b,c,d){for(var f=d,e=d,g=0,k=!1,l=!1,m=a.view.pane.height,n=a.mouse;n.y+g<m&&0<n.y-g;){k||(k=b(f,d));l||(l=b(e,d));!k&&0<n.y-g&&(f=c(a,{x:n.x,y:n.y-g}));!l&&n.y+g<m&&(e=c(a,{x:n.x,y:n.y+g}));if(k&&l)break;g+=2}return new h([f,e,null,null])}CKEDITOR.plugins.add("magicline",{init:function(b){var e=b.config,l=e.magicline_triggerOffset||30,m={editor:b, +enterMode:e.enterMode,triggerOffset:l,holdDistance:0|l*(e.magicline_holdDistance||.5),boxColor:e.magicline_color||"#ff0000",rtl:"rtl"==e.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(e.magicline_tabuList||[]),triggers:e.magicline_everywhere?T:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},q,p,y;m.isRelevant=function(a){return n(a)&&!d(m,a)&&!w(a)};b.on("contentDom",function(){var l=b.editable(),n=b.document,w=b.window;A(m,{editable:l,inInlineMode:l.isInline(),doc:n,win:w, +hotNode:null},!0);m.boundary=m.inInlineMode?m.editable:m.doc.getDocumentElement();l.is(F.$inline)||(m.inInlineMode&&!v(l)&&l.setStyles({position:"relative",top:null,left:null}),k.call(this,m),B(m),l.attachListener(b,"beforeUndoImage",function(){m.line.detach()}),l.attachListener(b,"beforeGetData",function(){m.line.wrap.getParent()&&(m.line.detach(),b.once("getData",function(){m.line.attach()},null,null,1E3))},null,null,0),l.attachListener(m.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(a){if("wysiwyg"== +b.mode)if(m.inInlineMode){var c=a.data.$.clientX;a=a.data.$.clientY;B(m);u(m,!0);var d=m.view.editable,f=m.view.scroll;c>d.left-f.x&&c<d.right-f.x&&a>d.top-f.y&&a<d.bottom-f.y||(clearTimeout(y),y=null,m.line.detach())}else clearTimeout(y),y=null,m.line.detach()}),l.attachListener(l,"keyup",function(){m.hiddenMode=0}),l.attachListener(l,"keydown",function(a){if("wysiwyg"==b.mode)switch(a.data.getKeystroke()){case 2228240:case 16:m.hiddenMode=1,m.line.detach()}}),l.attachListener(m.inInlineMode?l:n, +"mousemove",function(a){p=!0;if("wysiwyg"==b.mode&&!b.readOnly&&!y){var c={x:a.data.$.clientX,y:a.data.$.clientY};y=setTimeout(function(){m.mouse=c;y=m.trigger=null;B(m);p&&!m.hiddenMode&&b.focusManager.hasFocus&&!m.line.mouseNear()&&(m.element=ba(m,!0))&&((m.trigger=x(m)||t(m)||U(m))&&!r(m,m.trigger.upper||m.trigger.lower)?m.line.attach().place():(m.trigger=null,m.line.detach()),p=!1)},30)}}),l.attachListener(w,"scroll",function(){"wysiwyg"==b.mode&&(m.line.detach(),I.webkit&&(m.hiddenMode=1,clearTimeout(q), +q=setTimeout(function(){m.mouseDown||(m.hiddenMode=0)},50)))}),l.attachListener(L?n:w,"mousedown",function(){"wysiwyg"==b.mode&&(m.line.detach(),m.hiddenMode=1,m.mouseDown=1)}),l.attachListener(L?n:w,"mouseup",function(){m.hiddenMode=0;m.mouseDown=0}),b.addCommand("accessPreviousSpace",f(m)),b.addCommand("accessNextSpace",f(m,!0)),b.setKeystroke([[e.magicline_keystrokePrevious,"accessPreviousSpace"],[e.magicline_keystrokeNext,"accessNextSpace"]]),b.on("loadSnapshot",function(){var a,c,d,f;for(f in{p:1, +br:1,div:1})for(a=b.document.getElementsByTag(f),d=a.count();d--;)if((c=a.getItem(d)).data("cke-magicline-hot")){m.hotNode=c;m.lastCmdDirection="true"===c.data("cke-magicline-dir")?!0:!1;return}}),b._.magiclineBackdoor={accessFocusSpace:c,boxTrigger:h,isLine:d,getAscendantTrigger:g,getNonEmptyNeighbour:a,getSize:z,that:m,triggerEdge:t,triggerEditable:x,triggerExpand:U})},this)}});var A=CKEDITOR.tools.extend,E=CKEDITOR.dom.element,G=E.createFromHtml,I=CKEDITOR.env,L=CKEDITOR.env.ie&&9>CKEDITOR.env.version, +F=CKEDITOR.dtd,M={},H=128,J=64,D=32,K=16,O=4,N=2,Y=1,R=" ",W=F.$listItem,ea=F.$tableContent,X=A({},F.$nonEditable,F.$empty),T=F.$block,Z=100,ca="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",aa=ca+"border-color:transparent;display:block;border-style:solid;",da="\x3cspan\x3e"+R+"\x3c/span\x3e";M[CKEDITOR.ENTER_BR]="br";M[CKEDITOR.ENTER_P]="p";M[CKEDITOR.ENTER_DIV]="div";h.prototype={set:function(a,b,c){this.properties= +a+b+(c||Y);return this},is:function(a){return(this.properties&a)==a}};var ba=function(){function a(b,c){var d=b.$.elementFromPoint(c.x,c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,c,f){if(!b.mouse)return null;var e=b.doc,g=b.line.wrap;f=f||b.mouse;var h=a(e,f);c&&d(b,h)&&(g.hide(),h=a(e,f),g.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||I.ie&&9>I.version&&!b.boundary.equals(h)&&!b.boundary.contains(h)?null:h}}(),S=CKEDITOR.dom.walker.whitespaces(),V=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT), +U=function(){function a(d){var f=d.element,g,h,k;if(!n(f)||f.contains(d.editable)||f.isReadOnly())return null;k=C(d,function(a,b){return!b.equals(a)},function(a,b){return ba(a,!0,b)},f);g=k.upper;h=k.lower;if(b(d,g,h))return k.set(D,8);if(g&&f.contains(g))for(;!g.getParent().equals(f);)g=g.getParent();else g=f.getFirst(function(a){return c(d,a)});if(h&&f.contains(h))for(;!h.getParent().equals(f);)h=h.getParent();else h=f.getLast(function(a){return c(d,a)});if(!g||!h)return null;y(d,g);y(d,h);if(!m(d.mouse.y, +g.size.top,h.size.bottom))return null;for(var f=Number.MAX_VALUE,l,r,q,u;h&&!h.equals(g)&&(r=g.getNext(d.isRelevant));)l=Math.abs(e(d,g,r)-d.mouse.y),l<f&&(f=l,q=g,u=r),g=r,y(d,g);if(!q||!u||!m(d.mouse.y,q.size.top,u.size.bottom))return null;k.upper=q;k.lower=u;return k.set(D,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||V(b)||w(b)||d(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=a(c),f;if(f=d){f=d.upper;var e=d.lower;f=!f||!e||w(e)||w(f)||e.equals(f)|| +f.equals(e)||e.contains(f)||f.contains(e)?!1:p(c,f)&&p(c,e)&&b(c,f,e)?!0:!1}return f?d:null}}(),Q=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function b(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var b=[],e=["style","className"],c=0;c<e.length;c++){var f=a.$.elements.namedItem(e[c]);f&&(f=new CKEDITOR.dom.element(f), +b.push([f,f.nextSibling]),f.remove())}return b}function h(a,b){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&"form"==a.getName()&&0<b.length)for(var e=b.length-1;0<=e;e--){var c=b[e][0],f=b[e][1];f?c.insertBefore(f):c.appendTo(a)}}function g(a,e){var g=b(a),c={},f=a.$;e||(c["class"]=f.className||"",f.className="");c.inline=f.style.cssText||"";e||(f.style.cssText="position: static; overflow: visible");h(g);return c}function e(a,e){var g=b(a),c=a.$;"class"in e&&(c.className=e["class"]);"inline"in e&&(c.style.cssText= +e.inline);h(g)}function a(a){if(!a.editable().isInline()){var b=CKEDITOR.instances,e;for(e in b){var c=b[e];"wysiwyg"!=c.mode||c.readOnly||(c=c.document.getBody(),c.setAttribute("contentEditable",!1),c.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(b){function h(){var a=f.getViewPaneSize();b.resize(a.width,a.height,null,!0)}if(b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var k=b.lang,c=CKEDITOR.document,f=c.getWindow(), +d,n,w,v=CKEDITOR.TRISTATE_OFF;b.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var p=b.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),r=b.ui.space("contents");if("wysiwyg"==b.mode){var q=b.getSelection();d=q&&q.getRanges();n=f.getScrollPosition()}else{var x=b.editable().$;d=!CKEDITOR.env.ie&&[x.selectionStart,x.selectionEnd];n=[x.scrollLeft,x.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){f.on("resize", +h);w=f.getScrollPosition();for(q=b.container;q=q.getParent();)q.setCustomData("maximize_saved_styles",g(q)),q.setStyle("z-index",b.config.baseFloatZIndex-5);r.setCustomData("maximize_saved_styles",g(r,!0));p.setCustomData("maximize_saved_styles",g(p,!0));r={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};c.getDocumentElement().setStyles(r);!CKEDITOR.env.gecko&&c.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||c.getBody().setStyles(r);CKEDITOR.env.ie? +setTimeout(function(){f.$.scrollTo(0,0)},0):f.$.scrollTo(0,0);p.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");p.$.offsetLeft;p.setStyles({"z-index":b.config.baseFloatZIndex-5,left:"0px",top:"0px"});p.addClass("cke_maximized");h();r=p.getDocumentPosition();p.setStyles({left:-1*r.x+"px",top:-1*r.y+"px"});CKEDITOR.env.gecko&&a(b)}else if(this.state==CKEDITOR.TRISTATE_ON){f.removeListener("resize",h);for(var q=[r,p],t=0;t<q.length;t++)e(q[t],q[t].getCustomData("maximize_saved_styles")), +q[t].removeCustomData("maximize_saved_styles");for(q=b.container;q=q.getParent();)e(q,q.getCustomData("maximize_saved_styles")),q.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){f.$.scrollTo(w.x,w.y)},0):f.$.scrollTo(w.x,w.y);p.removeClass("cke_maximized");CKEDITOR.env.webkit&&(p.setStyle("display","inline"),setTimeout(function(){p.setStyle("display","block")},0));b.fire("resize",{outerHeight:b.container.$.offsetHeight,contentsHeight:r.$.offsetHeight,outerWidth:b.container.$.offsetWidth})}this.toggleState(); +if(q=this.uiItems[0])r=this.state==CKEDITOR.TRISTATE_OFF?k.maximize.maximize:k.maximize.minimize,q=CKEDITOR.document.getById(q._.id),q.getChild(1).setHtml(r),q.setAttribute("title",r),q.setAttribute("href",'javascript:void("'+r+'");');"wysiwyg"==b.mode?d?(CKEDITOR.env.gecko&&a(b),b.getSelection().selectRanges(d),(x=b.getSelection().getStartElement())&&x.scrollIntoView(!0)):f.$.scrollTo(n.x,n.y):(d&&(x.selectionStart=d[0],x.selectionEnd=d[1]),x.scrollLeft=n[0],x.scrollTop=n[1]);d=n=null;v=this.state; +b.fire("maximize",this.state)},canUndo:!1});b.ui.addButton&&b.ui.addButton("Maximize",{label:k.maximize.maximize,command:"maximize",toolbar:"tools,10"});b.on("mode",function(){var a=b.getCommand("maximize");a.setState(a.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:v)},null,null,100)}}})})();(function(){function b(a,b){return CKEDITOR.tools.array.filter(a,function(a){return a.canHandle(b)}).sort(function(a,b){return a.priority===b.priority?0:a.priority-b.priority})}function h(a,b){var c= +a.shift();c&&c.handle(b,function(){h(a,b)})}function g(a){var b=CKEDITOR.tools.array.reduce(a,function(a,b){return CKEDITOR.tools.array.isArray(b.filters)?a.concat(b.filters):a},[]);return CKEDITOR.tools.array.filter(b,function(a,f){return CKEDITOR.tools.array.indexOf(b,a)===f})}function e(b,e){var c=0,f,d;if(!CKEDITOR.tools.array.isArray(b)||0===b.length)return!0;f=CKEDITOR.tools.array.filter(b,function(b){return-1===CKEDITOR.tools.array.indexOf(a,b)});if(0<f.length)for(d=0;d<f.length;d++)(function(b){CKEDITOR.scriptLoader.queue(b, +function(d){d&&a.push(b);++c===f.length&&e()})})(f[d]);return 0===f.length}var a=[],m=CKEDITOR.tools.createClass({$:function(){this.handlers=[]},proto:{register:function(a){"number"!==typeof a.priority&&(a.priority=10);this.handlers.push(a)},addPasteListener:function(a){a.on("paste",function(k){var c=b(this.handlers,k),f;if(0!==c.length){f=g(c);f=e(f,function(){return a.fire("paste",k.data)});if(!f)return k.cancel();h(c,k)}},this,null,3)}}});CKEDITOR.plugins.add("pastetools",{requires:"clipboard", +beforeInit:function(a){a.pasteTools=new m;a.pasteTools.addPasteListener(a)}});CKEDITOR.plugins.pastetools={filters:{},loadFilters:e,createFilter:function(a){var b=CKEDITOR.tools.array.isArray(a.rules)?a.rules:[a.rules],c=a.additionalTransforms;return function(a,d){var e=new CKEDITOR.htmlParser.basicWriter,g=new CKEDITOR.htmlParser.filter,h;c&&(a=c(a,d));CKEDITOR.tools.array.forEach(b,function(b){g.addRules(b(a,d,g))});h=CKEDITOR.htmlParser.fragment.fromHtml(a);g.applyTo(h);h.writeHtml(e);return e.getHtml()}}, +getClipboardData:function(a,b){var c;return CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"text/html"===b?(c=a.dataTransfer.getData(b,!0))||"text/html"!==b?c:a.dataValue:null},getConfigValue:function(a,b){if(a&&a.config){var c=CKEDITOR.tools,f=a.config,d=c.object.keys(f),e=["pasteTools_"+b,"pasteFromWord_"+b,"pasteFromWord"+c.capitalize(b,!0)],e=c.array.find(e,function(a){return-1!==c.array.indexOf(d,a)});return f[e]}},getContentGeneratorName:function(a){if((a=/<meta\s+name=["']?generator["']?\s+content=["']?(\w+)/gi.exec(a))&& +a.length)return a=a[1].toLowerCase(),0===a.indexOf("microsoft")?"microsoft":0===a.indexOf("libreoffice")?"libreoffice":"unknown"}};CKEDITOR.pasteFilters={}})();(function(){CKEDITOR.plugins.add("pastefromgdocs",{requires:"pastetools",init:function(b){var h=CKEDITOR.plugins.getPath("pastetools"),g=this.path;b.pasteTools.register({filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(g+"filter/default.js")],canHandle:function(b){return/id=(\"|\')?docs\-internal\-guid\-/.test(b.data.dataValue)}, +handle:function(e,a){var g=e.data,h=CKEDITOR.plugins.pastetools.getClipboardData(g,"text/html");g.dontFilter=!0;g.dataValue=CKEDITOR.pasteFilters.gdocs(h,b);!0===b.config.forcePasteAsPlainText&&(g.type="text");a()}})}})})();(function(){CKEDITOR.plugins.add("pastefromlibreoffice",{requires:"pastetools",isSupportedEnvironment:function(){var b=CKEDITOR.env.ie&&11>=CKEDITOR.env.version;return!(CKEDITOR.env.webkit&&!CKEDITOR.env.chrome)&&!b},init:function(b){if(this.isSupportedEnvironment()){var h=CKEDITOR.plugins.getPath("pastetools"), +g=this.path;b.pasteTools.register({priority:100,filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(h+"filter/image.js"),CKEDITOR.getUrl(g+"filter/default.js")],canHandle:function(b){b=b.data;return(b=b.dataTransfer.getData("text/html",!0)||b.dataValue)?"libreoffice"===CKEDITOR.plugins.pastetools.getContentGeneratorName(b):!1},handle:function(e,a){var g=e.data,h=g.dataValue||CKEDITOR.plugins.pastetools.getClipboardData(g,"text/html");g.dontFilter=!0;h=CKEDITOR.pasteFilters.image(h,b,CKEDITOR.plugins.pastetools.getClipboardData(g, +"text/rtf"));g.dataValue=CKEDITOR.pasteFilters.libreoffice(h,b);!0===b.config.forcePasteAsPlainText&&(g.type="text");a()}})}}})})();(function(){CKEDITOR.plugins.add("pastefromword",{requires:"pastetools",init:function(b){function h(a){var b=CKEDITOR.plugins.pastefromword&&CKEDITOR.plugins.pastefromword.images,c,f=[];if(b&&a.editor.filter.check("img[src]")&&(c=b.extractTagsFromHtml(a.data.dataValue),0!==c.length&&(b=b.extractFromRtf(a.data.dataTransfer["text/rtf"]),0!==b.length&&(CKEDITOR.tools.array.forEach(b, +function(a){f.push(a.type?"data:"+a.type+";base64,"+CKEDITOR.tools.convertBytesToBase64(CKEDITOR.tools.convertHexStringToBytes(a.hex)):null)},this),c.length===f.length))))for(b=0;b<c.length;b++)0===c[b].indexOf("file://")&&f[b]&&(a.data.dataValue=a.data.dataValue.replace(c[b],f[b]))}var g=0,e=CKEDITOR.plugins.getPath("pastetools"),a=this.path,m=void 0===b.config.pasteFromWord_inlineImages?!0:b.config.pasteFromWord_inlineImages,e=[CKEDITOR.getUrl(e+"filter/common.js"),CKEDITOR.getUrl(a+"filter/default.js")]; +b.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a,b){g=1;a.execCommand("paste",{type:"html",notification:b&&"undefined"!==typeof b.notification?b.notification:!0})}});CKEDITOR.plugins.clipboard.addPasteButton(b,"PasteFromWord",{label:b.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});b.pasteTools.register({filters:b.config.pasteFromWordCleanupFile?[b.config.pasteFromWordCleanupFile]:e,canHandle:function(a){a=CKEDITOR.plugins.pastetools.getClipboardData(a.data, +"text/html");var b=CKEDITOR.plugins.pastetools.getContentGeneratorName(a),c=/(class="?Mso|style=["'][^"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,b=b?"microsoft"===b:c.test(a);return a&&(g||b)},handle:function(a,e){var c=a.data,f=CKEDITOR.plugins.pastetools.getClipboardData(c,"text/html"),d=CKEDITOR.plugins.pastetools.getClipboardData(c,"text/rtf"),f={dataValue:f,dataTransfer:{"text/rtf":d}};if(!1!==b.fire("pasteFromWord",f)||g){c.dontFilter=!0;if(g||!b.config.pasteFromWordPromptCleanup||confirm(b.lang.pastefromword.confirmCleanup))f.dataValue= +CKEDITOR.cleanWord(f.dataValue,b),b.fire("afterPasteFromWord",f),c.dataValue=f.dataValue,!0===b.config.forcePasteAsPlainText?c.type="text":CKEDITOR.plugins.clipboard.isCustomCopyCutSupported||"allow-word"!==b.config.forcePasteAsPlainText||(c.type="html");g=0;e()}}});if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&m)b.on("afterPasteFromWord",h)}})})();(function(){var b={canUndo:!1,async:!0,exec:function(b,g){var e=b.lang,a=CKEDITOR.tools.keystrokeToString(e.common.keyboard,b.getCommandKeystroke(CKEDITOR.env.ie? +b.commands.paste:this)),m=g&&"undefined"!==typeof g.notification?g.notification:!g||!g.from||"keystrokeHandler"===g.from&&CKEDITOR.env.ie,e=m&&"string"===typeof m?m:e.pastetext.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+a.aria+'"\x3e'+a.display+"\x3c/kbd\x3e");b.execCommand("paste",{type:"text",notification:m?e:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(h){var g=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+86:CKEDITOR.CTRL+CKEDITOR.SHIFT+ +86;h.addCommand("pastetext",b);h.setKeystroke(g,"pastetext");CKEDITOR.plugins.clipboard.addPasteButton(h,"PasteText",{label:h.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(h.config.forcePasteAsPlainText)h.on("beforePaste",function(b){"html"!=b.data.type&&(b.data.type="text")});h.on("pasteState",function(b){h.getCommand("pastetext").setState(b.data)})}})})();CKEDITOR.plugins.add("removeformat",{init:function(b){b.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat); +b.ui.addButton&&b.ui.addButton("RemoveFormat",{label:b.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}});CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(b){for(var h=b._.removeFormatRegex||(b._.removeFormatRegex=new RegExp("^(?:"+b.config.removeFormatTags.replace(/,/g,"|")+")$","i")),g=b._.removeAttributes||(b._.removeAttributes=b.config.removeFormatAttributes.split(",")),e=CKEDITOR.plugins.removeformat.filter,a=b.getSelection().getRanges().createIterator(), +m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},l=[],k;k=a.getNextRange();){var c=k.createBookmark();k=b.createRange();k.setStartBefore(c.startNode);c.endNode&&k.setEndAfter(c.endNode);k.collapsed||k.enlarge(CKEDITOR.ENLARGE_ELEMENT);var f=k.createBookmark(),d=f.startNode,n=f.endNode,w=function(a){for(var c=b.elementPath(a),d=c.elements,f=1,g;(g=d[f])&&!g.equals(c.block)&&!g.equals(c.blockLimit);f++)h.test(g.getName())&&e(b,g)&&a.breakParent(g)};w(d);if(n)for(w(n),d=d.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);d&& +!d.equals(n);)if(d.isReadOnly()){if(d.getPosition(n)&CKEDITOR.POSITION_CONTAINS)break;d=d.getNext(m)}else w=d.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==d.getName()&&d.data("cke-realelement")||d.hasAttribute("data-cke-bookmark")||!e(b,d)||(h.test(d.getName())?d.remove(1):(d.removeAttributes(g),b.fire("removeFormatCleanup",d))),d=w;f.startNode.remove();f.endNode&&f.endNode.remove();k.moveToBookmark(c);l.push(k)}b.forceNextSelectionCheck();b.getSelection().selectRanges(l)}}},filter:function(b, +h){for(var g=b._.removeFormatFilters||[],e=0;e<g.length;e++)if(!1===g[e](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(b){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(b)};CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var";CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";(function(){function b(b,e,a){var m, +l;if(a="string"==typeof a?CKEDITOR.document.getById(a):new CKEDITOR.dom.element(a))if(m=b.fire("uiSpace",{space:e,html:""}).html)b.on("uiSpace",function(a){a.data.space==e&&a.cancel()},null,null,1),l=a.append(CKEDITOR.dom.element.createFromHtml(h.output({id:b.id,name:b.name,langDir:b.lang.dir,langCode:b.langCode,space:e,spaceId:b.ui.spaceId(e),content:m}))),a.getCustomData("cke_hasshared")?l.hide():a.setCustomData("cke_hasshared",1),l.unselectable(),l.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a", +1)||a.preventDefault()}),b.focusManager.add(l,1),b.on("focus",function(){for(var b=0,c,f=a.getChildren();c=f.getItem(b);b++)c.type==CKEDITOR.NODE_ELEMENT&&!c.equals(l)&&c.hasClass("cke_shared")&&c.hide();l.show()}),b.on("destroy",function(){l.remove()})}var h=CKEDITOR.addTemplate("sharedcontainer",'\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko? +" ":"")+'" lang\x3d"{langCode}" role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{spaceId}" class\x3d"cke_{space}" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');CKEDITOR.plugins.add("sharedspace",{init:function(g){g.on("loaded",function(){var e=g.config.sharedSpaces;if(e)for(var a in e)b(g,a,e[a])},null,null,9)}})})();(function(){var b={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var g= +this.state!=CKEDITOR.TRISTATE_ON||b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!b.focusManager.hasFocus?"removeClass":"attachClass";b.editable()[g]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var b="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),g,e,a,m,l=CKEDITOR.getUrl(this.path),k=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),c=k?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":"",f,d;for(g=e=a=m="";f=b.pop();)d=b.length?",":"",g+=".cke_show_blocks "+ +f+c+d,a+=".cke_show_blocks.cke_contents_ltr "+f+c+d,m+=".cke_show_blocks.cke_contents_rtl "+f+c+d,e+=".cke_show_blocks "+f+c+"{background-image:url("+CKEDITOR.getUrl(l+"images/block_"+f+".png")+")}";CKEDITOR.addCss((g+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(e,a+"{background-position:top left;padding-left:8px}",m+"{background-position:top right;padding-right:8px}"));k||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")}, +init:function(h){function g(){e.refresh(h)}if(!h.blockless){var e=h.addCommand("showblocks",b);e.canUndo=!1;h.config.startupOutlineBlocks&&e.setState(CKEDITOR.TRISTATE_ON);h.ui.addButton&&h.ui.addButton("ShowBlocks",{label:h.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});h.on("mode",function(){e.state!=CKEDITOR.TRISTATE_DISABLED&&e.refresh(h)});h.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(h.on("focus",g),h.on("blur",g));h.on("contentDom",function(){e.state!=CKEDITOR.TRISTATE_DISABLED&& +e.refresh(h)})}}})})();(function(){var b={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var g=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";b.editable()[g]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var b;b=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 \x3e tr \x3e td, .%1 table.%2 \x3e tr \x3e th,;.%1 table.%2 \x3e tbody \x3e tr \x3e td, .%1 table.%2 \x3e tbody \x3e tr \x3e th,;.%1 table.%2 \x3e thead \x3e tr \x3e td, .%1 table.%2 \x3e thead \x3e tr \x3e th,;.%1 table.%2 \x3e tfoot \x3e tr \x3e td, .%1 table.%2 \x3e tfoot \x3e tr \x3e th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g, "cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(b)},init:function(h){var g=h.addCommand("showborders",b);g.canUndo=!1;!1!==h.config.startupShowBorders&&g.setState(CKEDITOR.TRISTATE_ON);h.on("mode",function(){g.state!=CKEDITOR.TRISTATE_DISABLED&&g.refresh(h)},null,null,100);h.on("contentDom",function(){g.state!=CKEDITOR.TRISTATE_DISABLED&&g.refresh(h)});h.on("removeFormatCleanup",function(b){b=b.data;h.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&b.is("table")&&(!b.hasAttribute("border")|| 0>=parseInt(b.getAttribute("border"),10))&&b.addClass("cke_show_border")})},afterInit:function(b){var g=b.dataProcessor;b=g&&g.dataFilter;g=g&&g.htmlFilter;b&&b.addRules({elements:{table:function(b){b=b.attributes;var a=b["class"],g=parseInt(b.border,10);g&&!(0>=g)||a&&-1!=a.indexOf("cke_show_border")||(b["class"]=(a||"")+" cke_show_border")}}});g&&g.addRules({elements:{table:function(b){b=b.attributes;var a=b["class"];a&&(b["class"]=a.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/, ""))}}})}});CKEDITOR.on("dialogDefinition",function(b){var g=b.data.name;if("table"==g||"tableProperties"==g)if(b=b.data.definition,g=b.getContents("info").get("txtBorder"),g.commit=CKEDITOR.tools.override(g.commit,function(b){return function(a,g){b.apply(this,arguments);var h=parseInt(this.getValue(),10);g[!h||0>=h?"addClass":"removeClass"]("cke_show_border")}}),b=(b=b.getContents("advanced"))&&b.get("advCSSClasses"))b.setup=CKEDITOR.tools.override(b.setup,function(b){return function(){b.apply(this, arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}}),b.commit=CKEDITOR.tools.override(b.commit,function(b){return function(a,g){b.apply(this,arguments);parseInt(g.getAttribute("border"),10)||g.addClass("cke_show_border")}})})})();(function(){CKEDITOR.plugins.add("sourcearea",{init:function(h){function g(){var b=a&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle("height",this.getParent().$.clientHeight+"px");this.setStyle("width",this.getParent().$.clientWidth+ -"px");this.show();b&&this.focus()}if(h.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=CKEDITOR.plugins.sourcearea;h.addMode("source",function(a){var f=h.ui.space("contents").getDocument().createElement("textarea");f.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",h.config.sourceAreaTabSize||4)));f.setAttribute("dir","ltr");f.addClass("cke_source").addClass("cke_reset").addClass("cke_enable_context_menu"); -h.ui.space("contents").append(f);f=h.editable(new b(h,f));f.setData(h.getData(1));CKEDITOR.env.ie&&(f.attachListener(h,"resize",g,f),f.attachListener(CKEDITOR.document.getWindow(),"resize",g,f),CKEDITOR.tools.setTimeout(g,0,f));h.fire("ariaWidget",this);a()});h.addCommand("source",f.commands.source);h.ui.addButton&&h.ui.addButton("Source",{label:h.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});h.on("mode",function(){h.getCommand("source").setState("source"==h.mode?CKEDITOR.TRISTATE_ON: +"px");this.show();b&&this.focus()}if(h.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var e=CKEDITOR.plugins.sourcearea;h.addMode("source",function(a){var e=h.ui.space("contents").getDocument().createElement("textarea");e.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",h.config.sourceAreaTabSize||4)));e.setAttribute("dir","ltr");e.addClass("cke_source").addClass("cke_reset").addClass("cke_enable_context_menu"); +h.ui.space("contents").append(e);e=h.editable(new b(h,e));e.setData(h.getData(1));CKEDITOR.env.ie&&(e.attachListener(h,"resize",g,e),e.attachListener(CKEDITOR.document.getWindow(),"resize",g,e),CKEDITOR.tools.setTimeout(g,0,e));h.fire("ariaWidget",this);a()});h.addCommand("source",e.commands.source);h.ui.addButton&&h.ui.addButton("Source",{label:h.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});h.on("mode",function(){h.getCommand("source").setState("source"==h.mode?CKEDITOR.TRISTATE_ON: CKEDITOR.TRISTATE_OFF)});var a=CKEDITOR.env.ie&&9==CKEDITOR.env.version}}});var b=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(b){this.setValue(b);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(b){this[(b?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){b.baseProto.detach.call(this);this.clearCustomData(); this.remove()}}})})();CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(b){"wysiwyg"==b.mode&&b.fire("saveSnapshot");b.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);b.setMode("source"==b.mode?"wysiwyg":"source")},canUndo:!1}}};CKEDITOR.plugins.add("sourcedialog",{requires:"dialog",init:function(b){b.addCommand("sourcedialog",new CKEDITOR.dialogCommand("sourcedialog"));CKEDITOR.dialog.add("sourcedialog",this.path+"dialogs/sourcedialog.js"); b.ui.addButton&&b.ui.addButton("Sourcedialog",{label:b.lang.sourcedialog.toolbar,command:"sourcedialog",toolbar:"mode,10"})}});CKEDITOR.plugins.add("specialchar",{availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-au":1,"en-ca":1,"en-gb":1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1, uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(b){var h=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");b.addCommand("specialchar",{exec:function(){var g=b.langCode,g=h.availableLangs[g]?g:h.availableLangs[g.replace(/-.*/,"")]?g.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(h.path+"dialogs/lang/"+g+".js"),function(){CKEDITOR.tools.extend(b.lang.specialchar,h.langEntries[g]);b.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});b.ui.addButton&& b.ui.addButton("SpecialChar",{label:b.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}});CKEDITOR.config.specialChars="! \x26quot; # $ % \x26amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; \x26lt; \x3d \x26gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x26euro; \x26lsquo; \x26rsquo; \x26ldquo; \x26rdquo; \x26ndash; \x26mdash; \x26iexcl; \x26cent; \x26pound; \x26curren; \x26yen; \x26brvbar; \x26sect; \x26uml; \x26copy; \x26ordf; \x26laquo; \x26not; \x26reg; \x26macr; \x26deg; \x26sup2; \x26sup3; \x26acute; \x26micro; \x26para; \x26middot; \x26cedil; \x26sup1; \x26ordm; \x26raquo; \x26frac14; \x26frac12; \x26frac34; \x26iquest; \x26Agrave; \x26Aacute; \x26Acirc; \x26Atilde; \x26Auml; \x26Aring; \x26AElig; \x26Ccedil; \x26Egrave; \x26Eacute; \x26Ecirc; \x26Euml; \x26Igrave; \x26Iacute; \x26Icirc; \x26Iuml; \x26ETH; \x26Ntilde; \x26Ograve; \x26Oacute; \x26Ocirc; \x26Otilde; \x26Ouml; \x26times; \x26Oslash; \x26Ugrave; \x26Uacute; \x26Ucirc; \x26Uuml; \x26Yacute; \x26THORN; \x26szlig; \x26agrave; \x26aacute; \x26acirc; \x26atilde; \x26auml; \x26aring; \x26aelig; \x26ccedil; \x26egrave; \x26eacute; \x26ecirc; \x26euml; \x26igrave; \x26iacute; \x26icirc; \x26iuml; \x26eth; \x26ntilde; \x26ograve; \x26oacute; \x26ocirc; \x26otilde; \x26ouml; \x26divide; \x26oslash; \x26ugrave; \x26uacute; \x26ucirc; \x26uuml; \x26yacute; \x26thorn; \x26yuml; \x26OElig; \x26oelig; \x26#372; \x26#374 \x26#373 \x26#375; \x26sbquo; \x26#8219; \x26bdquo; \x26hellip; \x26trade; \x26#9658; \x26bull; \x26rarr; \x26rArr; \x26hArr; \x26diams; \x26asymp;".split(" "); -(function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(b){var h=b.config,g=b.lang.stylescombo,f={},a=[],m=[];b.on("stylesSet",function(g){if(g=g.data.styles){for(var l,d,e,c=0,n=g.length;c<n;c++)(l=g[c],b.blockless&&l.element in CKEDITOR.dtd.$block||"string"==typeof l.type&&!CKEDITOR.style.customHandlers[l.type]||(d=l.name,l=new CKEDITOR.style(l),b.filter.customConfig&&!b.filter.check(l)))||(l._name=d,l._.enterMode=h.enterMode,l._.type=e=l.assignedTo||l.type,l._.weight= -c+1E3*(e==CKEDITOR.STYLE_OBJECT?1:e==CKEDITOR.STYLE_BLOCK?2:3),f[d]=l,a.push(l),m.push(l));a.sort(function(a,b){return a._.weight-b._.weight})}});b.ui.addRichCombo("Styles",{label:g.label,title:g.panelTitle,toolbar:"styles,10",allowedContent:m,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),multiSelect:!0,attributes:{"aria-label":g.panelTitle}},init:function(){var b,f,d,e,c,h;c=0;for(h=a.length;c<h;c++)b=a[c],f=b._name,e=b._.type,e!=d&&(this.startGroup(g["panelTitle"+String(e)]), -d=e),this.add(f,b.type==CKEDITOR.STYLE_OBJECT?f:b.buildPreview(),f);this.commit()},onClick:function(a){b.focus();b.fire("saveSnapshot");a=f[a];var g=b.elementPath();if(a.group&&a.removeStylesFromSameGroup(b))b.applyStyle(a);else b[a.checkActive(g,b)?"removeStyle":"applyStyle"](a);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){var g=this.getValue();a=a.data.path.elements;for(var d=0,e=a.length,c;d<e;d++){c=a[d];for(var h in f)if(f[h].checkElementRemovable(c,!0,b)){h!= -g&&this.setValue(h);return}}this.setValue("")},this)},onOpen:function(){var a=b.getSelection(),a=a.getSelectedElement()||a.getStartElement()||b.editable(),a=b.elementPath(a),h=[0,0,0,0];this.showAll();this.unmarkAll();for(var d in f){var e=f[d],c=e._.type;e.checkApplicable(a,b,b.activeFilter)?h[c]++:this.hideItem(d);e.checkActive(a,b)&&this.mark(d)}h[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_BLOCK)]);h[CKEDITOR.STYLE_INLINE]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_INLINE)]); -h[CKEDITOR.STYLE_OBJECT]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_OBJECT)])},refresh:function(){var a=b.elementPath();if(a){for(var g in f)if(f[g].checkApplicable(a,b,b.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};a=[]}})}})})();(function(){function b(a){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(b){if(b.editable().hasFocus){var f=b.getSelection(),g;if(g=(new CKEDITOR.dom.elementPath(f.getCommonAncestor(),f.root)).contains({td:1, -th:1},1)){var f=b.createRange(),d=CKEDITOR.tools.tryThese(function(){var b=g.getParent().$.cells[g.$.cellIndex+(a?-1:1)];b.parentNode.parentNode;return b},function(){var b=g.getParent(),b=b.getAscendant("table").$.rows[b.$.rowIndex+(a?-1:1)];return b.cells[a?b.cells.length-1:0]});if(d||a)if(d)d=new CKEDITOR.dom.element(d),f.moveToElementEditStart(d),f.checkStartOfBlock()&&f.checkEndOfBlock()||f.selectNodeContents(d);else return!0;else{for(var e=g.getAscendant("table").$,d=g.getParent().$.cells,e= -new CKEDITOR.dom.element(e.insertRow(-1),b.document),c=0,h=d.length;c<h;c++)e.append((new CKEDITOR.dom.element(d[c],b.document)).clone(!1,!1)).appendBogus();f.moveToElementEditStart(e)}f.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},g={exec:function(a){a.container.focusNext(!0,a.tabIndex)}},f={exec:function(a){a.container.focusPrevious(!0,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(a){for(var m=!1!==a.config.enableTabKeyTools,k=a.config.tabSpaces||0, -l="";k--;)l+=" ";if(l)a.on("key",function(b){9==b.data.keyCode&&(a.insertText(l),b.cancel())});if(m)a.on("key",function(b){(9==b.data.keyCode&&a.execCommand("selectNextCell")||b.data.keyCode==CKEDITOR.SHIFT+9&&a.execCommand("selectPreviousCell"))&&b.cancel()});a.addCommand("blur",CKEDITOR.tools.extend(g,h));a.addCommand("blurBack",CKEDITOR.tools.extend(f,h));a.addCommand("selectNextCell",b());a.addCommand("selectPreviousCell",b(!0))}})})();CKEDITOR.dom.element.prototype.focusNext=function(b,h){var g= -void 0===h?this.getTabIndex():h,f,a,m,k,l,d;if(0>=g)for(l=this.getNextSourceNode(b,CKEDITOR.NODE_ELEMENT);l;){if(l.isVisible()&&0===l.getTabIndex()){m=l;break}l=l.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(l=this.getDocument().getBody().getFirst();l=l.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!a&&l.equals(this)){if(a=!0,b){if(!(l=l.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else a&&!this.contains(l)&&(f=1);if(l.isVisible()&&!(0>(d=l.getTabIndex()))){if(f&&d==g){m= -l;break}d>g&&(!m||!k||d<k)?(m=l,k=d):m||0!==d||(m=l,k=d)}}m&&m.focus()};CKEDITOR.dom.element.prototype.focusPrevious=function(b,h){for(var g=void 0===h?this.getTabIndex():h,f,a,m,k=0,l,d=this.getDocument().getBody().getLast();d=d.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!a&&d.equals(this)){if(a=!0,b){if(!(d=d.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else a&&!this.contains(d)&&(f=1);if(d.isVisible()&&!(0>(l=d.getTabIndex())))if(0>=g){if(f&&0===l){m=d;break}l>k&& -(m=d,k=l)}else{if(f&&l==g){m=d;break}l<g&&(!m||l>k)&&(m=d,k=l)}}m&&m.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(b){function h(b){return CKEDITOR.tools.extend(b||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!b.blockless){var g=b.lang.table;b.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height,border-collapse}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];td{border*,background-color,vertical-align,width,height}[colspan,rowspan];"+ +(function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(b){var h=b.config,g=b.lang.stylescombo,e={},a=[],m=[];b.on("stylesSet",function(g){if(g=g.data.styles){for(var k,c,f,d=0,n=g.length;d<n;d++)(k=g[d],b.blockless&&k.element in CKEDITOR.dtd.$block||"string"==typeof k.type&&!CKEDITOR.style.customHandlers[k.type]||(c=k.name,k=new CKEDITOR.style(k),b.filter.customConfig&&!b.filter.check(k)))||(k._name=c,k._.enterMode=h.enterMode,k._.type=f=k.assignedTo||k.type,k._.weight= +d+1E3*(f==CKEDITOR.STYLE_OBJECT?1:f==CKEDITOR.STYLE_BLOCK?2:3),e[c]=k,a.push(k),m.push(k));a.sort(function(a,b){return a._.weight-b._.weight})}});b.ui.addRichCombo("Styles",{label:g.label,title:g.panelTitle,toolbar:"styles,10",allowedContent:m,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),multiSelect:!0,attributes:{"aria-label":g.panelTitle}},init:function(){var b,e,c,f,d,h;d=0;for(h=a.length;d<h;d++)b=a[d],e=b._name,f=b._.type,f!=c&&(this.startGroup(g["panelTitle"+String(f)]), +c=f),this.add(e,b.type==CKEDITOR.STYLE_OBJECT?e:b.buildPreview(),e);this.commit()},onClick:function(a){b.focus();b.fire("saveSnapshot");a=e[a];var g=b.elementPath();if(a.group&&a.removeStylesFromSameGroup(b))b.applyStyle(a);else b[a.checkActive(g,b)?"removeStyle":"applyStyle"](a);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){var g=this.getValue();a=a.data.path.elements;for(var c=0,f=a.length,d;c<f;c++){d=a[c];for(var h in e)if(e[h].checkElementRemovable(d,!0,b)){h!= +g&&this.setValue(h);return}}this.setValue("")},this)},onOpen:function(){var a=b.getSelection(),a=a.getSelectedElement()||a.getStartElement()||b.editable(),a=b.elementPath(a),h=[0,0,0,0];this.showAll();this.unmarkAll();for(var c in e){var f=e[c],d=f._.type;f.checkApplicable(a,b,b.activeFilter)?h[d]++:this.hideItem(c);f.checkActive(a,b)&&this.mark(c)}h[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_BLOCK)]);h[CKEDITOR.STYLE_INLINE]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_INLINE)]); +h[CKEDITOR.STYLE_OBJECT]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_OBJECT)])},refresh:function(){var a=b.elementPath();if(a){for(var g in e)if(e[g].checkApplicable(a,b,b.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){e={};a=[]}})}})})();(function(){function b(a){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(b){if(b.editable().hasFocus){var e=b.getSelection(),g;if(g=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1, +th:1},1)){var e=b.createRange(),c=CKEDITOR.tools.tryThese(function(){var b=g.getParent().$.cells[g.$.cellIndex+(a?-1:1)];b.parentNode.parentNode;return b},function(){var b=g.getParent(),b=b.getAscendant("table").$.rows[b.$.rowIndex+(a?-1:1)];return b.cells[a?b.cells.length-1:0]});if(c||a)if(c)c=new CKEDITOR.dom.element(c),e.moveToElementEditStart(c),e.checkStartOfBlock()&&e.checkEndOfBlock()||e.selectNodeContents(c);else return!0;else{for(var f=g.getAscendant("table").$,c=g.getParent().$.cells,f= +new CKEDITOR.dom.element(f.insertRow(-1),b.document),d=0,h=c.length;d<h;d++)f.append((new CKEDITOR.dom.element(c[d],b.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(f)}e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},g={exec:function(a){a.container.focusNext(!0,a.tabIndex)}},e={exec:function(a){a.container.focusPrevious(!0,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(a){for(var m=!1!==a.config.enableTabKeyTools,l=a.config.tabSpaces||0, +k="";l--;)k+=" ";if(k)a.on("key",function(b){9==b.data.keyCode&&(a.insertText(k),b.cancel())});if(m)a.on("key",function(b){(9==b.data.keyCode&&a.execCommand("selectNextCell")||b.data.keyCode==CKEDITOR.SHIFT+9&&a.execCommand("selectPreviousCell"))&&b.cancel()});a.addCommand("blur",CKEDITOR.tools.extend(g,h));a.addCommand("blurBack",CKEDITOR.tools.extend(e,h));a.addCommand("selectNextCell",b());a.addCommand("selectPreviousCell",b(!0))}})})();CKEDITOR.dom.element.prototype.focusNext=function(b,h){var g= +void 0===h?this.getTabIndex():h,e,a,m,l,k,c;if(0>=g)for(k=this.getNextSourceNode(b,CKEDITOR.NODE_ELEMENT);k;){if(k.isVisible()&&0===k.getTabIndex()){m=k;break}k=k.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(k=this.getDocument().getBody().getFirst();k=k.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!e)if(!a&&k.equals(this)){if(a=!0,b){if(!(k=k.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;e=1}}else a&&!this.contains(k)&&(e=1);if(k.isVisible()&&!(0>(c=k.getTabIndex()))){if(e&&c==g){m= +k;break}c>g&&(!m||!l||c<l)?(m=k,l=c):m||0!==c||(m=k,l=c)}}m&&m.focus()};CKEDITOR.dom.element.prototype.focusPrevious=function(b,h){for(var g=void 0===h?this.getTabIndex():h,e,a,m,l=0,k,c=this.getDocument().getBody().getLast();c=c.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!e)if(!a&&c.equals(this)){if(a=!0,b){if(!(c=c.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;e=1}}else a&&!this.contains(c)&&(e=1);if(c.isVisible()&&!(0>(k=c.getTabIndex())))if(0>=g){if(e&&0===k){m=c;break}k>l&& +(m=c,l=k)}else{if(e&&k==g){m=c;break}k<g&&(!m||k>l)&&(m=c,l=k)}}m&&m.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(b){function h(b){return CKEDITOR.tools.extend(b||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!b.blockless){var g=b.lang.table;b.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height,border-collapse}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];td{border*,background-color,vertical-align,width,height}[colspan,rowspan];"+ (b.plugins.dialogadvtab?"table"+b.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(b){if(b.styles){var a;if(b.styles.border)a=CKEDITOR.tools.style.parse.border(b.styles.border);else if(CKEDITOR.env.ie&&8===CKEDITOR.env.version){var g=b.styles;g["border-left"]&&g["border-left"]===g["border-right"]&&g["border-right"]===g["border-top"]&& g["border-top"]===g["border-bottom"]&&(a=CKEDITOR.tools.style.parse.border(g["border-top"]))}a&&a.style&&"solid"===a.style&&a.width&&0!==parseFloat(a.width)&&(b.attributes.border=1);"collapse"==b.styles["border-collapse"]&&(b.attributes.cellspacing=0)}}}]]}));b.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",h()));b.addCommand("tableDelete",h({exec:function(b){var a=b.elementPath().contains("table",1);if(a){var g=a.getParent(),h=b.editable();1!=g.getChildCount()||g.is("td", "th")||g.equals(h)||(a=g);b=b.createRange();b.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);a.remove();b.select()}}}));b.ui.addButton&&b.ui.addButton("Table",{label:g.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");b.addMenuItems&&b.addMenuItems({table:{label:g.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:g.deleteTable,command:"tableDelete",group:"table", -order:1}});b.on("doubleclick",function(b){b.data.element.is("table")&&(b.data.dialog="tableProperties")});b.contextMenu&&b.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function b(a,b){function c(a){return b?b.contains(a)&&a.getAscendant("table",!0).equals(b):!0}function d(a){0<e.length||a.type!=CKEDITOR.NODE_ELEMENT||!r.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(f,a,"selected_cell", -!0),e.push(a))}var e=[],f={};if(!a)return e;for(var g=a.getRanges(),h=0;h<g.length;h++){var k=g[h];if(k.collapsed)(k=k.getCommonAncestor().getAscendant({td:1,th:1},!0))&&c(k)&&e.push(k);else{var k=new CKEDITOR.dom.walker(k),l;for(k.guard=d;l=k.next();)l.type==CKEDITOR.NODE_ELEMENT&&l.is(CKEDITOR.dtd.table)||(l=l.getAscendant({td:1,th:1},!0))&&!l.getCustomData("selected_cell")&&c(l)&&(CKEDITOR.dom.element.setMarker(f,l,"selected_cell",!0),e.push(l))}}CKEDITOR.dom.element.clearAllMarkers(f);return e} -function h(a,c){for(var d=p(a)?a:b(a),e=d[0],f=e.getAscendant("table"),e=e.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(f.$.rows[k]),h=c?h:k,g=c?g:d,d=CKEDITOR.tools.buildTableMap(f),f=d[h],h=c?d[h-1]:d[h+1],d=d[0].length,e=e.createElement("tr"),k=0;f[k]&&k<d;k++){var l;1<f[k].rowSpan&&h&&f[k]==h[k]?(l=f[k],l.rowSpan+=1):(l=(new CKEDITOR.dom.element(f[k])).clone(),l.removeAttribute("rowSpan"),l.appendBogus(),e.append(l), -l=l.$);k+=l.colSpan-1}c?e.insertBefore(g):e.insertAfter(g);return e}function g(a){if(a instanceof CKEDITOR.dom.selection){var c=a.getRanges(),d=b(a),e=d[0].getAscendant("table"),f=CKEDITOR.tools.buildTableMap(e),h=d[0].getParent().$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[];a.reset();for(a=h;a<=k;a++){for(var l=f[a],m=new CKEDITOR.dom.element(e.$.rows[a]),n=0;n<l.length;n++){var p=new CKEDITOR.dom.element(l[n]),r=p.getParent().$.rowIndex;1==p.$.rowSpan?p.remove():(--p.$.rowSpan, -r==a&&(r=f[a+1],r[n-1]?p.insertAfter(new CKEDITOR.dom.element(r[n-1])):(new CKEDITOR.dom.element(e.$.rows[a+1])).append(p,1)));n+=p.$.colSpan-1}d.push(m)}f=e.$.rows;c[0].moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);h=new CKEDITOR.dom.element(f[k+1]||(0<h?f[h-1]:null)||e.$.parentNode);for(a=d.length;0<=a;a--)g(d[a]);return e.$.parentNode?h:(c[0].select(),null)}a instanceof CKEDITOR.dom.element&&(e=a.getAscendant("table"),1==e.$.rows.length?e.remove():a.remove());return null}function f(a){for(var b= -a.getParent().$.cells,c=0,d=0;d<b.length;d++){var e=b[d],c=c+e.colSpan;if(e==a.$)break}return c-1}function a(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var e=f(a[d]);if(b?e<c:e>c)c=e}return c}function m(c,d){for(var e=p(c)?c:b(c),f=e[0].getAscendant("table"),g=a(e,1),e=a(e),h=d?g:e,k=CKEDITOR.tools.buildTableMap(f),f=[],g=[],e=[],l=k.length,m=0;m<l;m++)f.push(k[m][h]),g.push(d?k[m][h-1]:k[m][h+1]);for(m=0;m<l;m++)f[m]&&(1<f[m].colSpan&&g[m]==f[m]?(k=f[m],k.colSpan+=1):(h=new CKEDITOR.dom.element(f[m]), -k=h.clone(),k.removeAttribute("colSpan"),k.appendBogus(),k[d?"insertBefore":"insertAfter"].call(k,h),e.push(k),k=k.$),m+=k.rowSpan-1);return e}function k(a){function c(a){var b,d,e;b=a.getRanges();if(1!==b.length)return a;b=b[0];if(b.collapsed||0!==b.endOffset)return a;d=b.endContainer;e=d.getName().toLowerCase();if("td"!==e&&"th"!==e)return a;for((e=d.getPrevious())||(e=d.getParent().getPrevious().getLast());e.type!==CKEDITOR.NODE_TEXT&&"br"!==e.getName().toLowerCase();)if(e=e.getLast(),!e)return a; -b.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);return b.select()}CKEDITOR.env.webkit&&!a.isFake&&(a=c(a));var d=a.getRanges(),e=b(a),f=e[0],g=e[e.length-1],e=f.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(e),k,l,m=[];a.reset();var n=0;for(a=h.length;n<a;n++)for(var p=0,r=h[n].length;p<r;p++)void 0===k&&h[n][p]==f.$&&(k=p),h[n][p]==g.$&&(l=p);for(n=k;n<=l;n++)for(p=0;p<h.length;p++)g=h[p],f=new CKEDITOR.dom.element(e.$.rows[p]),g=new CKEDITOR.dom.element(g[n]),g.$&&(1==g.$.colSpan?g.remove():--g.$.colSpan, -p+=g.$.rowSpan-1,f.$.cells.length||m.push(f));k=h[0].length-1>l?new CKEDITOR.dom.element(h[0][l+1]):k&&-1!==h[0][k-1].cellIndex?new CKEDITOR.dom.element(h[0][k-1]):new CKEDITOR.dom.element(e.$.parentNode);m.length==a&&(d[0].moveToPosition(e,CKEDITOR.POSITION_AFTER_END),d[0].select(),e.remove());return k}function l(a,b){var c=a.getStartElement().getAscendant({td:1,th:1},!0);if(c){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function d(a){if(a instanceof CKEDITOR.dom.selection){var c= -a.getRanges(),f=b(a),g=f[0]&&f[0].getAscendant("table"),h;a:{var k=0;h=f.length-1;for(var l={},m,n;m=f[k++];)CKEDITOR.dom.element.setMarker(l,m,"delete_cell",!0);for(k=0;m=f[k++];)if((n=m.getPrevious())&&!n.getCustomData("delete_cell")||(n=m.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(l);h=n;break a}CKEDITOR.dom.element.clearAllMarkers(l);k=f[0].getParent();(k=k.getPrevious())?h=k.getLast():(k=f[h].getParent(),h=(k=k.getNext())?k.getChild(0):null)}a.reset();for(a= -f.length-1;0<=a;a--)d(f[a]);h?e(h,!0):g&&(c[0].moveToPosition(g,CKEDITOR.POSITION_BEFORE_START),c[0].select(),g.remove())}else a instanceof CKEDITOR.dom.element&&(c=a.getParent(),1==c.getChildCount()?c.remove():a.remove())}function e(a,b){var c=a.getDocument(),d=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(d.focus(),c.focus());c=new CKEDITOR.dom.range(c);c["moveToElementEdit"+(b?"End":"Start")](a)||(c.selectNodeContents(a),c.collapse(b?!1:!0));c.select(!0)}function c(a,b,c){a=a[b]; -if("undefined"==typeof c)return a;for(b=0;a&&b<a.length;b++){if(c.is&&a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function n(a,d,e){var f=b(a),g;if((d?1!=f.length:2>f.length)||(g=a.getCommonAncestor())&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("table"))return!1;var h;a=f[0];g=a.getAscendant("table");var k=CKEDITOR.tools.buildTableMap(g),l=k.length,m=k[0].length,n=a.getParent().$.rowIndex,p=c(k,n,a);if(d){var r;try{var w=parseInt(a.getAttribute("rowspan"),10)||1; -h=parseInt(a.getAttribute("colspan"),10)||1;r=k["up"==d?n-w:"down"==d?n+w:n]["left"==d?p-h:"right"==d?p+h:p]}catch(z){return!1}if(!r||a.$==r)return!1;f["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(r))}d=a.getDocument();var M=n,w=r=0,H=!e&&new CKEDITOR.dom.documentFragment(d),E=0;for(d=0;d<f.length;d++){h=f[d];var Q=h.getParent(),O=h.getFirst(),P=h.$.colSpan,K=h.$.rowSpan,Q=Q.$.rowIndex,X=c(k,Q,h),E=E+P*K,w=Math.max(w,X-p+P);r=Math.max(r,Q-n+K);e||(P=h,(K=P.getBogus())&&K.remove(), -P.trim(),h.getChildren().count()&&(Q==M||!O||O.isBlockBoundary&&O.isBlockBoundary({br:1})||(M=H.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!M||M.is&&M.is("br")||H.append("br")),h.moveChildren(H)),d?h.remove():h.setHtml(""));M=Q}if(e)return r*w==E;H.moveChildren(a);a.appendBogus();w>=m?a.removeAttribute("rowSpan"):a.$.rowSpan=r;r>=l?a.removeAttribute("colSpan"):a.$.colSpan=w;e=new CKEDITOR.dom.nodeList(g.$.rows);f=e.count();for(d=f-1;0<=d;d--)g=e.getItem(d),g.$.cells.length||(g.remove(),f++);return a} -function w(a,d){var e=b(a);if(1<e.length)return!1;if(d)return!0;var e=e[0],f=e.getParent(),g=f.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(g),k=f.$.rowIndex,l=c(h,k,e),m=e.$.rowSpan,n;if(1<m){n=Math.ceil(m/2);for(var m=Math.floor(m/2),f=k+n,g=new CKEDITOR.dom.element(g.$.rows[f]),h=c(h,f),p,f=e.clone(),k=0;k<h.length;k++)if(p=h[k],p.parentNode==g.$&&k>l){f.insertBefore(new CKEDITOR.dom.element(p));break}else p=null;p||g.append(f)}else for(m=n=1,g=f.clone(),g.insertAfter(f),g.append(f=e.clone()), -p=c(h,k),l=0;l<p.length;l++)p[l].rowSpan++;f.appendBogus();e.$.rowSpan=n;f.$.rowSpan=m;1==n&&e.removeAttribute("rowSpan");1==m&&f.removeAttribute("rowSpan");return f}function z(a,d){var e=b(a);if(1<e.length)return!1;if(d)return!0;var e=e[0],f=e.getParent(),g=f.getAscendant("table"),g=CKEDITOR.tools.buildTableMap(g),h=c(g,f.$.rowIndex,e),k=e.$.colSpan;if(1<k)f=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=f=1,l=[],m=0;m<g.length;m++){var n=g[m];l.push(n[h]);1<n[h].rowSpan&&(m+=n[h].rowSpan-1)}for(g= -0;g<l.length;g++)l[g].colSpan++}g=e.clone();g.insertAfter(e);g.appendBogus();e.$.colSpan=f;g.$.colSpan=k;1==f&&e.removeAttribute("colSpan");1==k&&g.removeAttribute("colSpan");return g}var r=/^(?:td|th)$/,p=CKEDITOR.tools.isArray;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(a){function c(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function f(b, -c){var d=a.addCommand(b,c);a.addFeature(d)}var p=a.lang.table,r=CKEDITOR.tools.style.parse,x="td{width} td{height} td{border-color} td{background-color} td{white-space} td{vertical-align} td{text-align} td[colspan] td[rowspan] th".split(" ");f("cellProperties",new CKEDITOR.dialogCommand("cellProperties",c({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:x,contentTransformations:[[{element:"td",left:function(a){return a.styles.background&& -r.background(a.styles.background).color},right:function(a){a.styles["background-color"]=r.background(a.styles.background).color}},{element:"td",check:"td{vertical-align}",left:function(a){return a.attributes&&a.attributes.valign},right:function(a){a.styles["vertical-align"]=a.attributes.valign;delete a.attributes.valign}}],[{element:"tr",check:"td{height}",left:function(a){return a.styles&&a.styles.height},right:function(a){CKEDITOR.tools.array.forEach(a.children,function(b){b.name in{td:1,th:1}&& -(b.attributes["cke-row-height"]=a.styles.height)});delete a.styles.height}}],[{element:"td",check:"td{height}",left:function(a){return(a=a.attributes)&&a["cke-row-height"]},right:function(a){a.styles.height=a.attributes["cke-row-height"];delete a.attributes["cke-row-height"]}}]]})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");f("rowDelete",c({requiredContent:"table",exec:function(a){a=a.getSelection();(a=g(a))&&e(a)}}));f("rowInsertBefore",c({requiredContent:"table",exec:function(a){a= -a.getSelection();a=b(a);h(a,!0)}}));f("rowInsertAfter",c({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);h(a)}}));f("columnDelete",c({requiredContent:"table",exec:function(a){a=a.getSelection();(a=k(a))&&e(a,!0)}}));f("columnInsertBefore",c({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);m(a,!0)}}));f("columnInsertAfter",c({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);m(a)}}));f("cellDelete",c({requiredContent:"table",exec:function(a){a= -a.getSelection();d(a)}}));f("cellMerge",c({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a,b){b.cell=n(a.getSelection());e(b.cell,!0)}}));f("cellMergeRight",c({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a,b){b.cell=n(a.getSelection(),"right");e(b.cell,!0)}}));f("cellMergeDown",c({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a,b){b.cell=n(a.getSelection(),"down");e(b.cell,!0)}}));f("cellVerticalSplit", -c({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){e(z(a.getSelection()))}}));f("cellHorizontalSplit",c({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){e(w(a.getSelection()))}}));f("cellInsertBefore",c({requiredContent:"table",exec:function(a){a=a.getSelection();l(a,!0)}}));f("cellInsertAfter",c({requiredContent:"table",exec:function(a){a=a.getSelection();l(a)}}));a.addMenuItems&&a.addMenuItems({tablecell:{label:p.cell.menu,group:"tablecell", -order:1,getItems:function(){var c=a.getSelection(),d=b(c),c={tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:n(c,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:n(c,"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:n(c,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:z(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED, -tablecell_split_horizontal:w(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.filter.check(x)&&(c.tablecell_properties=0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);return c}},tablecell_insertBefore:{label:p.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:p.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:p.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:p.cell.merge, -group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:p.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:p.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:p.cell.splitHorizontal,group:"tablecell",command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:p.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:p.cell.title, -group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:p.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:p.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:p.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:p.row.deleteRow, -group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:p.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:p.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:p.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:p.column.deleteColumn, -group:"tablecolumn",command:"columnDelete",order:15}});a.contextMenu&&a.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getCellColIndex:f,insertRow:h,insertColumn:m,getSelectedCells:b};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(b,h,g,f,a){b=b.$.rows;g=g||0;f="number"===typeof f?f:b.length- -1;a="number"===typeof a?a:-1;var m=-1,k=[];for(h=h||0;h<=f;h++){m++;!k[m]&&(k[m]=[]);for(var l=-1,d=g;d<=(-1===a?b[h].cells.length-1:a);d++){var e=b[h].cells[d];if(!e)break;for(l++;k[m][l];)l++;for(var c=isNaN(e.colSpan)?1:e.colSpan,e=isNaN(e.rowSpan)?1:e.rowSpan,n=0;n<e&&!(h+n>f);n++){k[m+n]||(k[m+n]=[]);for(var w=0;w<c;w++)k[m+n][l+w]=b[h].cells[d]}l+=c-1;if(-1!==a&&l>=a)break}}return k};(function(){function b(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function h(a, -b){var c=a.getComputedStyle("border-"+b+"-width"),f={thin:"0px",medium:"1px",thick:"2px"};0>c.indexOf("px")&&(c=c in f&&"none"!=a.getComputedStyle("border-style")?f[c]:0);return parseInt(c,10)}function g(a){var b=[],c={},f="rtl"==a.getComputedStyle("direction");CKEDITOR.tools.array.forEach(a.$.rows,function(g,k){var l=-1,m=0,q=null;g?(m=new CKEDITOR.dom.element(g),q={height:m.$.offsetHeight,position:m.getDocumentPosition()}):q=void 0;for(var m=q.height,q=q.position,u=0,t=g.cells.length;u<t;u++){var y= -new CKEDITOR.dom.element(g.cells[u]),v=g.cells[u+1]&&new CKEDITOR.dom.element(g.cells[u+1]),l=l+(y.$.colSpan||1),x,B,D=y.getDocumentPosition().x;f?B=D+h(y,"left"):x=D+y.$.offsetWidth-h(y,"right");v?(D=v.getDocumentPosition().x,f?x=D+v.$.offsetWidth-h(v,"right"):B=D+h(v,"left")):(D=a.getDocumentPosition().x,f?x=D:B=D+a.$.offsetWidth);y=Math.max(B-x,3);y={table:a,index:l,x:x,y:q.y,width:y,height:m,rtl:f};c[l]=c[l]||[];c[l].push(y);y.alignedPillars=c[l];b.push(y)}});return b}function f(a){(a.data||a).preventDefault()} -function a(a){function e(){u=0;q.setOpacity(0);y&&c();var a=r.table;setTimeout(function(){a.removeCustomData("_cke_table_pillars")},0);p.removeListener("dragstart",f)}function c(){for(var c=r.rtl,e=c?B.length:x.length,f=0,g=0;g<e;g++){var l=x[g],m=B[g],n=r.table;CKEDITOR.tools.setTimeout(function(b,g,h,l,m,p){b&&b.setStyle("width",k(Math.max(g+p,1)));h&&h.setStyle("width",k(Math.max(l-p,1)));m&&n.setStyle("width",k(m+p*(c?-1:1)));++f==e&&a.fire("saveSnapshot")},0,this,[l,l&&b(l),m,m&&b(m),(!l||!m)&& -b(n)+h(n,"left")+h(n,"right"),y])}}function g(c){f(c);a.fire("saveSnapshot");c=r.index;for(var e=CKEDITOR.tools.buildTableMap(r.table),h=[],k=[],l=Number.MAX_VALUE,n=l,v=r.rtl,E=0,Q=e.length;E<Q;E++){var O=e[E],P=O[c+(v?1:0)],O=O[c+(v?0:1)],P=P&&new CKEDITOR.dom.element(P),O=O&&new CKEDITOR.dom.element(O);P&&O&&P.equals(O)||(P&&(l=Math.min(l,b(P))),O&&(n=Math.min(n,b(O))),h.push(P),k.push(O))}x=h;B=k;D=r.x-l;A=r.x+n;q.setOpacity(.5);t=parseInt(q.getStyle("left"),10);y=0;u=1;q.on("mousemove",z);p.on("dragstart", -f);p.on("mouseup",m,this)}function m(a){a.removeListener();e()}function z(a){v(a.data.getPageOffset().x)}var r,p,q,u,t,y,v,x,B,D,A;p=a.document;q=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"\x3e\x3c/div\x3e',p);a.on("destroy",function(){q.remove()});l||p.getDocumentElement().append(q); -this.attachTo=function(a){var b,c,d;u||(l&&(p.getBody().append(q),y=0),r=a,b=r.alignedPillars[0],c=r.alignedPillars[r.alignedPillars.length-1],d=b.y,b=c.height+c.y-b.y,q.setStyles({width:k(a.width),height:k(b),left:k(a.x),top:k(d)}),l&&q.setOpacity(.25),q.on("mousedown",g,this),p.getBody().setStyle("cursor","col-resize"),q.show())};v=this.move=function(a,b){if(!r)return 0;if(!(u||a>=r.x&&a<=r.x+r.width&&b>=r.y&&b<=r.y+r.height))return r=null,u=y=0,p.removeListener("mouseup",m),q.removeListener("mousedown", -g),q.removeListener("mousemove",z),p.getBody().setStyle("cursor","auto"),l?q.remove():q.hide(),0;var c=a-Math.round(q.$.offsetWidth/2);if(u){if(c==D||c==A)return 1;c=Math.max(c,D);c=Math.min(c,A);y=c-t}q.setStyle("left",k(c));return 1}}function m(a){var b=a.data.getTarget();if("mouseout"==a.name){if(!b.is("table"))return;for(var c=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);c&&c.$&&!c.equals(b)&&!c.is("body");)c=c.getParent();if(!c||c.equals(b))return}b.getAscendant("table", -1).removeCustomData("_cke_table_pillars");a.removeListener()}var k=CKEDITOR.tools.cssLength,l=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(b){b.on("contentDom",function(){var e,c=b.editable();c.attachListener(c.isInline()?c:b.document,"mousemove",function(c){c=c.data;var h=c.getTarget();if(h.type==CKEDITOR.NODE_ELEMENT){var k=c.getPageOffset().x,l=c.getPageOffset().y;if(e&&e.move(k,l))f(c);else if(h.is("table")|| -h.getAscendant({thead:1,tbody:1,tfoot:1},1))if(c=h.getAscendant("table",1),b.editable().contains(c)){(h=c.getCustomData("_cke_table_pillars"))||(c.setCustomData("_cke_table_pillars",h=g(c)),c.on("mouseout",m),c.on("mousedown",m));a:{c=h;for(var h=0,p=c.length;h<p;h++){var q=c[h];if(k>=q.x&&k<=q.x+q.width&&l>=q.y&&l<=q.y+q.height){k=q;break a}}k=null}k&&(!e&&(e=new a(b)),e.attachTo(k))}}})})}})})();"use strict";(function(){function b(a,b){return CKEDITOR.tools.array.reduce(b,function(a,b){return b(a)}, -a)}var h=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],g={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){g.enabled&&!1!==a.data.command.canUndo&&g.save()}function c(){g.enabled=a.readOnly?!1:"wysiwyg"==a.mode;g.onChange()}var g=a.undoManager=new f(a),l=g.editingHandler=new k(g),m=a.addCommand("undo",{exec:function(){g.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),r=a.addCommand("redo",{exec:function(){g.redo()&&(a.selectionChange(), -this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[h[0],"undo"],[h[1],"redo"],[h[2],"redo"]]);g.onChange=function(){m.setState(g.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);r.setState(g.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){g.save(a.data&&a.data.contentOnly)});a.on("contentDom",l.attachListeners,l);a.on("instanceReady",function(){a.fire("saveSnapshot")}); -a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&g.save(!0)});a.on("mode",c);a.on("readOnly",c);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){g.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){g.currentImage&&g.update()});a.on("lockSnapshot",function(a){a=a.data;g.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot", -g.unlock,g)}});CKEDITOR.plugins.undo={};var f=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this._filterRules=[];this.editor=a;this.reset();CKEDITOR.env.ie&&this.addFilterRule(function(a){return a.replace(/\s+data-cke-expando=".*?"/g,"")})};f.prototype={type:function(a,b){var c=f.getKeyGroup(a),g=this.strokesRecorded[c]+1;b=b||g>=this.strokesLimit;this.typing||(this.hasUndo= -this.typing=!0,this.hasRedo=!1,this.onChange());b?(g=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[c]=g;this.previousKeyGroup=c},keyGroupChanged:function(a){return f.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo= -!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(b,e,c){var f=this.editor;if(this.locked||"ready"!=f.status||"wysiwyg"!=f.mode)return!1;var g=f.editable();if(!g||"ready"!=g.status)return!1;g=this.snapshots;e||(e=new a(f));if(!1===e.contents)return!1;if(this.currentImage)if(e.equalsContent(this.currentImage)){if(b||e.equalsSelection(this.currentImage))return!1}else!1!==c&&f.fire("change");g.splice(this.index+1,g.length-this.index-1);g.length== -this.limit&&g.shift();this.index=g.push(e)-1;this.currentImage=e;!1!==c&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor,c;a.bookmarks&&(b.focus(),c=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?c.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState(); -b.fire("change")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,f;if(c)if(a)for(f=this.index-1;0<=f;f--){if(a=b[f],!c.equalsContent(a))return a.index=f,a}else for(f=this.index+1;f<b.length;f++)if(a=b[f],!c.equalsContent(a))return a.index=f,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1}, -redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(b){if(!this.locked){b||(b=new a(this.editor));for(var e=this.index,c=this.snapshots;0<e&&this.currentImage.equalsContent(c[e-1]);)--e;c.splice(e,this.index-e+1,b);this.index=e;this.currentImage=b}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,c=b[b.length-1];return c.equalsContent(a)&&!c.equalsSelection(a)? -(this.currentImage=b[b.length-1]=a,!0):!1},lock:function(b,e){if(this.locked)this.locked.level++;else if(b)this.locked={level:1};else{var c=null;if(e)c=!0;else{var f=new a(this.editor,!0);this.currentImage&&this.currentImage.equalsContent(f)&&(c=f)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var b=this.locked.update;this.locked=null;if(!0===b)this.update();else if(b){var e=new a(this.editor,!0);b.equalsContent(e)||this.update()}}},addFilterRule:function(a){this._filterRules.push(a)}}; -f.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};f.keyGroups={PRINTABLE:0,FUNCTIONAL:1};f.isNavigationKey=function(a){return!!f.navigationKeyCodes[a]};f.getKeyGroup=function(a){var b=f.keyGroups;return g[a]?b.FUNCTIONAL:b.PRINTABLE};f.getOppositeKeyGroup=function(a){var b=f.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};f.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&f.getKeyGroup(a)==f.keyGroups.FUNCTIONAL};var a=CKEDITOR.plugins.undo.Image=function(a,e){this.editor= -a;a.fire("beforeUndoImage");var c=a.getSnapshot();c&&(this.contents=b(c,a.undoManager._filterRules));e||(this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(!0));a.fire("afterUndoImage")},m=/\b(?:href|src|name)="[^"]*?"/gi;a.prototype={equalsContent:function(a){var b=this.contents;a=a.contents;CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)&&(b=b.replace(m,""),a=a.replace(m,""));return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks;a=a.bookmarks;if(b||a){if(!b|| -!a||b.length!=a.length)return!1;for(var c=0;c<b.length;c++){var f=b[c],g=a[c];if(f.startOffset!=g.startOffset||f.endOffset!=g.endOffset||!CKEDITOR.tools.arrayCompare(f.start,g.start)||!CKEDITOR.tools.arrayCompare(f.end,g.end))return!1}}return!0}};var k=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new l;this.lastKeydownImage=null};k.prototype={onKeydown:function(b){var e=b.data.getKey();if(229!==e)if(-1<CKEDITOR.tools.indexOf(h, -b.data.getKeystroke()))b.data.preventDefault();else if(this.keyEventsStack.cleanUp(b),b=this.undoManager,this.keyEventsStack.getLast(e)||this.keyEventsStack.push(e),this.lastKeydownImage=new a(b.editor),f.isNavigationKey(e)||this.undoManager.keyGroupChanged(e))if(b.strokesRecorded[0]||b.strokesRecorded[1])b.save(!1,this.lastKeydownImage,!1),b.resetType()},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0)); -this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&&(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(b){var e=this.undoManager;b=b.data.getKey();var c=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(b);if(!(f.ieFunctionalKeysBug(b)&&this.lastKeydownImage&&this.lastKeydownImage.equalsContent(new a(e.editor,!0))))if(0<c)e.type(b);else if(f.isNavigationKey(b))this.onNavigationKey(!0)}, -onNavigationKey:function(b){var e=this.undoManager;!b&&e.save(!0,null,!1)||e.updateSelection(new a(e.editor));e.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},activateInputEventListener:function(){this.ignoreInputEvent=!1},attachListeners:function(){var a=this.undoManager.editor,b=a.editable(),c=this;b.attachListener(b,"keydown",function(a){c.onKeydown(a);if(f.ieFunctionalKeysBug(a.data.getKey()))c.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?"keypress": -"input",c.onInput,c,null,999);b.attachListener(b,"keyup",c.onKeyup,c,null,999);b.attachListener(b,"paste",c.ignoreInputEventListener,c,null,999);b.attachListener(b,"drop",c.ignoreInputEventListener,c,null,999);a.on("afterPaste",c.activateInputEventListener,c,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){c.onNavigationKey()},null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){c.keyEventsStack.remove(9)},null,null,999)}};var l=CKEDITOR.plugins.undo.KeyEventsStack= -function(){this.stack=[]};l.prototype={push:function(a){a=this.stack.push({keyCode:a,inputs:0});return this.stack[a-1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if("number"== -typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;a.ctrlKey||a.metaKey||this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}})();(function(){function b(a){function b(a){var d=!1;c.attachListener(c,"keydown",function(){var b=g.getBody().getElementsByTag(a);if(!d){for(var c=0;c<b.count();c++)b.getItem(c).setCustomData("retain", -!0);d=!0}},null,null,1);c.attachListener(c,"keyup",function(){var b=g.getElementsByTag(a);d&&(1==b.count()&&!b.getItem(0).getCustomData("retain")&&CKEDITOR.tools.isEmpty(b.getItem(0).getAttributes())&&b.getItem(0).remove(1),d=!1)})}var f=this.editor;if(f&&!f.isDetached()){var g=a.document,d=g.body,e=g.getElementById("cke_actscrpt");e&&e.parentNode.removeChild(e);(e=g.getElementById("cke_shimscrpt"))&&e.parentNode.removeChild(e);(e=g.getElementById("cke_basetagscrpt"))&&e.parentNode.removeChild(e); -d.contentEditable=!0;CKEDITOR.env.ie&&(d.hideFocus=!0,d.disabled=!0,d.removeAttribute("disabled"));delete this._.isLoadingData;this.$=d;g=new CKEDITOR.dom.document(g);this.setup();this.fixInitialSelection();var c=this;CKEDITOR.env.ie&&!CKEDITOR.env.edge&&g.getDocumentElement().addClass(g.$.compatMode);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&f.enterMode!=CKEDITOR.ENTER_P?b("p"):CKEDITOR.env.edge&&15>CKEDITOR.env.version&&f.enterMode!=CKEDITOR.ENTER_DIV&&b("div");if(CKEDITOR.env.webkit||CKEDITOR.env.ie&& -10<CKEDITOR.env.version)g.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){f.editable().focus()})});h(f);try{f.document.$.execCommand("2D-position",!1,!0)}catch(n){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==f.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var b=a.data.getKeystroke();if(33==b||34==b)if(CKEDITOR.env.ie)setTimeout(function(){f.getSelection().scrollIntoView()},0);else if(f.window.$.innerHeight>this.$.offsetHeight){var c= -f.createRange();c[33==b?"moveToElementEditStart":"moveToElementEditEnd"](this);c.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(g,"blur",function(){try{g.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(g,"touchend",function(){a.focus()});d=f.document.getElementsByTag("title").getItem(0);d.data("cke-title",d.getText());CKEDITOR.env.ie&&(f.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){"unloaded"==this.status&&(this.status="ready"); -f.fire("contentDom");this._.isPendingFocus&&(f.focus(),this._.isPendingFocus=!1);setTimeout(function(){f.fire("dataReady")},0)},0,this)}}function h(a){function b(){var d;a.editable().attachListener(a,"selectionChange",function(){var b=a.getSelection().getSelectedElement();b&&(d&&(d.detachEvent("onresizestart",f),d=null),b.$.attachEvent("onresizestart",f),d=b.$)})}function f(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var g=a.document.$;g.execCommand("enableObjectResizing",!1,!a.config.disableObjectResizing); -g.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(d){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&b(a)}function g(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var b=[],f;for(f in CKEDITOR.dtd.$removeEmpty)b.push("html.CSS1Compat "+f+"[contenteditable\x3dfalse]");a.push(b.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(a.push("html{height:100% !important}"), -a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}var f;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(b){function g(c){c&&c.removeListener();a.isDestroyed()||a.isDetached()||(a.editable(new f(a, -d.$.contentWindow.document.body)),a.setData(a.getData(1),b))}var h="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",h=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(h)+"}())":"",d=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+h+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');d.setStyles({width:"100%",height:"100%"});d.addClass("cke_wysiwyg_frame").addClass("cke_reset"); -h=a.ui.space("contents");h.append(d);var e=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(e)d.on("load",g);var c=a.title,n=a.fire("ariaEditorHelpLabel",{}).label;c&&(CKEDITOR.env.ie&&n&&(c+=", "+n),d.setAttribute("title",c));if(n){var c=CKEDITOR.tools.getNextId(),w=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+c+'" class\x3d"cke_voice_label"\x3e'+n+"\x3c/span\x3e");h.append(w,1);d.setAttribute("aria-describedby",c)}a.on("beforeModeUnload",function(a){a.removeListener();w&&w.remove()}); -d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!e&&g();a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var b=this.config,f=b.contentsCss;CKEDITOR.tools.isArray(f)||(b.contentsCss=f?[f]:[]);b.contentsCss.push(a)};f=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(b,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")}, -base:CKEDITOR.editable,proto:{setData:function(a,b){var f=this.editor;if(b)this.setHtml(a),this.fixInitialSelection(),f.fire("dataReady");else{this._.isLoadingData=!0;f._.dataStore={id:1};var h=f.config,d=h.fullPage,e=h.docType,c=CKEDITOR.tools.buildStyleHtml(g()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');d||(c+=CKEDITOR.tools.buildStyleHtml(f.config.contentsCss));var n=h.baseHref?'\x3cbase href\x3d"'+h.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";d&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){f.docType= -e=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){f.xmlDeclaration=a;return""}));a=f.dataProcessor.toHtml(a);d?(/<body[\s|>]/.test(a)||(a="\x3cbody\x3e"+a),/<html[\s|>]/.test(a)||(a="\x3chtml\x3e"+a+"\x3c/html\x3e"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):a=a.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"),n&&(a=a.replace(/<head[^>]*?>/,"$\x26"+n)),a=a.replace(/<\/head\s*>/,c+"$\x26"),a= -e+a):a=h.docType+'\x3chtml dir\x3d"'+h.contentsLangDirection+'" lang\x3d"'+(h.contentsLanguage||f.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+this._.docTitle+"\x3c/title\x3e"+n+c+"\x3c/head\x3e\x3cbody"+(h.bodyId?' id\x3d"'+h.bodyId+'"':"")+(h.bodyClass?' class\x3d"'+h.bodyClass+'"':"")+"\x3e"+a+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e"))); -h='\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"'+(CKEDITOR.env.ie?' defer\x3d"defer" ':"")+"\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded\x3d1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"\x3c/script\x3e";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e'); -n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');a=a.replace(/(?=\s*<\/(:?head)>)/,h);this.clearCustomData();this.clearListeners();f.fire("contentDomUnload");var w=this.getDocument();try{w.write(a)}catch(z){setTimeout(function(){w.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var b=a.config,f=b.fullPage,g=f&&a.docType,d=f&&a.xmlDeclaration, -e=this.getDocument(),f=f?e.getDocumentElement().getOuterHtml():e.getBody().getHtml();CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(f=f.replace(/<br>(?=\s*(:?$|<\/body>))/,""));f=a.dataProcessor.toDataFormat(f);d&&(f=d+"\n"+f);g&&(f=g+"\n"+f);return f},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:f.baseProto.focus.call(this)},detach:function(){var a=this.editor,b=a.document,a=a.container.findOne("iframe.cke_wysiwyg_frame");f.baseProto.detach.call(this);this.clearCustomData(this._.expandoNumber); -b.getDocumentElement().clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);a&&(a.clearCustomData(),(b=a.removeCustomData("onResize"))&&b.removeListener(),a.isDetached()||a.remove())}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,autogrow,basicstyles,blockquote,notification,button,toolbar,clipboard,panel,floatpanel,menu,contextmenu,elementspath,enterkey,entities,popup,filetools,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,lineutils,widgetselection,widget,image2,indent,indentlist,justify,menubutton,language,list,magicline,maximize,pastetools,pastefromgdocs,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea"; -CKEDITOR.config.skin="moono-lisa";(function(){var b=function(b,g){var f=CKEDITOR.getUrl("plugins/"+g);b=b.split(",");for(var a=0;a<b.length;a++)CKEDITOR.skin.icons[b[a]]={path:f,offset:-b[++a],bgsize:b[++a]}};CKEDITOR.env.hidpi?b("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,horizontalrule,336,,image,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,justifyblock,480,,justifycenter,504,,justifyleft,528,,justifyright,552,,language,576,,bulletedlist-rtl,600,,bulletedlist,624,,numberedlist-rtl,648,,numberedlist,672,,maximize,696,,pastefromword-rtl,720,,pastefromword,744,,pastetext-rtl,768,,pastetext,792,,removeformat,816,,showblocks-rtl,840,,showblocks,864,,source-rtl,888,,source,912,,sourcedialog-rtl,936,,sourcedialog,960,,specialchar,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,simplebox,2256,auto", +order:1}});b.on("doubleclick",function(b){b.data.element.is("table")&&(b.data.dialog="tableProperties")});b.contextMenu&&b.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function b(a,b){function c(a){return b?b.contains(a)&&a.getAscendant("table",!0).equals(b):!0}function d(a){var b=/^(?:td|th)$/;0<f.length||a.type!=CKEDITOR.NODE_ELEMENT||!b.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(e, +a,"selected_cell",!0),f.push(a))}var f=[],e={};if(!a)return f;for(var g=a.getRanges(),h=0;h<g.length;h++){var k=g[h];if(k.collapsed)(k=k.getCommonAncestor().getAscendant({td:1,th:1},!0))&&c(k)&&f.push(k);else{var k=new CKEDITOR.dom.walker(k),l;for(k.guard=d;l=k.next();)l.type==CKEDITOR.NODE_ELEMENT&&l.is(CKEDITOR.dtd.table)||(l=l.getAscendant({td:1,th:1},!0))&&!l.getCustomData("selected_cell")&&c(l)&&(CKEDITOR.dom.element.setMarker(e,l,"selected_cell",!0),f.push(l))}}CKEDITOR.dom.element.clearAllMarkers(e); +return f}function h(a,c){for(var d=p(a)?a:b(a),f=d[0],e=f.getAscendant("table"),f=f.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(e.$.rows[k]),h=c?h:k,g=c?g:d,d=CKEDITOR.tools.buildTableMap(e),e=d[h],h=c?d[h-1]:d[h+1],d=d[0].length,f=f.createElement("tr"),k=0;e[k]&&k<d;k++){var l;1<e[k].rowSpan&&h&&e[k]==h[k]?(l=e[k],l.rowSpan+=1):(l=(new CKEDITOR.dom.element(e[k])).clone(),l.removeAttribute("rowSpan"),l.appendBogus(), +f.append(l),l=l.$);k+=l.colSpan-1}c?f.insertBefore(g):f.insertAfter(g);return f}function g(a){if(a instanceof CKEDITOR.dom.selection){var c=a.getRanges(),d=b(a),f=d[0].getAscendant("table"),e=CKEDITOR.tools.buildTableMap(f),h=d[0].getParent().$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[];a.reset();for(a=h;a<=k;a++){for(var l=e[a],m=new CKEDITOR.dom.element(f.$.rows[a]),n=0;n<l.length;n++){var p=new CKEDITOR.dom.element(l[n]),w=p.getParent().$.rowIndex;1==p.$.rowSpan?p.remove(): +(--p.$.rowSpan,w==a&&(w=e[a+1],w[n-1]?p.insertAfter(new CKEDITOR.dom.element(w[n-1])):(new CKEDITOR.dom.element(f.$.rows[a+1])).append(p,1)));n+=p.$.colSpan-1}d.push(m)}e=f.$.rows;c[0].moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);h=new CKEDITOR.dom.element(e[k+1]||(0<h?e[h-1]:null)||f.$.parentNode);for(a=d.length;0<=a;a--)g(d[a]);return f.$.parentNode?h:(c[0].select(),null)}a instanceof CKEDITOR.dom.element&&(f=a.getAscendant("table"),1==f.$.rows.length?f.remove():a.remove());return null}function e(a){for(var b= +a.getParent().$.cells,c=0,d=0;d<b.length;d++){var f=b[d],c=c+f.colSpan;if(f==a.$)break}return c-1}function a(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var f=e(a[d]);if(b?f<c:f>c)c=f}return c}function m(c,d){for(var f=p(c)?c:b(c),e=f[0].getAscendant("table"),g=a(f,1),f=a(f),h=d?g:f,k=CKEDITOR.tools.buildTableMap(e),e=[],g=[],f=[],l=k.length,m=0;m<l;m++){var n=d?k[m][h-1]:k[m][h+1];e.push(k[m][h]);g.push(n)}for(m=0;m<l;m++)e[m]&&(1<e[m].colSpan&&g[m]==e[m]?(k=e[m],k.colSpan+=1):(h=new CKEDITOR.dom.element(e[m]), +k=h.clone(),k.removeAttribute("colSpan"),k.appendBogus(),k[d?"insertBefore":"insertAfter"].call(k,h),f.push(k),k=k.$),m+=k.rowSpan-1);return f}function l(a){function c(a){var b=a.getRanges(),d,f;if(1!==b.length)return a;b=b[0];if(b.collapsed||0!==b.endOffset)return a;d=b.endContainer;f=d.getName().toLowerCase();if("td"!==f&&"th"!==f)return a;for((f=d.getPrevious())||(f=d.getParent().getPrevious().getLast());f.type!==CKEDITOR.NODE_TEXT&&"br"!==f.getName().toLowerCase();)if(f=f.getLast(),!f)return a; +b.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);return b.select()}CKEDITOR.env.webkit&&!a.isFake&&(a=c(a));var d=a.getRanges(),f=b(a),e=f[0],g=f[f.length-1],f=e.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(f),k,l,m=[];a.reset();var n=0;for(a=h.length;n<a;n++)for(var p=0,w=h[n].length;p<w;p++)void 0===k&&h[n][p]==e.$&&(k=p),h[n][p]==g.$&&(l=p);for(n=k;n<=l;n++)for(p=0;p<h.length;p++)g=h[p],e=new CKEDITOR.dom.element(f.$.rows[p]),g=new CKEDITOR.dom.element(g[n]),g.$&&(1==g.$.colSpan?g.remove():--g.$.colSpan, +p+=g.$.rowSpan-1,e.$.cells.length||m.push(e));k=h[0].length-1>l?new CKEDITOR.dom.element(h[0][l+1]):k&&-1!==h[0][k-1].cellIndex?new CKEDITOR.dom.element(h[0][k-1]):new CKEDITOR.dom.element(f.$.parentNode);m.length==a&&(d[0].moveToPosition(f,CKEDITOR.POSITION_AFTER_END),d[0].select(),f.remove());return k}function k(a,b){var c=a.getStartElement().getAscendant({td:1,th:1},!0);if(c){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function c(a){if(a instanceof CKEDITOR.dom.selection){var d= +a.getRanges(),e=b(a),g=e[0]&&e[0].getAscendant("table"),h;a:{var k=0;h=e.length-1;for(var l={},m,n;m=e[k++];)CKEDITOR.dom.element.setMarker(l,m,"delete_cell",!0);for(k=0;m=e[k++];)if((n=m.getPrevious())&&!n.getCustomData("delete_cell")||(n=m.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(l);h=n;break a}CKEDITOR.dom.element.clearAllMarkers(l);k=e[0].getParent();(k=k.getPrevious())?h=k.getLast():(k=e[h].getParent(),h=(k=k.getNext())?k.getChild(0):null)}a.reset();for(a= +e.length-1;0<=a;a--)c(e[a]);h?f(h,!0):g&&(d[0].moveToPosition(g,CKEDITOR.POSITION_BEFORE_START),d[0].select(),g.remove())}else a instanceof CKEDITOR.dom.element&&(d=a.getParent(),1==d.getChildCount()?d.remove():a.remove())}function f(a,b){var c=a.getDocument(),d=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(d.focus(),c.focus());c=new CKEDITOR.dom.range(c);c["moveToElementEdit"+(b?"End":"Start")](a)||(c.selectNodeContents(a),c.collapse(b?!1:!0));c.select(!0)}function d(a,b,c){a=a[b]; +if("undefined"==typeof c)return a;for(b=0;a&&b<a.length;b++){if(c.is&&a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function n(a,c,f){var e=b(a),g;if((c?1!=e.length:2>e.length)||(g=a.getCommonAncestor())&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("table"))return!1;a=e[0];g=a.getAscendant("table");var h=CKEDITOR.tools.buildTableMap(g),k=h.length,l=h[0].length,m=a.getParent().$.rowIndex,n=d(h,m,a),p;if(c){var w;try{var v=parseInt(a.getAttribute("rowspan"),10)||1;p=parseInt(a.getAttribute("colspan"), +10)||1;w=h["up"==c?m-v:"down"==c?m+v:m]["left"==c?n-p:"right"==c?n+p:n]}catch(L){return!1}if(!w||a.$==w)return!1;e["up"==c||"left"==c?"unshift":"push"](new CKEDITOR.dom.element(w))}c=a.getDocument();var F=m,v=w=0,M=!f&&new CKEDITOR.dom.documentFragment(c),H=0;for(c=0;c<e.length;c++){p=e[c];var J=p.getParent(),D=p.getFirst(),K=p.$.colSpan,O=p.$.rowSpan,J=J.$.rowIndex,N=d(h,J,p),H=H+K*O,v=Math.max(v,N-n+K);w=Math.max(w,J-m+O);f||(K=p,(O=K.getBogus())&&O.remove(),K.trim(),p.getChildren().count()&&(J== +F||!D||D.isBlockBoundary&&D.isBlockBoundary({br:1})||(F=M.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!F||F.is&&F.is("br")||M.append("br")),p.moveChildren(M)),c?p.remove():p.setHtml(""));F=J}if(f)return w*v==H;M.moveChildren(a);a.appendBogus();v>=l?a.removeAttribute("rowSpan"):a.$.rowSpan=w;w>=k?a.removeAttribute("colSpan"):a.$.colSpan=v;f=new CKEDITOR.dom.nodeList(g.$.rows);e=f.count();for(c=e-1;0<=c;c--)g=f.getItem(c),g.$.cells.length||(g.remove(),e++);return a}function w(a,c){var f=b(a);if(1< +f.length)return!1;if(c)return!0;var f=f[0],e=f.getParent(),g=e.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(g),k=e.$.rowIndex,l=d(h,k,f),m=f.$.rowSpan,n;if(1<m){n=Math.ceil(m/2);for(var m=Math.floor(m/2),e=k+n,g=new CKEDITOR.dom.element(g.$.rows[e]),h=d(h,e),p,e=f.clone(),k=0;k<h.length;k++)if(p=h[k],p.parentNode==g.$&&k>l){e.insertBefore(new CKEDITOR.dom.element(p));break}else p=null;p||g.append(e)}else for(m=n=1,g=e.clone(),g.insertAfter(e),g.append(e=f.clone()),p=d(h,k),l=0;l<p.length;l++)p[l].rowSpan++; +e.appendBogus();f.$.rowSpan=n;e.$.rowSpan=m;1==n&&f.removeAttribute("rowSpan");1==m&&e.removeAttribute("rowSpan");return e}function v(a,c){var f=b(a);if(1<f.length)return!1;if(c)return!0;var f=f[0],e=f.getParent(),g=e.getAscendant("table"),g=CKEDITOR.tools.buildTableMap(g),h=d(g,e.$.rowIndex,f),k=f.$.colSpan;if(1<k)e=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=e=1,l=[],m=0;m<g.length;m++){var n=g[m];l.push(n[h]);1<n[h].rowSpan&&(m+=n[h].rowSpan-1)}for(g=0;g<l.length;g++)l[g].colSpan++}g=f.clone(); +g.insertAfter(f);g.appendBogus();f.$.colSpan=e;g.$.colSpan=k;1==e&&f.removeAttribute("colSpan");1==k&&g.removeAttribute("colSpan");return g}var p=CKEDITOR.tools.isArray;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(a){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function e(b,c){var d=a.addCommand(b,c);a.addFeature(d)}var p=a.lang.table, +z=CKEDITOR.tools.style.parse,y="td{width} td{height} td{border-color} td{background-color} td{white-space} td{vertical-align} td{text-align} td[colspan] td[rowspan] th".split(" ");e("cellProperties",new CKEDITOR.dialogCommand("cellProperties",d({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:y,contentTransformations:[[{element:"td",left:function(a){return a.styles.background&&z.background(a.styles.background).color}, +right:function(a){a.styles["background-color"]=z.background(a.styles.background).color}},{element:"td",check:"td{vertical-align}",left:function(a){return a.attributes&&a.attributes.valign},right:function(a){a.styles["vertical-align"]=a.attributes.valign;delete a.attributes.valign}}],[{element:"tr",check:"td{height}",left:function(a){return a.styles&&a.styles.height},right:function(a){CKEDITOR.tools.array.forEach(a.children,function(b){b.name in{td:1,th:1}&&(b.attributes["cke-row-height"]=a.styles.height)}); +delete a.styles.height}}],[{element:"td",check:"td{height}",left:function(a){return(a=a.attributes)&&a["cke-row-height"]},right:function(a){a.styles.height=a.attributes["cke-row-height"];delete a.attributes["cke-row-height"]}}]]})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");e("rowDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();(a=g(a))&&f(a)}}));e("rowInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);h(a,!0)}})); +e("rowInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);h(a)}}));e("columnDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();(a=l(a))&&f(a,!0)}}));e("columnInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);m(a,!0)}}));e("columnInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);m(a)}}));e("cellDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();c(a)}}));e("cellMerge", +d({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a,b){b.cell=n(a.getSelection());f(b.cell,!0)}}));e("cellMergeRight",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a,b){b.cell=n(a.getSelection(),"right");f(b.cell,!0)}}));e("cellMergeDown",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a,b){b.cell=n(a.getSelection(),"down");f(b.cell,!0)}}));e("cellVerticalSplit",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]", +exec:function(a){f(v(a.getSelection()))}}));e("cellHorizontalSplit",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){f(w(a.getSelection()))}}));e("cellInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a,!0)}}));e("cellInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a)}}));a.addMenuItems&&a.addMenuItems({tablecell:{label:p.cell.menu,group:"tablecell",order:1,getItems:function(){var c=a.getSelection(),d=b(c),c= +{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:n(c,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:n(c,"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:n(c,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:v(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:w(c,!0)?CKEDITOR.TRISTATE_OFF: +CKEDITOR.TRISTATE_DISABLED};a.filter.check(y)&&(c.tablecell_properties=0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);return c}},tablecell_insertBefore:{label:p.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:p.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:p.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:p.cell.merge,group:"tablecell",command:"cellMerge", +order:16},tablecell_merge_right:{label:p.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:p.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:p.cell.splitHorizontal,group:"tablecell",command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:p.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:p.cell.title,group:"tablecellproperties",command:"cellProperties", +order:21},tablerow:{label:p.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:p.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:p.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:p.row.deleteRow,group:"tablerow",command:"rowDelete",order:15}, +tablecolumn:{label:p.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:p.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:p.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:p.column.deleteColumn,group:"tablecolumn", +command:"columnDelete",order:15}});a.contextMenu&&a.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getCellColIndex:e,insertRow:h,insertColumn:m,getSelectedCells:b};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(b,h,g,e,a){b=b.$.rows;g=g||0;e="number"===typeof e?e:b.length-1;a="number"===typeof a? +a:-1;var m=-1,l=[];for(h=h||0;h<=e;h++){m++;!l[m]&&(l[m]=[]);for(var k=-1,c=g;c<=(-1===a?b[h].cells.length-1:a);c++){var f=b[h].cells[c];if(!f)break;for(k++;l[m][k];)k++;for(var d=isNaN(f.colSpan)?1:f.colSpan,f=isNaN(f.rowSpan)?1:f.rowSpan,n=0;n<f&&!(h+n>e);n++){l[m+n]||(l[m+n]=[]);for(var w=0;w<d;w++)l[m+n][k+w]=b[h].cells[c]}k+=d-1;if(-1!==a&&k>=a)break}}return l};(function(){function b(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function h(a,b){var d=a.getComputedStyle("border-"+ +b+"-width"),e={thin:"0px",medium:"1px",thick:"2px"};0>d.indexOf("px")&&(d=d in e&&"none"!=a.getComputedStyle("border-style")?e[d]:0);return parseInt(d,10)}function g(a){var b=[],d={},e="rtl"==a.getComputedStyle("direction");CKEDITOR.tools.array.forEach(a.$.rows,function(g,k){var l=-1,m=0,q=null;g?(m=new CKEDITOR.dom.element(g),q={height:m.$.offsetHeight,position:m.getDocumentPosition()}):q=void 0;for(var m=q.height,q=q.position,x=0,t=g.cells.length;x<t;x++){var z=new CKEDITOR.dom.element(g.cells[x]), +y=g.cells[x+1]&&new CKEDITOR.dom.element(g.cells[x+1]),l=l+(z.$.colSpan||1),u,B,C=z.getDocumentPosition().x;e?B=C+h(z,"left"):u=C+z.$.offsetWidth-h(z,"right");y?(C=y.getDocumentPosition().x,e?u=C+y.$.offsetWidth-h(y,"right"):B=C+h(y,"left")):(C=a.getDocumentPosition().x,e?u=C:B=C+a.$.offsetWidth);z=Math.max(B-u,3);z={table:a,index:l,x:u,y:q.y,width:z,height:m,rtl:e};d[l]=d[l]||[];d[l].push(z);z.alignedPillars=d[l];b.push(z)}});return b}function e(a){(a.data||a).preventDefault()}function a(a){function f(){x= +0;q.setOpacity(0);z&&d();var a=p.table;setTimeout(function(){a.removeCustomData("_cke_table_pillars")},0);r.removeListener("dragstart",e)}function d(){for(var d=p.rtl,f=d?B.length:u.length,e=0,g=0;g<f;g++){var k=u[g],m=B[g],n=p.table;CKEDITOR.tools.setTimeout(function(b,g,h,k,m,p){b&&b.setStyle("width",l(Math.max(g+p,1)));h&&h.setStyle("width",l(Math.max(k-p,1)));m&&n.setStyle("width",l(m+p*(d?-1:1)));++e==f&&a.fire("saveSnapshot")},0,this,[k,k&&b(k),m,m&&b(m),(!k||!m)&&b(n)+h(n,"left")+h(n,"right"), +z])}}function g(d){e(d);a.fire("saveSnapshot");d=p.index;for(var f=CKEDITOR.tools.buildTableMap(p.table),h=[],k=[],l=Number.MAX_VALUE,n=l,y=p.rtl,J=0,D=f.length;J<D;J++){var K=f[J],O=K[d+(y?1:0)],K=K[d+(y?0:1)],O=O&&new CKEDITOR.dom.element(O),K=K&&new CKEDITOR.dom.element(K);O&&K&&O.equals(K)||(O&&(l=Math.min(l,b(O))),K&&(n=Math.min(n,b(K))),h.push(O),k.push(K))}u=h;B=k;C=p.x-l;A=p.x+n;q.setOpacity(.5);t=parseInt(q.getStyle("left"),10);z=0;x=1;q.on("mousemove",v);r.on("dragstart",e);r.on("mouseup", +m,this)}function m(a){a.removeListener();f()}function v(a){y(a.data.getPageOffset().x)}var p,r,q,x,t,z,y,u,B,C,A;r=a.document;q=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"\x3e\x3c/div\x3e',r);a.on("destroy",function(){q.remove()});k||r.getDocumentElement().append(q);this.attachTo= +function(a){var b,c,d;x||(k&&(r.getBody().append(q),z=0),p=a,b=p.alignedPillars[0],c=p.alignedPillars[p.alignedPillars.length-1],d=b.y,b=c.height+c.y-b.y,q.setStyles({width:l(a.width),height:l(b),left:l(a.x),top:l(d)}),k&&q.setOpacity(.25),q.on("mousedown",g,this),r.getBody().setStyle("cursor","col-resize"),q.show())};y=this.move=function(a,b){if(!p)return 0;if(!(x||a>=p.x&&a<=p.x+p.width&&b>=p.y&&b<=p.y+p.height))return p=null,x=z=0,r.removeListener("mouseup",m),q.removeListener("mousedown",g),q.removeListener("mousemove", +v),r.getBody().setStyle("cursor","auto"),k?q.remove():q.hide(),0;var c=a-Math.round(q.$.offsetWidth/2);if(x){if(c==C||c==A)return 1;c=Math.max(c,C);c=Math.min(c,A);z=c-t}q.setStyle("left",l(c));return 1}}function m(a){var b=a.data.getTarget();if("mouseout"==a.name){if(!b.is("table"))return;for(var d=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);d&&d.$&&!d.equals(b)&&!d.is("body");)d=d.getParent();if(!d||d.equals(b))return}b.getAscendant("table",1).removeCustomData("_cke_table_pillars"); +a.removeListener()}var l=CKEDITOR.tools.cssLength,k=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(b){b.on("contentDom",function(){var f,d=b.editable();d.attachListener(d.isInline()?d:b.document,"mousemove",function(d){d=d.data;var h=d.getTarget();if(h.type==CKEDITOR.NODE_ELEMENT){var k=d.getPageOffset().x,l=d.getPageOffset().y;if(f&&f.move(k,l))e(d);else if(h.is("table")||h.getAscendant({thead:1,tbody:1,tfoot:1}, +1))if(d=h.getAscendant("table",1),b.editable().contains(d)){(h=d.getCustomData("_cke_table_pillars"))||(d.setCustomData("_cke_table_pillars",h=g(d)),d.on("mouseout",m),d.on("mousedown",m));a:{d=h;for(var h=0,r=d.length;h<r;h++){var q=d[h];if(k>=q.x&&k<=q.x+q.width&&l>=q.y&&l<=q.y+q.height){k=q;break a}}k=null}k&&(!f&&(f=new a(b)),f.attachTo(k))}}})})}})})();"use strict";(function(){function b(a,b){return CKEDITOR.tools.array.reduce(b,function(a,b){return b(a)},a)}var h=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+ +89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],g={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){g.enabled&&!1!==a.data.command.canUndo&&g.save()}function d(){g.enabled=a.readOnly?!1:"wysiwyg"==a.mode;g.onChange()}var g=a.undoManager=new e(a),k=g.editingHandler=new l(g),m=a.addCommand("undo",{exec:function(){g.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),p=a.addCommand("redo",{exec:function(){g.redo()&&(a.selectionChange(),this.fire("afterRedo"))}, +startDisabled:!0,canUndo:!1});a.setKeystroke([[h[0],"undo"],[h[1],"redo"],[h[2],"redo"]]);g.onChange=function(){m.setState(g.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);p.setState(g.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){g.save(a.data&&a.data.contentOnly)});a.on("contentDom",k.attachListeners,k);a.on("instanceReady",function(){a.fire("saveSnapshot")});a.on("beforeModeUnload", +function(){"wysiwyg"==a.mode&&g.save(!0)});a.on("mode",d);a.on("readOnly",d);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){g.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){g.currentImage&&g.update()});a.on("lockSnapshot",function(a){a=a.data;g.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot",g.unlock,g)}});CKEDITOR.plugins.undo= +{};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this._filterRules=[];this.editor=a;this.reset();CKEDITOR.env.ie&&this.addFilterRule(function(a){return a.replace(/\s+data-cke-expando=".*?"/g,"")})};e.prototype={type:function(a,b){var d=e.getKeyGroup(a),g=this.strokesRecorded[d]+1;b=b||g>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange()); +b?(g=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[d]=g;this.previousKeyGroup=d},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1); +this.resetType();this.onChange()},save:function(b,f,d){var e=this.editor;if(this.locked||"ready"!=e.status||"wysiwyg"!=e.mode)return!1;var g=e.editable();if(!g||"ready"!=g.status)return!1;g=this.snapshots;f||(f=new a(e));if(!1===f.contents)return!1;if(this.currentImage)if(f.equalsContent(this.currentImage)){if(b||f.equalsSelection(this.currentImage))return!1}else!1!==d&&e.fire("change");g.splice(this.index+1,g.length-this.index-1);g.length==this.limit&&g.shift();this.index=g.push(f)-1;this.currentImage= +f;!1!==d&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor,d;a.bookmarks&&(b.focus(),d=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?d.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(d=this.editor.document.getBody().$.createTextRange(),d.collapse(!0),d.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots, +d=this.currentImage,e;if(d)if(a)for(e=this.index-1;0<=e;e--){if(a=b[e],!d.equalsContent(a))return a.index=e,a}else for(e=this.index+1;e<b.length;e++)if(a=b[e],!d.equalsContent(a))return a.index=e,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a= +this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(b){if(!this.locked){b||(b=new a(this.editor));for(var f=this.index,d=this.snapshots;0<f&&this.currentImage.equalsContent(d[f-1]);)--f;d.splice(f,this.index-f+1,b);this.index=f;this.currentImage=b}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,d=b[b.length-1];return d.equalsContent(a)&&!d.equalsSelection(a)?(this.currentImage=b[b.length-1]=a,!0):!1},lock:function(b,f){if(this.locked)this.locked.level++; +else if(b)this.locked={level:1};else{var d=null;if(f)d=!0;else{var e=new a(this.editor,!0);this.currentImage&&this.currentImage.equalsContent(e)&&(d=e)}this.locked={update:d,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var b=this.locked.update;this.locked=null;if(!0===b)this.update();else if(b){var f=new a(this.editor,!0);b.equalsContent(f)||this.update()}}},addFilterRule:function(a){this._filterRules.push(a)}};e.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};e.keyGroups= +{PRINTABLE:0,FUNCTIONAL:1};e.isNavigationKey=function(a){return!!e.navigationKeyCodes[a]};e.getKeyGroup=function(a){var b=e.keyGroups;return g[a]?b.FUNCTIONAL:b.PRINTABLE};e.getOppositeKeyGroup=function(a){var b=e.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};e.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&e.getKeyGroup(a)==e.keyGroups.FUNCTIONAL};var a=CKEDITOR.plugins.undo.Image=function(a,f){this.editor=a;a.fire("beforeUndoImage");var d=a.getSnapshot();d&&(this.contents= +b(d,a.undoManager._filterRules));f||(this.bookmarks=(d=d&&a.getSelection())&&d.createBookmarks2(!0));a.fire("afterUndoImage")},m=/\b(?:href|src|name)="[^"]*?"/gi;a.prototype={equalsContent:function(a){var b=this.contents;a=a.contents;CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)&&(b=b.replace(m,""),a=a.replace(m,""));return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks;a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return!1;for(var d=0;d<b.length;d++){var e=b[d], +g=a[d];if(e.startOffset!=g.startOffset||e.endOffset!=g.endOffset||!CKEDITOR.tools.arrayCompare(e.start,g.start)||!CKEDITOR.tools.arrayCompare(e.end,g.end))return!1}}return!0}};var l=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new k;this.lastKeydownImage=null};l.prototype={onKeydown:function(b){var f=b.data.getKey();if(229!==f)if(-1<CKEDITOR.tools.indexOf(h,b.data.getKeystroke()))b.data.preventDefault();else if(this.keyEventsStack.cleanUp(b), +b=this.undoManager,this.keyEventsStack.getLast(f)||this.keyEventsStack.push(f),this.lastKeydownImage=new a(b.editor),e.isNavigationKey(f)||this.undoManager.keyGroupChanged(f))if(b.strokesRecorded[0]||b.strokesRecorded[1])b.save(!1,this.lastKeydownImage,!1),b.resetType()},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&& +(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(b){var f=this.undoManager;b=b.data.getKey();var d=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(b);if(!(e.ieFunctionalKeysBug(b)&&this.lastKeydownImage&&this.lastKeydownImage.equalsContent(new a(f.editor,!0))))if(0<d)f.type(b);else if(e.isNavigationKey(b))this.onNavigationKey(!0)},onNavigationKey:function(b){var f=this.undoManager;!b&&f.save(!0,null,!1)||f.updateSelection(new a(f.editor)); +f.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},activateInputEventListener:function(){this.ignoreInputEvent=!1},attachListeners:function(){var a=this.undoManager.editor,b=a.editable(),d=this;b.attachListener(b,"keydown",function(a){d.onKeydown(a);if(e.ieFunctionalKeysBug(a.data.getKey()))d.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?"keypress":"input",d.onInput,d,null,999);b.attachListener(b,"keyup",d.onKeyup,d,null,999);b.attachListener(b,"paste",d.ignoreInputEventListener, +d,null,999);b.attachListener(b,"drop",d.ignoreInputEventListener,d,null,999);a.on("afterPaste",d.activateInputEventListener,d,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){d.onNavigationKey()},null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){d.keyEventsStack.remove(9)},null,null,999)}};var k=CKEDITOR.plugins.undo.KeyEventsStack=function(){this.stack=[]};k.prototype={push:function(a){a=this.stack.push({keyCode:a,inputs:0});return this.stack[a- +1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if("number"==typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a= +this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;a.ctrlKey||a.metaKey||this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}})();(function(){function b(a){function b(a){var c=!1;d.attachListener(d,"keydown",function(){var b=g.getBody().getElementsByTag(a);if(!c){for(var d=0;d<b.count();d++)b.getItem(d).setCustomData("retain",!0);c=!0}},null,null,1);d.attachListener(d,"keyup",function(){var b=g.getElementsByTag(a);c&&(1==b.count()&&!b.getItem(0).getCustomData("retain")&& +CKEDITOR.tools.isEmpty(b.getItem(0).getAttributes())&&b.getItem(0).remove(1),c=!1)})}var e=this.editor;if(e&&!e.isDetached()){var g=a.document,c=g.body,f=g.getElementById("cke_actscrpt");f&&f.parentNode.removeChild(f);(f=g.getElementById("cke_shimscrpt"))&&f.parentNode.removeChild(f);(f=g.getElementById("cke_basetagscrpt"))&&f.parentNode.removeChild(f);c.contentEditable=!0;CKEDITOR.env.ie&&(c.hideFocus=!0,c.disabled=!0,c.removeAttribute("disabled"));delete this._.isLoadingData;this.$=c;g=new CKEDITOR.dom.document(g); +this.setup();this.fixInitialSelection();var d=this;CKEDITOR.env.ie&&!CKEDITOR.env.edge&&g.getDocumentElement().addClass(g.$.compatMode);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&e.enterMode!=CKEDITOR.ENTER_P?b("p"):CKEDITOR.env.edge&&15>CKEDITOR.env.version&&e.enterMode!=CKEDITOR.ENTER_DIV&&b("div");if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&10<CKEDITOR.env.version)g.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){e.editable().focus()})});h(e);try{e.document.$.execCommand("2D-position", +!1,!0)}catch(n){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==e.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var b=a.data.getKeystroke();if(33==b||34==b)if(CKEDITOR.env.ie)setTimeout(function(){e.getSelection().scrollIntoView()},0);else if(e.window.$.innerHeight>this.$.offsetHeight){var c=e.createRange();c[33==b?"moveToElementEditStart":"moveToElementEditEnd"](this);c.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(g,"blur",function(){try{g.$.selection.empty()}catch(a){}}); +CKEDITOR.env.iOS&&this.attachListener(g,"touchend",function(){a.focus()});c=e.document.getElementsByTag("title").getItem(0);c.data("cke-title",c.getText());CKEDITOR.env.ie&&(e.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){"unloaded"==this.status&&(this.status="ready");e.fire("contentDom");this._.isPendingFocus&&(e.focus(),this._.isPendingFocus=!1);setTimeout(function(){e.fire("dataReady")},0)},0,this)}}function h(a){function b(){var c;a.editable().attachListener(a,"selectionChange", +function(){var b=a.getSelection().getSelectedElement();b&&(c&&(c.detachEvent("onresizestart",e),c=null),b.$.attachEvent("onresizestart",e),c=b.$)})}function e(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var g=a.document.$;g.execCommand("enableObjectResizing",!1,!a.config.disableObjectResizing);g.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(c){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&b(a)}function g(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}"); +var b=[],e;for(e in CKEDITOR.dtd.$removeEmpty)b.push("html.CSS1Compat "+e+"[contenteditable\x3dfalse]");a.push(b.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}var e;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]", +requiredContent:"body"});a.addMode("wysiwyg",function(b){function g(d){d&&d.removeListener();a.isDestroyed()||a.isDetached()||(a.editable(new e(a,c.$.contentWindow.document.body)),a.setData(a.getData(1),b))}var h="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",h=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(h)+"}())":"",c=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+ +h+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');c.setStyles({width:"100%",height:"100%"});c.addClass("cke_wysiwyg_frame").addClass("cke_reset");h=a.ui.space("contents");h.append(c);var f=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(f)c.on("load",g);var d=a.title,n=a.fire("ariaEditorHelpLabel",{}).label;d&&(CKEDITOR.env.ie&&n&&(d+=", "+n),c.setAttribute("title",d));if(n){var d=CKEDITOR.tools.getNextId(),w=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+d+'" class\x3d"cke_voice_label"\x3e'+ +n+"\x3c/span\x3e");h.append(w,1);c.setAttribute("aria-describedby",d)}a.on("beforeModeUnload",function(a){a.removeListener();w&&w.remove()});c.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!f&&g();a.fire("ariaWidget",c)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var b=this.config,e=b.contentsCss;CKEDITOR.tools.isArray(e)||(b.contentsCss=e?[e]:[]);b.contentsCss.push(a)};e=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler= +CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(b,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(a,b){var e=this.editor;if(b)this.setHtml(a),this.fixInitialSelection(),e.fire("dataReady");else{this._.isLoadingData=!0;e._.dataStore={id:1};var h=e.config,c=h.fullPage,f=h.docType,d=CKEDITOR.tools.buildStyleHtml(g()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');c||(d+=CKEDITOR.tools.buildStyleHtml(e.config.contentsCss)); +var n=h.baseHref?'\x3cbase href\x3d"'+h.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";c&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){e.docType=f=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){e.xmlDeclaration=a;return""}));a=e.dataProcessor.toHtml(a);c?(/<body[\s|>]/.test(a)||(a="\x3cbody\x3e"+a),/<html[\s|>]/.test(a)||(a="\x3chtml\x3e"+a+"\x3c/html\x3e"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):a=a.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"), +n&&(a=a.replace(/<head[^>]*?>/,"$\x26"+n)),a=a.replace(/<\/head\s*>/,d+"$\x26"),a=f+a):a=h.docType+'\x3chtml dir\x3d"'+h.contentsLangDirection+'" lang\x3d"'+(h.contentsLanguage||e.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+this._.docTitle+"\x3c/title\x3e"+n+d+"\x3c/head\x3e\x3cbody"+(h.bodyId?' id\x3d"'+h.bodyId+'"':"")+(h.bodyClass?' class\x3d"'+h.bodyClass+'"':"")+"\x3e"+a+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&& +(a=a.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e")));h='\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"'+(CKEDITOR.env.ie?' defer\x3d"defer" ':"")+"\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded\x3d1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"\x3c/script\x3e";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e'); +n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');a=a.replace(/(?=\s*<\/(:?head)>)/,h);this.clearCustomData();this.clearListeners();e.fire("contentDomUnload");var w=this.getDocument();try{w.write(a)}catch(v){setTimeout(function(){w.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var b=a.config,e=b.fullPage,g=e&&a.docType,c=e&&a.xmlDeclaration, +f=this.getDocument(),e=e?f.getDocumentElement().getOuterHtml():f.getBody().getHtml();CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,""));e=a.dataProcessor.toDataFormat(e);c&&(e=c+"\n"+e);g&&(e=g+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:e.baseProto.focus.call(this)},detach:function(){var a=this.editor,b=a.document,a=a.container.findOne("iframe.cke_wysiwyg_frame");e.baseProto.detach.call(this);this.clearCustomData(this._.expandoNumber); +b.getDocumentElement().clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);a&&(a.clearCustomData(),(b=a.removeCustomData("onResize"))&&b.removeListener(),a.isDetached()||a.remove())}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,autogrow,basicstyles,blockquote,notification,button,toolbar,clipboard,panel,floatpanel,menu,contextmenu,elementspath,enterkey,entities,popup,filetools,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,lineutils,widgetselection,widget,image2,indent,indentlist,justify,menubutton,language,list,magicline,maximize,pastetools,pastefromgdocs,pastefromlibreoffice,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea"; +CKEDITOR.config.skin="moono-lisa";(function(){var b=function(b,g){var e=CKEDITOR.getUrl("plugins/"+g);b=b.split(",");for(var a=0;a<b.length;a++)CKEDITOR.skin.icons[b[a]]={path:e,offset:-b[++a],bgsize:b[++a]}};CKEDITOR.env.hidpi?b("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,horizontalrule,336,,image,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,justifyblock,480,,justifycenter,504,,justifyleft,528,,justifyright,552,,language,576,,bulletedlist-rtl,600,,bulletedlist,624,,numberedlist-rtl,648,,numberedlist,672,,maximize,696,,pastefromword-rtl,720,,pastefromword,744,,pastetext-rtl,768,,pastetext,792,,removeformat,816,,showblocks-rtl,840,,showblocks,864,,source-rtl,888,,source,912,,sourcedialog-rtl,936,,sourcedialog,960,,specialchar,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,simplebox,2256,auto", "icons_hidpi.png"):b("about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,horizontalrule,336,auto,image,360,auto,indent-rtl,384,auto,indent,408,auto,outdent-rtl,432,auto,outdent,456,auto,justifyblock,480,auto,justifycenter,504,auto,justifyleft,528,auto,justifyright,552,auto,language,576,auto,bulletedlist-rtl,600,auto,bulletedlist,624,auto,numberedlist-rtl,648,auto,numberedlist,672,auto,maximize,696,auto,pastefromword-rtl,720,auto,pastefromword,744,auto,pastetext-rtl,768,auto,pastetext,792,auto,removeformat,816,auto,showblocks-rtl,840,auto,showblocks,864,auto,source-rtl,888,auto,source,912,auto,sourcedialog-rtl,936,auto,sourcedialog,960,auto,specialchar,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,simplebox,1128,auto", "icons.png")})()}})(); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/_translationstatus.txt b/web/core/assets/vendor/ckeditor/lang/_translationstatus.txt index fdad5d8dc19868a86f47f39c4c1d1572d0797d4f..db12ce60488e34cb5d9989c259a3f4614f29de86 100644 --- a/web/core/assets/vendor/ckeditor/lang/_translationstatus.txt +++ b/web/core/assets/vendor/ckeditor/lang/_translationstatus.txt @@ -1,4 +1,4 @@ -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license af.js Found: 62 Missing: 4 diff --git a/web/core/assets/vendor/ckeditor/lang/af.js b/web/core/assets/vendor/ckeditor/lang/af.js index ee9cae67edfb95535f8bd9d976b077595c1b6360..f54e2b2f1bd25d25c12f796f074b333472ab8781 100644 --- a/web/core/assets/vendor/ckeditor/lang/af.js +++ b/web/core/assets/vendor/ckeditor/lang/af.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['af']={"widget":{"move":"Klik en trek on te beweeg","label":"%1 widget"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Dokument","clipboard":"Knipbord/Undo","editing":"Verander","forms":"Vorms","basicstyles":"Eenvoudige Styl","paragraph":"Paragraaf","links":"Skakels","insert":"Toevoeg","styles":"Style","colors":"Kleure","tools":"Gereedskap"},"toolbars":"Werkbalke"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","heightUnit":"height unit","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"stylescombo":{"label":"Styl","panelTitle":"Vormaat style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"sourcedialog":{"toolbar":"Bron","title":"Bron"},"sourcearea":{"toolbar":"Bron"},"showblocks":{"toolbar":"Toon blokke"},"removeformat":{"toolbar":"Verwyder opmaak"},"pastetext":{"button":"Voeg by as eenvoudige teks","pasteNotification":"Druk %1 om by te voeg. Jou leser ondersteun nie byvoeg deur die toolbar knoppie of die konteks kieslys nie","title":"Voeg by as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil byvoeg lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit bygevoeg word?","error":"Die bygevoegte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Uit Word byvoeg","toolbar":"Uit Word byvoeg"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"magicline":{"title":"Voeg paragraaf hier in"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"image2":{"alt":"Alternatiewe teks","btnUpload":"Stuur na bediener","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Afbeelding informasie","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","pathName":"image","pathNameCaption":"caption","resetSize":"Herstel grootte","resizer":"Click and drag to resize","title":"Afbeelding eienskappe","uploadTab":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"clipboard":{"copy":"Kopiëer","copyError":"U leser se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Uitsnei","cutError":"U leser se sekuriteitsinstelling belet die outomatiese uitsnei-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Byvoeg","pasteNotification":"Druk %1 om by te voeg. You leser ondersteun nie die toolbar knoppie of inoud kieslysie opsie nie. ","pasteArea":"Area byvoeg","pasteMsg":"Voeg jou inhoud in die gebied onder by en druk OK"},"blockquote":{"toolbar":"Sitaatblok"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurgestreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"about":{"copy":"Kopiereg © $1. Alle regte voorbehou.","dlgTitle":"Meer oor CKEditor 4","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:"},"editor":"Woordverwerker","editorPanel":"Woordverwerkerpaneel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur aan die bediener","image":"Beeld","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teksarea","hiddenField":"Versteekteveld","button":"Knop","select":"Keuseveld","imageButton":"Beeldknop","notSet":"<geen instelling>","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Skalierung","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n nommer nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is jy seker dat jy 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is jy seker dat jy hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Teiken","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Orienteerung","left":"Links","right":"Regs","center":"Middel","justify":"Eweredig","alignLeft":"Links oplyn","alignRight":"Regs oplyn","alignCenter":"Middel oplyn","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidLength":"Die waarde vir die veld \"%1\" moet 'n posetiewe nommer wees met of sonder die meeteenheid (%2).","invalidCssLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","invalidHtmlLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige HTML eenheid (px of %).","invalidInlineStyle":"Ongeldige CSS. Formaat is een of meer sleutel-wert paare, \"naam : wert\" met kommapunte gesky.","cssLengthTooltip":"Voeg 'n getal wert in pixel in, of 'n waarde met geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Skuif","17":"Ctrl","18":"Alt","32":"Spasie","35":"Einde","36":"Tuis","46":"Verwyder","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Bevel"},"keyboardShortcut":"Sleutel kombenasie","optionDefault":"Verstek"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ar.js b/web/core/assets/vendor/ckeditor/lang/ar.js index 8208f7752304ba2f90b19f0db811e05509d51af3..fd96864878835e27c5ecb7270e1f899ce06116ff 100644 --- a/web/core/assets/vendor/ckeditor/lang/ar.js +++ b/web/core/assets/vendor/ckeditor/lang/ar.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ar']={"widget":{"move":"إضغط و إسحب للتحريك","label":"%1 widget"},"undo":{"redo":"إعادة","undo":"تراجع"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"table":{"border":"الحدود","caption":"الوصف","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذف خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسفل","splitHorizontal":"تقسيم الخلية أفقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصفوف","colSpan":"امتداد الأعمدة","wordWrap":"التفاف النص","hAlign":"محاذاة أفقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلفية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتفاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصفوف يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المسافة البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذف أعمدة"},"columns":"أعمدة","deleteTable":"حذف الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الصف الأول","heightUnit":"height unit","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج حرف خاص"},"sourcedialog":{"toolbar":"المصدر","title":"المصدر"},"sourcearea":{"toolbar":"المصدر"},"showblocks":{"toolbar":"مخطط تفصيلي"},"removeformat":{"toolbar":"إزالة التنسيقات"},"pastetext":{"button":"لصق كنص بسيط","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"magicline":{"title":"إدراج فقرة هنا"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"language":{"button":"حدد اللغة","remove":"حذف اللغة"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"image2":{"alt":"عنوان الصورة","btnUpload":"أرسلها للخادم","captioned":"صورة ذات اسم","captionPlaceholder":"تسمية","infoTab":"معلومات الصورة","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","pathName":"صورة","pathNameCaption":"تسمية","resetSize":"إستعادة الحجم الأصلي","resizer":"انقر ثم اسحب للتحجيم","title":"خصائص الصورة","uploadTab":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"خط فاصل"},"format":{"label":"تنسيق","panelTitle":"تنسيق الفقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان 2","tag_h3":"العنوان 3","tag_h4":"العنوان 4","tag_h5":"العنوان 5","tag_h6":"العنوان 6","tag_p":"عادي","tag_pre":"منسّق"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"contextmenu":{"options":"خصائص قائمة السياق"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteNotification":"اضغط %1 للصق. اللصق عن طريق شريط الادوات او القائمة غير مدعوم من المتصفح المستخدم من قبلك.","pasteArea":"منطقة اللصق","pasteMsg":"الصق المحتوى بداخل المساحة المخصصة ادناه ثم اضغط على OK"},"blockquote":{"toolbar":"اقتباس"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"about":{"copy":"حقوق النشر © $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:"},"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","flash":"فلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل خفي","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"إسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوصف التفصيلى","cssClass":"فئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"موافق","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"تغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هدف الرابط","targetNew":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","left":"يسار","right":"يمين","center":"وسط","justify":"ضبط","alignLeft":"محاذاة إلى اليسار","alignRight":"محاذاة إلى اليمين","alignCenter":"Align Center","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/az.js b/web/core/assets/vendor/ckeditor/lang/az.js index b25e344bcd5b2f65334d993b35b9b289eaab621f..da40ee774eaecb2d0da2b9ef522752908d49e470 100644 --- a/web/core/assets/vendor/ckeditor/lang/az.js +++ b/web/core/assets/vendor/ckeditor/lang/az.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['az']={"widget":{"move":"Tıklayın və aparın","label":"%1 vidjet"},"undo":{"redo":"Təkrar et","undo":"İmtina et"},"toolbar":{"toolbarCollapse":"Paneli gizlət","toolbarExpand":"Paneli göstər","toolbarGroups":{"document":"Mətn","clipboard":"Mübadilə buferi/İmtina et","editing":"Redaktə edilməsi","forms":"Formalar","basicstyles":"Əsas üslublar","paragraph":"Abzas","links":"Link","insert":"Əlavə et","styles":"Üslublar","colors":"Rənqlər","tools":"Alətləri"},"toolbars":"Redaktorun panelləri"},"table":{"border":"Sərhədlərin eni","caption":"Cədvəlin başlığı","cell":{"menu":"Xana","insertBefore":"Burdan əvvələ xanası çək","insertAfter":"Burdan sonra xanası çək","deleteCell":"Xanaları sil","merge":"Xanaları birləşdir","mergeRight":"Sağdan birləşdir","mergeDown":"Soldan birləşdir","splitHorizontal":"Üfüqi böl","splitVertical":"Şaquli böl","title":"Xanaların seçimləri","cellType":"Xana növü","rowSpan":"Sətirləri birləşdir","colSpan":"Sütunları birləşdir","wordWrap":"Sətirlərin sınması","hAlign":"Üfüqi düzləndirmə","vAlign":"Şaquli düzləndirmə","alignBaseline":"Mətn xətti","bgColor":"Doldurma rəngi","borderColor":"Sərhədin rəngi","data":"Məlumatlar","header":"Başlıq","yes":"Bəli","no":"Xeyr","invalidWidth":"Xanasın eni rəqəm olmalıdır.","invalidHeight":"Xanasın hündürlüyü rəqəm olmalıdır.","invalidRowSpan":"Birləşdirdiyiniz sütun xanaların sayı tam və müsbət rəqəm olmalıdır.","invalidColSpan":"Birləşdirdiyiniz sətir xanaların sayı tam və müsbət rəqəm olmalıdır.","chooseColor":"Seç"},"cellPad":"Xanalardakı kənar boşluqlar","cellSpace":"Xanalararası interval","column":{"menu":"Sütun","insertBefore":"Sola sütun əlavə et","insertAfter":"Sağa sütun əlavə et","deleteColumn":"Sütunları sil"},"columns":"Sütunlar","deleteTable":"Cədvəli sil","headers":"Başlıqlar","headersBoth":"Hər ikisi","headersColumn":"Birinci sütun","headersNone":"yox","headersRow":"Birinci sətir","heightUnit":"height unit","invalidBorder":"Sərhədlərin eni müsbət rəqəm olmalıdır.","invalidCellPadding":"Xanalardakı kənar boşluqlar müsbət rəqəm olmalıdır.","invalidCellSpacing":"Xanalararası interval müsbət rəqəm olmalıdır.","invalidCols":"Sütunlarin sayı tam və müsbət olmalıdır.","invalidHeight":"Cədvəlin hündürlüyü rəqəm olmalıdır.","invalidRows":"Sətirlətin sayı tam və müsbət olmalıdır.","invalidWidth":"Cədvəlin eni rəqəm olmalıdır.","menu":"Cədvəl alətləri","row":{"menu":"Sətir","insertBefore":"Yuxarıya sətir əlavə et","insertAfter":"Aşağıya sətir əlavə et","deleteRow":"Sətirləri sil"},"rows":"Sətirlər","summary":"Xülasə","title":"Cədvəl alətləri","toolbar":"Cədvəl","widthPc":"faiz","widthPx":"piksel","widthUnit":"en vahidi"},"stylescombo":{"label":"Üslub","panelTitle":"Format üslubları","panelTitle1":"Blokların üslubları","panelTitle2":"Sözlərin üslubları","panelTitle3":"Obyektlərin üslubları"},"specialchar":{"options":"Xüsusi simvolların seçimləri","title":"Xüsusi simvolu seç","toolbar":"Xüsusi simvolu daxil et"},"sourcedialog":{"toolbar":"Mənbə","title":"Mənbə"},"sourcearea":{"toolbar":"HTML mənbəyini göstər"},"showblocks":{"toolbar":"Blokları göstər"},"removeformat":{"toolbar":"Formatı sil"},"pastetext":{"button":"Yalnız mətni saxla","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Əlavə edilən mətn Word-dan köçürülənə oxşayır. Təmizləmək istəyirsinizmi?","error":"Daxili səhvə görə əlavə edilən məlumatların təmizlənməsi mümkün deyil","title":"Word-dan əlavəetmə","toolbar":"Word-dan əlavəetmə"},"notification":{"closed":"Xəbərdarlıq pəncərəsi bağlanıb"},"maximize":{"maximize":"Aşkarla","minimize":"Gizlət"},"magicline":{"title":"Abzası burada əlavə et"},"list":{"bulletedlist":"Markerlənmiş siyahını başlat/sil","numberedlist":"Nömrələnmiş siyahını başlat/sil"},"language":{"button":"Dilini təyin et","remove":"Dilini sil"},"indent":{"indent":"Sol boşluqu artır","outdent":"Sol boşluqu azalt"},"image2":{"alt":"Alternativ mətn","btnUpload":"Serverə göndər","captioned":"Altyazı olan şəkil","captionPlaceholder":"Altyazı","infoTab":"Şəkil haqqında məlumat","lockRatio":"Ölçülərin nisbəti saxla","menu":"Şəklin seçimləri","pathName":"Şəkil","pathNameCaption":"Altyazı","resetSize":"Ölçüləri qaytar","resizer":"Ölçülər dəyişmək üçün tıklayın və aparın","title":"Şəklin seçimləri","uploadTab":"Serverə yüklə","urlMissing":"Şəklin ünvanı yanlışdır.","altMissing":"Alternativ mətn tapılmayıb"},"horizontalrule":{"toolbar":"Sərhəd xətti yarat"},"format":{"label":"Format","panelTitle":"Abzasın formatı","tag_address":"Ünvan","tag_div":"Normal (DIV)","tag_h1":"Başlıq 1","tag_h2":"Başlıq 2","tag_h3":"Başlıq 3","tag_h4":"Başlıq 4","tag_h5":"Başlıq 5","tag_h6":"Başlıq 6","tag_p":"Normal","tag_pre":"Formatı saxla"},"filetools":{"loadError":"Faylını oxumaq mümkün deyil","networkError":"Xəta baş verdi.","httpError404":"Serverə göndərilməsinin zamanı xəta baş verdi (404 - fayl tapılmayıb)","httpError403":"Serverə göndərilməsinin zamanı xəta baş verdi (403 - gadağandır)","httpError":"Serverə göndərilməsinin zamanı xəta baş verdi (xətanın ststusu: %1)","noUrlError":"Yükləmə linki təyin edilməyib","responseError":"Serverin cavabı yanlışdır"},"elementspath":{"eleLabel":"Elementin izləri","eleTitle":"%1 element"},"contextmenu":{"options":"Əlavə əməliyyatlar"},"clipboard":{"copy":"Köçür","copyError":"Avtomatik köçürülməsi mümkün deyil. Ctrl+C basın.","cut":"Kəs","cutError":"Avtomatik kəsmə mümkün deyil. Ctrl+X basın.","paste":"Əlavə et","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Sitat bloku"},"basicstyles":{"bold":"Qalın","italic":"Kursiv","strike":"Üstüxətli","subscript":"Aşağı indeks","superscript":"Yuxarı indeks","underline":"Altdan xətt"},"about":{"copy":"Copyright © $1. Bütün hüquqlar qorunur.","dlgTitle":"CKEditor haqqında","moreInfo":"Lisenziya informasiyası üçün zəhmət olmasa saytımızı ziyarət edin:"},"editor":"Mətn Redaktoru","editorPanel":"Mətn Redaktorun Paneli","common":{"editorHelp":"Yardım üçün ALT 0 düymələrini basın","browseServer":"Fayların siyahı","url":"URL","protocol":"Protokol","upload":"Serverə yüklə","uploadSubmit":"Göndər","image":"Şəkil","flash":"Flash","form":"Forma","checkbox":"Çekboks","radio":"Radio düyməsi","textField":"Mətn xanası","textarea":"Mətn","hiddenField":"Gizli xana","button":"Düymə","select":"Opsiyaların seçilməsi","imageButton":"Şəkil tipli düymə","notSet":"<seçilməmiş>","id":"Id","name":"Ad","langDir":"Yaziların istiqaməti","langDirLtr":"Soldan sağa (LTR)","langDirRtl":"Sağdan sola (RTL)","langCode":"Dilin kodu","longDescr":"URL-ın ətraflı izahı","cssClass":"CSS klassları","advisoryTitle":"Başlıq","cssStyle":"CSS","ok":"Tədbiq et","cancel":"İmtina et","close":"Bağla","preview":"Baxış","resize":"Eni dəyiş","generalTab":"Əsas","advancedTab":"Əlavə","validateNumberFailed":"Rəqəm deyil.","confirmNewPage":"Yadda saxlanılmamış dəyişikliklər itiriləcək. Davam etmək istədiyinizə əminsinizmi?","confirmCancel":"Dəyişikliklər edilib. Pəncərəni bağlamaq istəyirsizə əminsinizmi?","options":"Seçimlər","target":"Hədəf çərçivə","targetNew":"Yeni pəncərə (_blank)","targetTop":"Əsas pəncərə (_top)","targetSelf":"Carı pəncərə (_self)","targetParent":"Ana pəncərə (_parent)","langDirLTR":"Soldan sağa (LTR)","langDirRTL":"Sağdan sola (RTL)","styles":"Üslub","cssClasses":"Üslub klası","width":"En","height":"Uzunluq","align":"Yerləşmə","left":"Sol","right":"Sağ","center":"Mərkəz","justify":"Eninə görə","alignLeft":"Soldan düzləndir","alignRight":"Sağdan düzləndir","alignCenter":"Mərkəzə düzləndir","alignTop":"Yuxarı","alignMiddle":"Orta","alignBottom":"Aşağı","alignNone":"Yoxdur","invalidValue":"Yanlışdır.","invalidHeight":"Hündürlük rəqəm olmalıdır.","invalidWidth":"En rəqəm olmalıdır.","invalidLength":"\"%1\" xanasına, ölçü vahidinin (%2) göstərilməsindən asılı olmayaraq, müsbət ədəd qeyd olunmalıdır.","invalidCssLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır, CSS-də olan ölçü vahidlərin (px, %, in, cm, mm, em, ex, pt, or pc) istifadısinə icazə verilir.","invalidHtmlLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır HTML-də olan ölçü vahidlərin (px və ya %) istifadısinə icazə verilir.","invalidInlineStyle":"Teq içində olan üslub \"ad : məzmun\" şəklidə, nöqtə-verqül işarəsi ilə bitməlidir","cssLengthTooltip":"Piksel sayı və ya digər CSS ölçü vahidləri (px, %, in, cm, mm, em, ex, pt, or pc) daxil edin.","unavailable":"%1<span class=\"cke_accessibility\">, mövcud deyil</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Boşluq","35":"Son","36":"Evə","46":"Sil","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Əmr"},"keyboardShortcut":"Qısayol düymələri","optionDefault":"Standart"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/bg.js b/web/core/assets/vendor/ckeditor/lang/bg.js index e864425cb8459317f06ae806ec210938d3358ce4..7efb190e707f7af609edb553fa0b4156a79ae1f8 100644 --- a/web/core/assets/vendor/ckeditor/lang/bg.js +++ b/web/core/assets/vendor/ckeditor/lang/bg.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['bg']={"widget":{"move":"Кликни и влачи, за да преместиш","label":"%1 приставка"},"undo":{"redo":"Пренаправи","undo":"Отмени"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Клипборд/Отмяна","editing":"Редакция","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане надясно","mergeDown":"Сливане надолу","splitHorizontal":"Разделяне клетката хоризонтално","splitVertical":"Разделяне клетката вертикално","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Редове обединени","colSpan":"Колони обединени","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Заглавие","yes":"Да","no":"Не","invalidWidth":"Ширината на клетката трябва да е число.","invalidHeight":"Височината на клетката трябва да е число.","invalidRowSpan":"Редове обединени трябва да е цяло число.","invalidColSpan":"Колони обединени трябва да е цяло число.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разстояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Заглавия","headersBoth":"И двете","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","heightUnit":"height unit","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е положително число.","invalidCellSpacing":"Интервалът в клетките трябва да е положително число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Поредови стилове","panelTitle3":"Обектни стилове"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"sourcedialog":{"toolbar":"Източник","title":"Източник"},"sourcearea":{"toolbar":"Код"},"showblocks":{"toolbar":"Показва блокове"},"removeformat":{"toolbar":"Премахване на форматирането"},"pastetext":{"button":"Вмъкни като чист текст","pasteNotification":"Натиснете %1 за да поставите. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или контекстното меню.","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"Текстът, който искате да поставите, изглежда е копиран от Word. Искате ли да се почисти преди поставянето?","error":"Вмъкваните данни не могат да бъдат почистени поради вътрешна грешка","title":"Вмъкни от Word","toolbar":"Вмъкни от Word"},"notification":{"closed":"Известието е затворено."},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"magicline":{"title":"Вмъкнете параграф тук"},"list":{"bulletedlist":"Вмъкване/премахване на точков списък","numberedlist":"Вмъкване/премахване на номериран списък"},"language":{"button":"Задай език","remove":"Премахни език"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"image2":{"alt":"Алтернативен текст","btnUpload":"Изпрати на сървъра","captioned":"Надписано изображение","captionPlaceholder":"Надпис","infoTab":"Изображение","lockRatio":"Заключване на съотношението","menu":"Настройки на изображението","pathName":"изображение","pathNameCaption":"надпис","resetSize":"Нулиране на размер","resizer":"Кликни и влачи, за да преоразмериш","title":"Настройки на изображението","uploadTab":"Качване","urlMissing":"URL адреса на изображението липсва.","altMissing":"Липсва алтернативен текст."},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"format":{"label":"Формат","panelTitle":"Формат на параграф","tag_address":"Адрес","tag_div":"Нормален (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"filetools":{"loadError":"Възникна грешка при четене на файла.","networkError":"Възникна мрежова грешка при качването на файла.","httpError404":"Възникна HTTP грешка при качване на файла (404: Файлът не е намерен).","httpError403":"Възникна HTTP грешка при качване на файла (403: Забранено).","httpError":"Възникна HTTP грешка при качване на файла (статус на грешката: %1).","noUrlError":"URL адресът за качване не е дефиниран.","responseError":"Неправилен отговор на сървъра."},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опции на контекстното меню"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни действията по копиране. За целта използвайте клавиатурата (Ctrl+C).","cut":"Отрежи","cutError":"Настройките за сигурност на вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. За целта използвайте клавиатурата (Ctrl+X).","paste":"Вмъкни","pasteNotification":"Натиснете %1 за да вмъкнете. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или от контекстното меню.","pasteArea":"Зона за поставяне","pasteMsg":"Поставете съдържанието в зоната отдолу и натиснете OK."},"blockquote":{"toolbar":"Блок за цитат"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подчертан"},"about":{"copy":"Авторско право © $1. Всички права запазени.","dlgTitle":"Относно CKEditor 4","moreInfo":"За лицензионна информация моля посетете сайта ни:"},"editor":"Редактор за форматиран текст","editorPanel":"Панел на текстовия редактор","common":{"editorHelp":"натиснете ALT+0 за помощ","browseServer":"Избор от сървъра","url":"URL адрес","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Изображение","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за изображение","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"От ляво надясно (LTR)","langDirRtl":"От дясно наляво (RTL)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Най-горният прозорец (_top)","targetSelf":"Текущият прозорец (_self)","targetParent":"Горният прозорец (_parent)","langDirLTR":"От ляво надясно (LTR)","langDirRTL":"От дясно наляво (RTL)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","left":"Ляво","right":"Дясно","center":"Център","justify":"Двустранно","alignLeft":"Подравни ляво","alignRight":"Подравни дясно","alignCenter":"Подравни център","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"Без подравняване","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина трябва да е число.","invalidLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна мерна единица (%2).","invalidCssLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна CSS мерна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна HTML мерна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Клавишна комбинация","optionDefault":"По подразбиране"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/bn.js b/web/core/assets/vendor/ckeditor/lang/bn.js index 086b937733d1e0eb89ae8cfb659051f6693d9eef..86fecd619ed7a4983bf861456aac5ec3f2d455e9 100644 --- a/web/core/assets/vendor/ckeditor/lang/bn.js +++ b/web/core/assets/vendor/ckeditor/lang/bn.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['bn']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"পুনরায় করি","undo":"আনডু"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"বর্ডারের সাইজ","caption":"শীর্ষক","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মুছে দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"পৃষ্ঠতলের রং","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল প্যাডিং","cellSpace":"সেল স্পেস","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মুছে দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল প্রোপার্টি","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মুছে দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল প্রোপার্টি","toolbar":"টেবিলের লেবেল যুক্ত কর","widthPc":"শতকরা","widthPx":"পিক্সেল","widthUnit":"width unit"},"stylescombo":{"label":"ধরন","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"sourcedialog":{"toolbar":"উৎস","title":"সোর্স"},"sourcearea":{"toolbar":"উৎস"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"ধরন-প্রকৃতি অপসারণ করি"},"pastetext":{"button":"সাধারণ টেক্সট হিসেবে পেইস্ট করি","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"সাদা টেক্সট হিসেবে পেস্ট কর"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেস্ট (শব্দ)","toolbar":"পেস্ট (শব্দ)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"বুলেটেড তালিকা প্রবেশ/অপসারন করি","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"ইনডেন্ট বাড়াই","outdent":"ইনডেন্ট কমাও"},"image2":{"alt":"বিকল্প টেক্সট","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ছবির তথ্য","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","pathName":"image","pathNameCaption":"caption","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","resizer":"Click and drag to resize","title":"ছবির প্রোপার্টি","uploadTab":"আপলোড","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"অনুভূমিক লাইন যোগ করি"},"format":{"label":"ধরন-প্রকৃতি","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের নিরাপত্তা সেটিংসমূহ এডিটরকে স্বয়ংক্রিয়ভাবে কপি করার প্রক্রিয়া চালনা করার অনুমতি দেয় না। অনুগ্রহপূর্বক এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"বোল্ড","italic":"বাঁকা","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","flash":"ফ্লাশ লেবেল যুক্ত কর","form":"ফর্ম","checkbox":"চেক বাক্স","radio":"রেডিও বাটন","textField":"টেক্সট ফীল্ড","textarea":"টেক্সট এরিয়া","hiddenField":"গুপ্ত ফীল্ড","button":"বাটন","select":"বাছাই ফীল্ড","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL এর লম্বা বর্ণনা","cssClass":"স্টাইল-শীট ক্লাস","advisoryTitle":"পরামর্শ শীর্ষক","cssStyle":"স্টাইল","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"প্রিভিউ","resize":"Resize","generalTab":"General","advancedTab":"এডভান্সড","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"টার্গেট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"স্টাইল","cssClasses":"স্টাইল-শীট ক্লাস","width":"প্রস্থ","height":"দৈর্ঘ্য","align":"এলাইন","left":"বামে","right":"ডানে","center":"মাঝখানে","justify":"ব্লক জাস্টিফাই","alignLeft":"বা দিকে ঘেঁষা","alignRight":"ডান দিকে ঘেঁষা","alignCenter":"Align Center","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/bs.js b/web/core/assets/vendor/ckeditor/lang/bs.js index 5f980c20a6ed217be7c8d6378aeda826e173ea70..1f76e731eb846c31be9001c28adb330b30937194 100644 --- a/web/core/assets/vendor/ckeditor/lang/bs.js +++ b/web/core/assets/vendor/ckeditor/lang/bs.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['bs']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ponovi","undo":"Vrati"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"sourcedialog":{"toolbar":"HTML kôd","title":"HTML kôd"},"sourcearea":{"toolbar":"HTML kôd"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Poništi format"},"pastetext":{"button":"Zalijepi kao obièan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Zalijepi kao obièan tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"image2":{"alt":"Tekst na slici","btnUpload":"Šalji na server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info slike","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","pathName":"image","pathNameCaption":"caption","resetSize":"Resetuj dimenzije","resizer":"Click and drag to resize","title":"Svojstva slike","uploadTab":"Šalji","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije podešeno>","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","left":"Lijevo","right":"Desno","center":"Centar","justify":"Puno poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ca.js b/web/core/assets/vendor/ckeditor/lang/ca.js index 6b6dc79a8d7f54dbfc65c01eb0fe9bbebe7cee2f..5ccfd578c6b7014d790ff9afac9051897db2dace 100644 --- a/web/core/assets/vendor/ckeditor/lang/ca.js +++ b/web/core/assets/vendor/ckeditor/lang/ca.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ca']={"widget":{"move":"Clicar i arrossegar per moure","label":"%1 widget"},"undo":{"redo":"Refés","undo":"Desfés"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"sourcedialog":{"toolbar":"Codi font","title":"Codi font"},"sourcearea":{"toolbar":"Codi font"},"showblocks":{"toolbar":"Mostra els blocs"},"removeformat":{"toolbar":"Elimina Format"},"pastetext":{"button":"Enganxa com a text no formatat","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Enganxa com a text no formatat"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"notification":{"closed":"Notificació tancada."},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"magicline":{"title":"Insereix el paràgraf aquí"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"language":{"button":"Definir l'idioma","remove":"Eliminar idioma"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"image2":{"alt":"Text alternatiu","btnUpload":"Envia-la al servidor","captioned":"Imatge amb subtítol","captionPlaceholder":"Títol","infoTab":"Informació de la imatge","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","pathName":"imatge","pathNameCaption":"subtítol","resetSize":"Restaura la mida","resizer":"Clicar i arrossegar per redimensionar","title":"Propietats de la imatge","uploadTab":"Puja","urlMissing":"Falta la URL de la imatge.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"filetools":{"loadError":"S'ha produït un error durant la lectura del fitxer.","networkError":"S'ha produït un error de xarxa durant la càrrega del fitxer.","httpError404":"S'ha produït un error HTTP durant la càrrega del fitxer (404: Fitxer no trobat).","httpError403":"S'ha produït un error HTTP durant la càrrega del fitxer (403: Permís denegat).","httpError":"S'ha produït un error HTTP durant la càrrega del fitxer (estat d'error: %1).","noUrlError":"La URL de càrrega no està definida.","responseError":"Resposta incorrecte del servidor"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Àrea d'enganxat","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Bloc de cita"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"about":{"copy":"Copyright © $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor 4","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:"},"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","left":"Ajusta a l'esquerra","right":"Ajusta a la dreta","center":"Centre","justify":"Justificat","alignLeft":"Alinea a l'esquerra","alignRight":"Alinea a la dreta","alignCenter":"Align Center","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"Cap","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retrocés","13":"Intro","16":"Majúscules","17":"Ctrl","18":"Alt","32":"Space","35":"Fi","36":"Inici","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/cs.js b/web/core/assets/vendor/ckeditor/lang/cs.js index fc3d3d62d604540f0b80943e8a19ec2c6167cd4b..083e6ed633ca0e27575b067344710a0e24ee6065 100644 --- a/web/core/assets/vendor/ckeditor/lang/cs.js +++ b/web/core/assets/vendor/ckeditor/lang/cs.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['cs']={"widget":{"move":"Klepněte a táhněte pro přesunutí","label":"Ovládací prvek %1"},"undo":{"redo":"Znovu","undo":"Zpět"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","heightUnit":"height unit","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"sourcearea":{"toolbar":"Zdroj"},"showblocks":{"toolbar":"Ukázat bloky"},"removeformat":{"toolbar":"Odstranit formátování"},"pastetext":{"button":"Vložit jako čistý text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Vložit jako čistý text"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"notification":{"closed":"Oznámení zavřeno."},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"magicline":{"title":"zde vložit odstavec"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"language":{"button":"Nastavit jazyk","remove":"Odstranit jazyk"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"image2":{"alt":"Alternativní text","btnUpload":"Odeslat na server","captioned":"Obrázek s popisem","captionPlaceholder":"Popis","infoTab":"Informace o obrázku","lockRatio":"Zámek","menu":"Vlastnosti obrázku","pathName":"Obrázek","pathNameCaption":"Popis","resetSize":"Původní velikost","resizer":"Klepněte a táhněte pro změnu velikosti","title":"Vlastnosti obrázku","uploadTab":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","altMissing":"Alternativní text chybí."},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"filetools":{"loadError":"Při čtení souboru došlo k chybě.","networkError":"Při nahrávání souboru došlo k chybě v síti.","httpError404":"Při nahrávání souboru došlo k chybě HTTP (404: Soubor nenalezen).","httpError403":"Při nahrávání souboru došlo k chybě HTTP (403: Zakázáno).","httpError":"Při nahrávání souboru došlo k chybě HTTP (chybový stav: %1).","noUrlError":"URL pro nahrání není zadána.","responseError":"Nesprávná odpověď serveru."},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteNotification":"Stiskněte %1 pro vložení. Váš prohlížeč nepodporuje vkládání pomocí tlačítka na panelu nástrojů nebo volby kontextového menu.","pasteArea":"Oblast vkládání","pasteMsg":"Vložte svůj obsah do oblasti níže a stiskněte OK."},"blockquote":{"toolbar":"Citace"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor 4","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:"},"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","left":"Vlevo","right":"Vpravo","center":"Na střed","justify":"Zarovnat do bloku","alignLeft":"Zarovnat vlevo","alignRight":"Zarovnat vpravo","alignCenter":"Zarovnat na střed","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry (%2).","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mezerník","35":"Konec","36":"Domů","46":"Smazat","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová zkratka","optionDefault":"Výchozí"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/cy.js b/web/core/assets/vendor/ckeditor/lang/cy.js index 6e4d4aad5eccdc85022ff53a8597aa65e961dd20..3be32d6a5f20723ea83346e9822b047aa7d158d7 100644 --- a/web/core/assets/vendor/ckeditor/lang/cy.js +++ b/web/core/assets/vendor/ckeditor/lang/cy.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['cy']={"widget":{"move":"Clcio a llusgo i symud","label":"%1 widget"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","heightUnit":"height unit","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"sourcedialog":{"toolbar":"HTML","title":"HTML"},"sourcearea":{"toolbar":"HTML"},"showblocks":{"toolbar":"Dangos Blociau"},"removeformat":{"toolbar":"Tynnu Fformat"},"pastetext":{"button":"Gludo fel testun plaen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Gludo fel Testun Plaen"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"magicline":{"title":"Mewnosod paragraff yma"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"language":{"button":"Gosod iaith","remove":"Tynnu iaith"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"image2":{"alt":"Testun Amgen","btnUpload":"Anfon i'r Gweinydd","captioned":"Delwedd â phennawd","captionPlaceholder":"Caption","infoTab":"Gwyb Delwedd","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","pathName":"delwedd","pathNameCaption":"pennawd","resetSize":"Ailosod Maint","resizer":"Clicio a llusgo i ail-meintio","title":"Priodweddau Delwedd","uploadTab":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Ardal Gludo","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Dyfyniad bloc"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"about":{"copy":"Hawlfraint © $1. Cedwir pob hawl.","dlgTitle":"About CKEditor 4","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:"},"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","left":"Chwith","right":"Dde","center":"Canol","justify":"Unioni","alignLeft":"Alinio i'r Chwith","alignRight":"Alinio i'r Dde","alignCenter":"Align Center","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/da.js b/web/core/assets/vendor/ckeditor/lang/da.js index b416cbfe66499ecf440347df9060fb42ab5e9733..3dfd0545527d0cd8003211e4bed0b7d3dfbd63f0 100644 --- a/web/core/assets/vendor/ckeditor/lang/da.js +++ b/web/core/assets/vendor/ckeditor/lang/da.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.lang['da']={"widget":{"move":"Klik og træk for at flytte","label":"%1 widget"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","heightUnit":"height unit","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"notification":{"closed":"Notefikation lukket."},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"magicline":{"title":"Indsæt afsnit"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"language":{"button":"Vælg sprog","remove":"Fjern sprog"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"image2":{"alt":"Alternativ tekst","btnUpload":"Upload fil til serveren","captioned":"Tekstet billede","captionPlaceholder":"Tekst","infoTab":"Generelt","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","pathName":"billede","pathNameCaption":"tekst","resetSize":"Nulstil størrelse","resizer":"Klik og træk for at ændre størrelsen","title":"Egenskaber for billede","uploadTab":"Upload","urlMissing":"Kilde på billed-URL mangler","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"filetools":{"loadError":"Der skete en fejl ved indlæsningen af filen.","networkError":"Der skete en netværks fejl under uploadingen.","httpError404":"Der skete en HTTP fejl under uploadingen (404: File not found).","httpError403":"Der skete en HTTP fejl under uploadingen (403: Forbidden).","httpError":"Der skete en HTTP fejl under uploadingen (error status: %1).","noUrlError":"Upload URL er ikke defineret.","responseError":"Ikke korrekt server svar."},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteNotification":"Tryk %1 for at sætte ind. Din browser understøtter ikke indsættelse med værktøjslinje knappen eller kontekst menuen.","pasteArea":"Indsættelses område","pasteMsg":"Indsæt dit indhold i området nedenfor og tryk OK."},"blockquote":{"toolbar":"Blokcitat"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"about":{"copy":"Copyright © $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor 4","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","left":"Venstre","right":"Højre","center":"Center","justify":"Lige margener","alignLeft":"Venstrestillet","alignRight":"Højrestillet","alignCenter":"Centreret","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidLength":"Værdien angivet for feltet \"%1\" skal være et positivt heltal med eller uden en gyldig måleenhed (%2).","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>","keyboard":{"8":"Backspace","13":"Retur","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellemrum","35":"Slut","36":"Hjem","46":"Slet","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Tastatur genvej","optionDefault":"Standard"}}; \ No newline at end of file +CKEDITOR.lang['da']={"widget":{"move":"Klik og træk for at flytte","label":"%1 widget"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","heightUnit":"height unit","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"notification":{"closed":"Notefikation lukket."},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"magicline":{"title":"Indsæt afsnit"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"language":{"button":"Vælg sprog","remove":"Fjern sprog"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"image2":{"alt":"Alternativ tekst","btnUpload":"Upload fil til serveren","captioned":"Tekstet billede","captionPlaceholder":"Tekst","infoTab":"Generelt","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","pathName":"billede","pathNameCaption":"tekst","resetSize":"Nulstil størrelse","resizer":"Klik og træk for at ændre størrelsen","title":"Egenskaber for billede","uploadTab":"Upload","urlMissing":"Kilde på billed-URL mangler","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"filetools":{"loadError":"Der skete en fejl ved indlæsningen af filen.","networkError":"Der skete en netværks fejl under uploadingen.","httpError404":"Der skete en HTTP fejl under uploadingen (404: File not found).","httpError403":"Der skete en HTTP fejl under uploadingen (403: Forbidden).","httpError":"Der skete en HTTP fejl under uploadingen (error status: %1).","noUrlError":"Upload URL er ikke defineret.","responseError":"Ikke korrekt server svar."},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen. Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen. Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteNotification":"Tryk %1 for at sætte ind. Din browser understøtter ikke indsættelse med værktøjslinje knappen eller kontekst menuen.","pasteArea":"Indsættelses område","pasteMsg":"Indsæt dit indhold i området nedenfor og tryk OK."},"blockquote":{"toolbar":"Blokcitat"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"about":{"copy":"Copyright © $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor 4","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","left":"Venstre","right":"Højre","center":"Center","justify":"Lige margener","alignLeft":"Venstrestillet","alignRight":"Højrestillet","alignCenter":"Centreret","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidLength":"Værdien angivet for feltet \"%1\" skal være et positivt heltal med eller uden en gyldig måleenhed (%2).","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>","keyboard":{"8":"Backspace","13":"Retur","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellemrum","35":"Slut","36":"Hjem","46":"Slet","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Tastatur genvej","optionDefault":"Standard"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/de-ch.js b/web/core/assets/vendor/ckeditor/lang/de-ch.js index 4be27c0966300fd9fc2be4080e7208f96abfe641..99b907de31ac8e6a19b703e29e08c442a2f9a6b0 100644 --- a/web/core/assets/vendor/ckeditor/lang/de-ch.js +++ b/web/core/assets/vendor/ckeditor/lang/de-ch.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['de-ch']={"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 widget"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"table":{"border":"Rahmengrösse","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zelleneigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand aussen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","heightUnit":"height unit","invalidBorder":"Die Rahmenbreite muss eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muss eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand aussen muss eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß grösser als 0 sein..","invalidHeight":"Die Tabellenbreite muss eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß grösser als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"sourcearea":{"toolbar":"Quellcode"},"showblocks":{"toolbar":"Blöcke anzeigen"},"removeformat":{"toolbar":"Formatierung entfernen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Als Klartext einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus Word einfügen","toolbar":"Aus Word einfügen"},"notification":{"closed":"Benachrichtigung geschlossen."},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"image2":{"alt":"Alternativer Text","btnUpload":"Zum Server senden","captioned":"Bild mit Überschrift","captionPlaceholder":"Überschrift","infoTab":"Bildinfo","lockRatio":"Größenverhältnis beibehalten","menu":"Bildeigenschaften","pathName":"Bild","pathNameCaption":"Überschrift","resetSize":"Grösse zurücksetzen","resizer":"Zum Vergrössern auswählen und ziehen","title":"Bild-Eigenschaften","uploadTab":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"filetools":{"loadError":"Während dem Lesen der Datei ist ein Fehler aufgetreten.","networkError":"Während dem Hochladen der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenüoptionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Einfügebereich","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright © $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schliessen","preview":"Vorschau","resize":"Grösse ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schliessen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Align Center","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Space","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/de.js b/web/core/assets/vendor/ckeditor/lang/de.js index 90c137e6d6c3317ba58a04bcaf9f1eb5561643eb..5bc59ad8fa3ffe63fc68362cb99d28354b250c3d 100644 --- a/web/core/assets/vendor/ckeditor/lang/de.js +++ b/web/core/assets/vendor/ckeditor/lang/de.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['de']={"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"table":{"border":"Rahmengröße","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zelleneigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","heightUnit":"height unit","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"sourcearea":{"toolbar":"Quellcode"},"showblocks":{"toolbar":"Blöcke anzeigen"},"removeformat":{"toolbar":"Formatierung entfernen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Toolbar oder dem Kontextmenü.","title":"Als Klartext einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus Word einfügen","toolbar":"Aus Word einfügen"},"notification":{"closed":"Benachrichtigung geschlossen."},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"image2":{"alt":"Alternativer Text","btnUpload":"Zum Server senden","captioned":"Bild mit Überschrift","captionPlaceholder":"Überschrift","infoTab":"Bildinfo","lockRatio":"Größenverhältnis beibehalten","menu":"Bildeigenschaften","pathName":"Bild","pathNameCaption":"Überschrift","resetSize":"Größe zurücksetzen","resizer":"Zum Vergrößern auswählen und ziehen","title":"Bild-Eigenschaften","uploadTab":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","altMissing":"Alternativer Text fehlt."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"filetools":{"loadError":"Während des Lesens der Datei ist ein Fehler aufgetreten.","networkError":"Während des Hochladens der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenüoptionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Toolbar oder dem Kontextmenü.","pasteArea":"Einfügebereich","pasteMsg":"Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK."},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright © $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Größe ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verloren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Der für das Feld \"%1\" angegebene Wert muss eine positive Zahl mit oder ohne gültige Maßeinheit (%2) sein. ","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leer","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel","optionDefault":"Standard"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/el.js b/web/core/assets/vendor/ckeditor/lang/el.js index 7adf31ecbf834f34694a70ea4aa5dfa0484e7893..6a4ba71fe57278b58efa06074257395c458ef0ea 100644 --- a/web/core/assets/vendor/ckeditor/lang/el.js +++ b/web/core/assets/vendor/ckeditor/lang/el.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['el']={"widget":{"move":"Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε","label":"%1 widget"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"table":{"border":"Πάχος Περιγράμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή Κελιού Πριν","insertAfter":"Εισαγωγή Κελιού Μετά","deleteCell":"Διαγραφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"Οριζόντια Διαίρεση Κελιού","splitVertical":"Κατακόρυφη Διαίρεση Κελιού","title":"Ιδιότητες Κελιού","cellType":"Τύπος Κελιού","rowSpan":"Εύρος Γραμμών","colSpan":"Εύρος Στηλών","wordWrap":"Αναδίπλωση Λέξεων","hAlign":"Οριζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Γραμμή Βάσης","bgColor":"Χρώμα Φόντου","borderColor":"Χρώμα Περιγράμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Ναι","no":"Όχι","invalidWidth":"Το πλάτος του κελιού πρέπει να είναι αριθμός.","invalidHeight":"Το ύψος του κελιού πρέπει να είναι αριθμός.","invalidRowSpan":"Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.","invalidColSpan":"Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.","chooseColor":"Επιλέξτε"},"cellPad":"Αναπλήρωση κελιών","cellSpace":"Απόσταση κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης Πριν","insertAfter":"Εισαγωγή Στήλης Μετά","deleteColumn":"Διαγραφή Στηλών"},"columns":"Στήλες","deleteTable":"Διαγραφή Πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δύο","headersColumn":"Πρώτη στήλη","headersNone":"Κανένα","headersRow":"Πρώτη Γραμμή","heightUnit":"height unit","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"sourcedialog":{"toolbar":"Κώδικας","title":"Κώδικας"},"sourcearea":{"toolbar":"Κώδικας"},"showblocks":{"toolbar":"Προβολή Τμημάτων"},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"language":{"button":"Θέση γλώσσας","remove":"Αφαίρεση γλώσσας"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"image2":{"alt":"Εναλλακτικό Κείμενο","btnUpload":"Αποστολή στον Διακομιστή","captioned":"Εικόνα με λεζάντα","captionPlaceholder":"Λεζάντα","infoTab":"Πληροφορίες Εικόνας","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","pathName":"εικόνα","pathNameCaption":"λεζάντα","resetSize":"Επαναφορά Αρχικού Μεγέθους","resizer":"Κάνετε κλικ και σύρετε το ποντίκι για να αλλάξετε το μέγεθος","title":"Ιδιότητες Εικόνας","uploadTab":"Αποστολή","urlMissing":"Λείπει το πηγαίο URL της εικόνας.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"format":{"label":"Μορφοποίηση","panelTitle":"Μορφοποίηση Παραγράφου","tag_address":"Διεύθυνση","tag_div":"Κανονική (DIV)","tag_h1":"Κεφαλίδα 1","tag_h2":"Κεφαλίδα 2","tag_h3":"Κεφαλίδα 3","tag_h4":"Κεφαλίδα 4","tag_h5":"Κεφαλίδα 5","tag_h6":"Κεφαλίδα 6","tag_p":"Κανονική","tag_pre":"Προ-μορφοποιημένη"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"about":{"copy":"Πνευματικά δικαιώματα © $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor 4","moreInfo":"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:"},"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση Διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Flash","form":"Φόρμα","checkbox":"Κουτί Επιλογής","radio":"Κουμπί Επιλογής","textField":"Πεδίο Κειμένου","textarea":"Περιοχή Κειμένου","hiddenField":"Κρυφό Πεδίο","button":"Κουμπί","select":"Πεδίο Επιλογής","imageButton":"Κουμπί Εικόνας","notSet":"<δεν έχει ρυθμιστεί>","id":"Id","name":"Όνομα","langDir":"Κατεύθυνση Κειμένου","langDirLtr":"Αριστερά προς Δεξιά (LTR)","langDirRtl":"Δεξιά προς Αριστερά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική Περιγραφή URL","cssClass":"Κλάσεις Φύλλων Στυλ","advisoryTitle":"Ενδεικτικός Τίτλος","cssStyle":"Μορφή Κειμένου","ok":"OK","cancel":"Ακύρωση","close":"Κλείσιμο","preview":"Προεπισκόπηση","resize":"Αλλαγή Μεγέθους","generalTab":"Γενικά","advancedTab":"Για Προχωρημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αριθμός.","confirmNewPage":"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;","confirmCancel":"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;","options":"Επιλογές","target":"Προορισμός","targetNew":"Νέο Παράθυρο (_blank)","targetTop":"Αρχική Περιοχή (_top)","targetSelf":"Ίδιο Παράθυρο (_self)","targetParent":"Γονεϊκό Παράθυρο (_parent)","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","styles":"Μορφή","cssClasses":"Κλάσεις Φύλλων Στυλ","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","left":"Αριστερά","right":"Δεξιά","center":"Κέντρο","justify":"Πλήρης Στοίχιση","alignLeft":"Στοίχιση Αριστερά","alignRight":"Στοίχιση Δεξιά","alignCenter":"Align Center","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Κενό","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Εντολή"},"keyboardShortcut":"Συντόμευση πληκτρολογίου","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/en-au.js b/web/core/assets/vendor/ckeditor/lang/en-au.js index dbcc1107f7bef412dab0f6b9a238f2c67ad04be9..7d1d7e5b7b7d1e9e4d78f7f675d024033cc5043a 100644 --- a/web/core/assets/vendor/ckeditor/lang/en-au.js +++ b/web/core/assets/vendor/ckeditor/lang/en-au.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['en-au']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/en-ca.js b/web/core/assets/vendor/ckeditor/lang/en-ca.js index 5366d86bc2ac1645a41eae4ac9cf64c576e452ec..5da3626d2a71d0485d879dac23b1a31f065ad046 100644 --- a/web/core/assets/vendor/ckeditor/lang/en-ca.js +++ b/web/core/assets/vendor/ckeditor/lang/en-ca.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['en-ca']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/en-gb.js b/web/core/assets/vendor/ckeditor/lang/en-gb.js index 5d4716f0f3cd81237df408f3fa138fcbaa9d51e5..bbd040e24707406713a066686733b1ca52620143 100644 --- a/web/core/assets/vendor/ckeditor/lang/en-gb.js +++ b/web/core/assets/vendor/ckeditor/lang/en-gb.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['en-gb']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialogue window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/en.js b/web/core/assets/vendor/ckeditor/lang/en.js index 4acda9a84d81184b38a1fc64fb191708955a8a42..c84b8af00fb92e719baafba4027d60891bd0d02a 100644 --- a/web/core/assets/vendor/ckeditor/lang/en.js +++ b/web/core/assets/vendor/ckeditor/lang/en.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['en']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/eo.js b/web/core/assets/vendor/ckeditor/lang/eo.js index e2e64a495b15925e6ca3e7a3a5b4ea1771b36e93..3df2eb8169e1ca8597a41b6fa7c421f70f698635 100644 --- a/web/core/assets/vendor/ckeditor/lang/eo.js +++ b/web/core/assets/vendor/ckeditor/lang/eo.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['eo']={"widget":{"move":"klaki kaj treni por movi","label":"%1 fenestraĵo"},"undo":{"redo":"Refari","undo":"Malfari"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"Poŝo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon Antaŭ","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala ĝisrandigo","vAlign":"Vertikala ĝisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paĝotitolo","yes":"Jes","no":"No","invalidWidth":"Ĉellarĝo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna Marĝeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaŭ","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj Paĝotitoloj","headersBoth":"Ambaŭ","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","heightUnit":"height unit","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarĝo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaŭ","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larĝo"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"sourcedialog":{"toolbar":"Fonto","title":"Fonto"},"sourcearea":{"toolbar":"Fonto"},"showblocks":{"toolbar":"Montri la blokojn"},"removeformat":{"toolbar":"Forigi Formaton"},"pastetext":{"button":"Interglui kiel platan tekston","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Interglui kiel platan tekston"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"notification":{"closed":"Sciigo fermita"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"language":{"button":"Instali lingvon","remove":"Forigi lingvon"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"image2":{"alt":"Anstataŭiga Teksto","btnUpload":"Sendu al Servilo","captioned":"Bildo kun apudskribo","captionPlaceholder":"Apudskribo","infoTab":"Informoj pri Bildo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","pathName":"bildo","pathNameCaption":"apudskribo","resetSize":"Origina Grando","resizer":"Kliki kaj treni por ŝanĝi la grandon","title":"Atributoj de Bildo","uploadTab":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","altMissing":"Alternativa teksto mankas."},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"filetools":{"loadError":"Eraro okazis dum la dosiera legado.","networkError":"Reta eraro okazis dum la dosiera alŝuto.","httpError404":"HTTP eraro okazis dum la dosiera alŝuto (404: dosiero ne trovita).","httpError403":"HTTP eraro okazis dum la dosiera alŝuto (403: malpermesita).","httpError":"HTTP eraro okazis dum la dosiera alŝuto (erara stato: %1).","noUrlError":"Alŝuta URL ne estas difinita.","responseError":"Malĝusta respondo de la servilo."},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Intergluoareo","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citaĵo"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"about":{"copy":"Copyright © $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor 4","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:"},"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"Alŝuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"Flaŝo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"Kaŝita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"<Defaŭlta>","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ŝanĝi la grandon","generalTab":"Ĝenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?","confirmCancel":"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"Larĝo","height":"Alto","align":"Ĝisrandigo","left":"Maldekstre","right":"Dekstre","center":"Centre","justify":"Ĝisrandigi Ambaŭflanke","alignLeft":"Ĝisrandigi maldekstren","alignRight":"Ĝisrandigi dekstren","alignCenter":"Align Center","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"Neniu","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nehavebla</span>","keyboard":{"8":"Retropaŝo","13":"Enigi","16":"Registrumo","17":"Stirklavo","18":"Alt-klavo","32":"Spaco","35":"Fino","36":"Hejmo","46":"Forigi","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komando"},"keyboardShortcut":"Fulmoklavo","optionDefault":"Defaŭlta"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/es-mx.js b/web/core/assets/vendor/ckeditor/lang/es-mx.js index a5f08ffa4bac2cbc84c54f1419fa58bd7f977ba0..6ec08c866b638a692554f0346e6803444a5b7f40 100644 --- a/web/core/assets/vendor/ckeditor/lang/es-mx.js +++ b/web/core/assets/vendor/ckeditor/lang/es-mx.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['es-mx']={"widget":{"move":"Presiona y arrastra para mover","label":"%1 widget"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Colapsar barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/deshacer","editing":"Editando","forms":"Formularios","basicstyles":"Estilo básico","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Editor de barra de herramientas"},"table":{"border":"Tamaño del borde","caption":"Subtítulo","cell":{"menu":"Celda","insertBefore":"Insertar una celda antes","insertAfter":"Insertar una celda despues","deleteCell":"Borrar celdas","merge":"Unir celdas","mergeRight":"Unir a la derecha","mergeDown":"Unir abajo","splitHorizontal":"Dividir celda horizontalmente","splitVertical":"Dividir celda verticalmente","title":"Propiedades de la celda","cellType":"Tipo de celda","rowSpan":"Extensión de las filas","colSpan":"Extensión de las columnas","wordWrap":"Ajuste de línea","hAlign":"Alineación horizontal","vAlign":"Alineación vertical","alignBaseline":"Base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Si","no":"No","invalidWidth":"El ancho de la celda debe ser un número entero.","invalidHeight":"El alto de la celda debe ser un número entero.","invalidRowSpan":"El intervalo de filas debe ser un número entero.","invalidColSpan":"El intervalo de columnas debe ser un número entero.","chooseColor":"Escoger"},"cellPad":"relleno de celda","cellSpace":"Espacio de celda","column":{"menu":"Columna","insertBefore":"Insertar columna antes","insertAfter":"Insertar columna después","deleteColumn":"Borrar columnas"},"columns":"Columnas","deleteTable":"Borrar tabla","headers":"Encabezados","headersBoth":"Ambos","headersColumn":"Primera columna","headersNone":"Ninguna","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El tamaño del borde debe ser un número entero.","invalidCellPadding":"El relleno de la celda debe ser un número positivo.","invalidCellSpacing":"El espacio de la celda debe ser un número positivo.","invalidCols":"El número de columnas debe ser un número mayo que 0.","invalidHeight":"La altura de la tabla debe ser un número.","invalidRows":"El número de filas debe ser mayor a 0.","invalidWidth":"El ancho de la tabla debe ser un número.","menu":"Propiedades de la tabla","row":{"menu":"Fila","insertBefore":"Inserta una fila antes","insertAfter":"Inserta una fila después","deleteRow":"Borrar filas"},"rows":"Filas","summary":"Resumen","title":"Propiedades de la tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"Unidad de ancho"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatos","panelTitle1":"Estilos de bloques","panelTitle2":"Estilos de líneas","panelTitle3":"Estilo de objetos"},"specialchar":{"options":"Opciones de carácteres especiales","title":"Seleccione un carácter especial","toolbar":"Inserta un carácter especial"},"sourcedialog":{"toolbar":"Fuente","title":"Fuente"},"sourcearea":{"toolbar":"Fuente"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Remover formato"},"pastetext":{"button":"Pegar como texto plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"El texto que desea pegar parece estar copiado de Word. ¿Quieres limpiarlo antes de pegarlo?","error":"No fue posible limpiar los datos pegados debido a un error interno","title":"Pegar desde word","toolbar":"Pegar desde word"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar un párrafo aquí"},"list":{"bulletedlist":"Insertar/Remover Lista con viñetas","numberedlist":"Insertar/Remover Lista numerada"},"language":{"button":"Establecer idioma","remove":"Remover idioma"},"indent":{"indent":"Incrementar sangría","outdent":"Decrementar sangría"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar al servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Subtítulo","infoTab":"Información de la imagen","lockRatio":"Bloquear aspecto","menu":"Propiedades de la imagen","pathName":"imagen","pathNameCaption":"subtítulo","resetSize":"Reiniciar tamaño","resizer":"Presiona y arrastra para redimensionar","title":"Propiedades de imagen","uploadTab":"Cargar","urlMissing":"Falta la URL de origen de la imagen.","altMissing":"Falta texto alternativo."},"horizontalrule":{"toolbar":"Insertar una línea horizontal"},"format":{"label":"Formato","panelTitle":"Formato de párrafo","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formateado"},"filetools":{"loadError":"Ha ocurrido un error al leer el archivo","networkError":"Ha ocurrido un error de red durante la carga del archivo.","httpError404":"Se ha producido un error HTTP durante la subida de archivos (404: archivo no encontrado).","httpError403":"Se ha producido un error HTTP durante la subida de archivos (403: Prohibido).","httpError":"Se ha producido un error HTTP durante la subida de archivos (error: %1).","noUrlError":"La URL de subida no está definida.","responseError":"Respuesta incorrecta del servidor."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de copiado. Por favor, utilice el teclado para (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de corte. Por favor, utilice el teclado para (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Entrecomillado"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"subíndice","superscript":"Sobrescrito","underline":"Subrayada"},"about":{"copy":"Derechos reservados © $1. Todos los derechos reservados","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información sobre la licencia por favor visita nuestro sitio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Panel del editor de texto","common":{"editorHelp":"Presiona ALT + 0 para ayuda","browseServer":"Examinar servidor","url":"URL","protocol":"Protocolo","upload":"Subir","uploadSubmit":"Enviar al servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de verificación","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botón","select":"Campo de selección","imageButton":"Botón de imagen","notSet":"<not set>","id":"Id","name":"Nombre","langDir":"Dirección de idiomas","langDirLtr":"Izquierda a derecha (LTR)","langDirRtl":"Derecha a izquierda (RTL)","langCode":"Código de lenguaje","longDescr":"URL descripción larga","cssClass":"Clases de hoja de estilo","advisoryTitle":"Título del anuncio","cssStyle":"Estilo","ok":"OK","cancel":"Cancelar","close":"Cerrar","preview":"Vista previa","resize":"Redimensionar","generalTab":"General","advancedTab":"Avanzada","validateNumberFailed":"Este valor no es un número.","confirmNewPage":"Se perderán todos los cambios no guardados en este contenido. ¿Seguro que quieres cargar nueva página?","confirmCancel":"Ha cambiado algunas opciones. ¿Está seguro de que desea cerrar la ventana de diálogo?","options":"Opciones","target":"Objetivo","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana superior (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana principal (_parent)","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","styles":"Estilo","cssClasses":"Clases de hojas de estilo","width":"Ancho","height":"Alto","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a la izquierda","alignRight":"Alinear a la derecha","alignCenter":"Align Center","alignTop":"Arriba","alignMiddle":"En medio","alignBottom":"Abajo","alignNone":"Ninguno","invalidValue":"Valor inválido","invalidHeight":"La altura debe ser un número.","invalidWidth":"La anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medición HTML válida (px or %).","invalidInlineStyle":"El valor especificado para el estilo en línea debe constar de una o más tuplas con el formato de \"nombre: valor\", separados por punto y coma","cssLengthTooltip":"Introduzca un número para un valor en píxeles o un número con una unidad CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retroceso","13":"Intro","16":"Shift","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Borrar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajo de teclado","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/es.js b/web/core/assets/vendor/ckeditor/lang/es.js index 99af9a2c518b7acdf6c0c972c41d8caadecfaedd..2880beaeb00619b35384825dbe11f1fe1569a54c 100644 --- a/web/core/assets/vendor/ckeditor/lang/es.js +++ b/web/core/assets/vendor/ckeditor/lang/es.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.lang['es']={"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"sourcedialog":{"toolbar":"Fuente HTML","title":"Fuente HTML"},"sourcearea":{"toolbar":"Fuente HTML"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Pegar como Texto Plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar párrafo aquí"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar al Servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Leyenda","infoTab":"Información de Imagen","lockRatio":"Proporcional","menu":"Propiedades de Imagen","pathName":"image","pathNameCaption":"subtítulo","resetSize":"Tamaño Original","resizer":"Dar clic y arrastrar para cambiar tamaño","title":"Propiedades de Imagen","uploadTab":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"filetools":{"loadError":"Ha ocurrido un error durante la lectura del archivo.","networkError":"Error de red ocurrido durante carga de archivo.","httpError404":"Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).","httpError403":"Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).","httpError":"Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).","noUrlError":"URL cargada no está definida.","responseError":"Respueta del servidor incorrecta."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Zona de pegado","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"about":{"copy":"Copyright © $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a Izquierda","alignRight":"Alinear a Derecha","alignCenter":"Align Center","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Space","35":"Fin","36":"Inicio","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file +CKEDITOR.lang['es']={"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"sourcedialog":{"toolbar":"Fuente HTML","title":"Fuente HTML"},"sourcearea":{"toolbar":"Fuente HTML"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Pegar como Texto Plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar párrafo aquí"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar al Servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Leyenda","infoTab":"Información de Imagen","lockRatio":"Proporcional","menu":"Propiedades de Imagen","pathName":"image","pathNameCaption":"subtítulo","resetSize":"Tamaño Original","resizer":"Dar clic y arrastrar para cambiar tamaño","title":"Propiedades de Imagen","uploadTab":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"filetools":{"loadError":"Ha ocurrido un error durante la lectura del archivo.","networkError":"Error de red ocurrido durante carga de archivo.","httpError404":"Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).","httpError403":"Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).","httpError":"Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).","noUrlError":"URL cargada no está definida.","responseError":"Respueta del servidor incorrecta."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Zona de pegado","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"about":{"copy":"Copyright © $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:"},"editor":"Editor de Texto Enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a Izquierda","alignRight":"Alinear a Derecha","alignCenter":"Centrar","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo opcionalmente una unidad de medida válida (%2).","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajos de teclado","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/et.js b/web/core/assets/vendor/ckeditor/lang/et.js index c4c9fcd4a3ea816bf8e7221b0de0a00ba800ba41..fd3b63f6ba839ce79ea327741c628f69e53c3fdc 100644 --- a/web/core/assets/vendor/ckeditor/lang/et.js +++ b/web/core/assets/vendor/ckeditor/lang/et.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['et']={"widget":{"move":"Liigutamiseks klõpsa ja lohista","label":"%1 vidin"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","heightUnit":"height unit","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"sourcedialog":{"toolbar":"Lähtekood","title":"Lähtekood"},"sourcearea":{"toolbar":"Lähtekood"},"showblocks":{"toolbar":"Blokkide näitamine"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"pastetext":{"button":"Asetamine tavalise tekstina","pasteNotification":"Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.","title":"Asetamine tavalise tekstina"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"notification":{"closed":"Teavitused on suletud."},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"magicline":{"title":"Sisesta siia lõigu tekst"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"language":{"button":"Määra keel","remove":"Eemalda keel"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"image2":{"alt":"Alternatiivne tekst","btnUpload":"Saada serverisse","captioned":"Pealkirjaga pilt","captionPlaceholder":"Pealkiri","infoTab":"Pildi info","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","pathName":"pilt","pathNameCaption":"pealkiri","resetSize":"Lähtesta suurus","resizer":"Suuruse muutmiseks klõpsa ja lohista","title":"Pildi omadused","uploadTab":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","altMissing":"Alternatiivtekst puudub."},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"filetools":{"loadError":"Faili lugemisel esines viga.","networkError":"Faili üleslaadimisel esines võrgu viga.","httpError404":"Faili üleslaadimisel esines HTTP viga (404: faili ei leitud).","httpError403":"Faili üleslaadimisel esines HTTP viga (403: keelatud).","httpError":"Faili üleslaadimisel esines HTTP viga (veakood: %1).","noUrlError":"Üleslaadimise URL ei ole määratud.","responseError":"Vigane serveri vastus."},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"contextmenu":{"options":"Kontekstimenüü valikud"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteNotification":"Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.","pasteArea":"Asetamise ala","pasteMsg":"Aseta sisu alumisse kasti ja vajuta OK nupule."},"blockquote":{"toolbar":"Blokktsitaat"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"about":{"copy":"Copyright © $1. Kõik õigused kaitstud.","dlgTitle":"CKEditor 4st lähemalt","moreInfo":"Litsentsi andmed leiab meie veebilehelt:"},"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","left":"Vasak","right":"Paremale","center":"Kesk","justify":"Rööpjoondus","alignLeft":"Vasakjoondus","alignRight":"Paremjoondus","alignCenter":"Keskjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"Pole","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidLength":"Välja \"%1\" väärtus peab olema positiivne arv korrektse ühikuga (%2) või ilma.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tühik","35":"End","36":"Home","46":"Kustuta","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Kiirklahv","optionDefault":"Vaikeväärtus"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/eu.js b/web/core/assets/vendor/ckeditor/lang/eu.js index eaa497468a984dc0e3267366e17ee1ca63b365a3..777024401dcac3ce24ad769d35b70c453acd1895 100644 --- a/web/core/assets/vendor/ckeditor/lang/eu.js +++ b/web/core/assets/vendor/ckeditor/lang/eu.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['eu']={"widget":{"move":"Klikatu eta arrastatu lekuz aldatzeko","label":"%1 widget"},"undo":{"redo":"Berregin","undo":"Desegin"},"toolbar":{"toolbarCollapse":"Tolestu tresna-barra","toolbarExpand":"Zabaldu tresna-barra","toolbarGroups":{"document":"Dokumentua","clipboard":"Arbela/Desegin","editing":"Editatu","forms":"Formularioak","basicstyles":"Oinarrizko estiloak","paragraph":"Paragrafoa","links":"Estekak","insert":"Txertatu","styles":"Estiloak","colors":"Koloreak","tools":"Tresnak"},"toolbars":"Editorearen tresna-barrak"},"table":{"border":"Ertzaren zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu gelaxka aurretik","insertAfter":"Txertatu gelaxka ondoren","deleteCell":"Ezabatu gelaxkak","merge":"Batu gelaxkak","mergeRight":"Batu eskuinetara","mergeDown":"Batu behera","splitHorizontal":"Banatu gelaxka horizontalki","splitVertical":"Banatu gelaxka bertikalki","title":"Gelaxkaren propietateak","cellType":"Gelaxka-mota","rowSpan":"Errenkaden hedadura","colSpan":"Zutabeen hedadura","wordWrap":"Itzulbira","hAlign":"Lerrokatze horizontala","vAlign":"Lerrokatze bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Atzeko planoaren kolorea","borderColor":"Ertzaren kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Errenkaden hedadura zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedadura zenbaki osoa izan behar da.","chooseColor":"Aukeratu"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu zutabea aurretik","insertAfter":"Txertatu zutabea ondoren","deleteColumn":"Ezabatu zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen errenkada","heightUnit":"height unit","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Errenkada kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen propietateak","row":{"menu":"Errenkada","insertBefore":"Txertatu errenkada aurretik","insertAfter":"Txertatu errenkada ondoren","deleteRow":"Ezabatu errenkadak"},"rows":"Errenkadak","summary":"Laburpena","title":"Taularen propietateak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"stylescombo":{"label":"Estiloak","panelTitle":"Formatu estiloak","panelTitle1":"Bloke estiloak","panelTitle2":"Lineako estiloak","panelTitle3":"Objektu estiloak"},"specialchar":{"options":"Karaktere berezien aukerak","title":"Hautatu karaktere berezia","toolbar":"Txertatu karaktere berezia"},"sourcedialog":{"toolbar":"Iturburua","title":"Iturburua"},"sourcearea":{"toolbar":"Iturburua"},"showblocks":{"toolbar":"Erakutsi blokeak"},"removeformat":{"toolbar":"Kendu formatua"},"pastetext":{"button":"Itsatsi testu arrunta bezala","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Itsatsi testu arrunta bezala"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Word-etik kopiatua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barne-errore bat dela eta ezin izan da itsatsitako testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"notification":{"closed":"Jakinarazpena itxita."},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"magicline":{"title":"Txertatu paragrafoa hemen"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"language":{"button":"Ezarri hizkuntza","remove":"Kendu hizkuntza"},"indent":{"indent":"Handitu koska","outdent":"Txikitu koska"},"image2":{"alt":"Ordezko testua","btnUpload":"Bidali zerbitzarira","captioned":"Argazki oina","captionPlaceholder":"Argazki oina","infoTab":"Irudiaren informazioa","lockRatio":"Blokeatu erlazioa","menu":"Irudiaren propietateak","pathName":"Irudia","pathNameCaption":"Argazki oina","resetSize":"Berrezarri tamaina","resizer":"Klikatu eta arrastatu tamainaz aldatzeko","title":"Irudiaren propietateak","uploadTab":"Kargatu","urlMissing":"Irudiaren iturburuaren URLa falta da.","altMissing":"Ordezko testua falta da."},"horizontalrule":{"toolbar":"Txertatu marra horizontala"},"format":{"label":"Formatua","panelTitle":"Paragrafoaren formatua","tag_address":"Helbidea","tag_div":"Normala (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Normala","tag_pre":"Formatuduna"},"filetools":{"loadError":"Errorea gertatu da fitxategia irakurtzean.","networkError":"Sareko errorea gertatu da fitxategia kargatzean.","httpError404":"HTTP errorea gertatu da fitxategia kargatzean (404: Fitxategia ez da aurkitu).","httpError403":"HTTP errorea gertatu da fitxategia kargatzean (403: Debekatuta).","httpError":"HTTP errorea gertatu da fitxategia kargatzean (errore-egoera: %1).","noUrlError":"Kargatzeko URLa definitu gabe.","responseError":"Zerbitzariaren erantzun okerra."},"elementspath":{"eleLabel":"Elementuen bidea","eleTitle":"%1 elementua"},"contextmenu":{"options":"Testuinguru-menuaren aukerak"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki kopiatzea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki moztea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Itsasteko area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Aipamen blokea"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indizea","superscript":"Goi-indizea","underline":"Azpimarratu"},"about":{"copy":"Copyright © $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor 4ri buruz","moreInfo":"Lizentziari buruzko informazioa gure webgunean:"},"editor":"Testu aberastuaren editorea","editorPanel":"Testu aberastuaren editorearen panela","common":{"editorHelp":"Sakatu ALT 0 laguntza jasotzeko","browseServer":"Arakatu zerbitzaria","url":"URLa","protocol":"Protokoloa","upload":"Kargatu","uploadSubmit":"Bidali zerbitzarira","image":"Irudia","flash":"Flash","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu-eremua","textarea":"Testu-area","hiddenField":"Ezkutuko eremua","button":"Botoia","select":"Hautespen-eremua","imageButton":"Irudi-botoia","notSet":"<ezarri gabe>","id":"Id","name":"Izena","langDir":"Hizkuntzaren norabidea","langDirLtr":"Ezkerretik eskuinera (LTR)","langDirRtl":"Eskuinetik ezkerrera (RTL)","langCode":"Hizkuntzaren kodea","longDescr":"URLaren deskribapen luzea","cssClass":"Estilo-orriko klaseak","advisoryTitle":"Aholkatutako izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Aldatu tamainaz","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu dituzu. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Helburua","targetNew":"Leiho berria (_blank)","targetTop":"Goieneko leihoan (_top)","targetSelf":"Leiho berean (_self)","targetParent":"Leiho gurasoan (_parent)","langDirLTR":"Ezkerretik eskuinera (LTR)","langDirRTL":"Eskuinetik ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatzea","left":"Ezkerrean","right":"Eskuinean","center":"Erdian","justify":"Justifikatu","alignLeft":"Lerrokatu ezkerrean","alignRight":"Lerrokatu eskuinean","alignCenter":"Align Center","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"Bat ere ez","invalidValue":"Balio desegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, CSS neurri unitate batekin edo gabe (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, HTML neurri unitate batekin edo gabe (px edo %).","invalidInlineStyle":"Lineako estiloan zehaztutako balioak \"izen : balio\" formatuko tupla bat edo gehiago izan behar dira, komaz bereiztuak.","cssLengthTooltip":"Sartu zenbaki bat edo zenbaki bat baliozko CSS unitate batekin (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>","keyboard":{"8":"Atzera tekla","13":"Sartu","16":"Maius","17":"Ktrl","18":"Alt","32":"Zuriunea","35":"Buka","36":"Etxea","46":"Ezabatu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komandoa"},"keyboardShortcut":"Laster-tekla","optionDefault":"Lehenetsia"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/fa.js b/web/core/assets/vendor/ckeditor/lang/fa.js index c860f5319a61a0826380faf24e5e4121c64a4c58..e92a20bea465b29f0c17ae5a05fd3306676b05e5 100644 --- a/web/core/assets/vendor/ckeditor/lang/fa.js +++ b/web/core/assets/vendor/ckeditor/lang/fa.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.lang['fa']={"widget":{"move":"کلیک و کشیدن برای جابجایی","label":"ابزارک %1"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرمها","basicstyles":"سبکهای پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبکها","colors":"رنگها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایشگر"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","heightUnit":"height unit","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"specialchar":{"options":"گزینههای نویسههای ویژه","title":"گزینش نویسهی ویژه","toolbar":"گنجاندن نویسهی ویژه"},"sourcedialog":{"toolbar":"منبع","title":"منبع"},"sourcearea":{"toolbar":"منبع"},"showblocks":{"toolbar":"نمایش بلوکها"},"removeformat":{"toolbar":"برداشتن فرمت"},"pastetext":{"button":"چسباندن به عنوان متن ساده","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"notification":{"closed":"آگاهسازی بسته شد"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"magicline":{"title":"قرار دادن بند در اینجا"},"list":{"bulletedlist":"فهرست نقطهای","numberedlist":"فهرست شمارهدار"},"language":{"button":"تعیین زبان","remove":"حذف زبان"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"image2":{"alt":"متن جایگزین","btnUpload":"به سرور بفرست","captioned":"تصویر زیرنویس شده","captionPlaceholder":"عنوان","infoTab":"اطلاعات تصویر","lockRatio":"قفل کردن نسبت","menu":"ویژگیهای تصویر","pathName":"تصویر","pathNameCaption":"عنوان","resetSize":"بازنشانی اندازه","resizer":"کلیک و کشیدن برای تغییر اندازه","title":"ویژگیهای تصویر","uploadTab":"بالاگذاری","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","altMissing":"متن جایگزین یافت نشد."},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالبدار"},"filetools":{"loadError":"هنگام خواندن فایل، خطایی رخ داد.","networkError":"هنگام آپلود فایل خطای شبکه رخ داد.","httpError404":"هنگام آپلود فایل خطای HTTP رخ داد (404: فایل یافت نشد).","httpError403":"هنگام آپلود فایل، خطای HTTP رخ داد (403: ممنوع).","httpError":"خطای HTTP در آپلود فایل رخ داده است (وضعیت خطا: %1).","noUrlError":"آدرس آپلود تعریف نشده است.","responseError":"پاسخ نادرست سرور."},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"contextmenu":{"options":"گزینههای منوی زمینه"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"محل چسباندن","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"بلوک نقل قول"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خطخورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخطدار"},"about":{"copy":"حق نشر © $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:"},"editor":"ویرایشگر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرستنمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"چکباکس","radio":"دکمهی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینهای","imageButton":"دکمهی تصویری","notSet":"<تعییننشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاسهای شیوهنامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیشنمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیشرفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شدهی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینهها تغییر کردهاند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینهها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاسهای سبکنامه","width":"عرض","height":"طول","align":"چینش","left":"چپ","right":"راست","center":"وسط","justify":"بلوک چین","alignLeft":"چپ چین","alignRight":"راست چین","alignCenter":"مرکز قرار بده","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری معتبر (\"%2\") باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درونخطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>","keyboard":{"8":"عقبگرد","13":"ورود","16":"تعویض","17":"کنترل","18":"دگرساز","32":"فاصله","35":"پایان","36":"خانه","46":"حذف","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فرمان"},"keyboardShortcut":"میانبر صفحه کلید","optionDefault":"پیش فرض"}}; \ No newline at end of file +CKEDITOR.lang['fa']={"widget":{"move":"کلیک و کشیدن برای جابجایی","label":"ابزارک %1"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرمها","basicstyles":"سبکهای پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبکها","colors":"رنگها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایشگر"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","heightUnit":"height unit","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"specialchar":{"options":"گزینههای نویسههای ویژه","title":"گزینش نویسهی ویژه","toolbar":"گنجاندن نویسهی ویژه"},"sourcedialog":{"toolbar":"منبع","title":"منبع"},"sourcearea":{"toolbar":"منبع"},"showblocks":{"toolbar":"نمایش بلوکها"},"removeformat":{"toolbar":"برداشتن فرمت"},"pastetext":{"button":"چسباندن به عنوان متن ساده","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"notification":{"closed":"آگاهسازی بسته شد"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"magicline":{"title":"قرار دادن بند در اینجا"},"list":{"bulletedlist":"فهرست نقطهای","numberedlist":"فهرست شمارهدار"},"language":{"button":"تعیین زبان","remove":"حذف زبان"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"image2":{"alt":"متن جایگزین","btnUpload":"به سرور بفرست","captioned":"تصویر زیرنویس شده","captionPlaceholder":"عنوان","infoTab":"اطلاعات تصویر","lockRatio":"قفل کردن نسبت","menu":"ویژگیهای تصویر","pathName":"تصویر","pathNameCaption":"عنوان","resetSize":"بازنشانی اندازه","resizer":"کلیک و کشیدن برای تغییر اندازه","title":"ویژگیهای تصویر","uploadTab":"بالاگذاری","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","altMissing":"متن جایگزین یافت نشد."},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالبدار"},"filetools":{"loadError":"هنگام خواندن فایل، خطایی رخ داد.","networkError":"هنگام آپلود فایل خطای شبکه رخ داد.","httpError404":"هنگام آپلود فایل خطای HTTP رخ داد (404: فایل یافت نشد).","httpError403":"هنگام آپلود فایل، خطای HTTP رخ داد (403: ممنوع).","httpError":"خطای HTTP در آپلود فایل رخ داده است (وضعیت خطا: %1).","noUrlError":"آدرس آپلود تعریف نشده است.","responseError":"پاسخ نادرست سرور."},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"contextmenu":{"options":"گزینههای منوی زمینه"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteNotification":"1% را فشاردهید تا قرار داده شود. مرورگر شما از قراردهی با دکمه نوارابزار یا گزینه منوی زمینه پشتیبانی نمیکند","pasteArea":"محل چسباندن","pasteMsg":"محتوای خود را در ناحیه زیر قرار دهید و OK را فشار دهید"},"blockquote":{"toolbar":"بلوک نقل قول"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خطخورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخطدار"},"about":{"copy":"حق نشر © $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:"},"editor":"ویرایشگر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرستنمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"چکباکس","radio":"دکمهی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینهای","imageButton":"دکمهی تصویری","notSet":"<تعییننشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاسهای شیوهنامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیشنمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیشرفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شدهی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینهها تغییر کردهاند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینهها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاسهای سبکنامه","width":"عرض","height":"طول","align":"چینش","left":"چپ","right":"راست","center":"وسط","justify":"بلوک چین","alignLeft":"چپ چین","alignRight":"راست چین","alignCenter":"مرکز قرار بده","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری معتبر (\"%2\") باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درونخطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>","keyboard":{"8":"عقبگرد","13":"ورود","16":"تعویض","17":"کنترل","18":"دگرساز","32":"فاصله","35":"پایان","36":"خانه","46":"حذف","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فرمان"},"keyboardShortcut":"میانبر صفحه کلید","optionDefault":"پیش فرض"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/fi.js b/web/core/assets/vendor/ckeditor/lang/fi.js index 84b051b0319a4008e7a0d04f6bc6ff39b59d3d22..6dedd5748c7f2c51fa67d8d6847b20b707471099 100644 --- a/web/core/assets/vendor/ckeditor/lang/fi.js +++ b/web/core/assets/vendor/ckeditor/lang/fi.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['fi']={"widget":{"move":"Siirrä klikkaamalla ja raahaamalla","label":"%1 widget"},"undo":{"redo":"Toista","undo":"Kumoa"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","heightUnit":"height unit","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"sourcedialog":{"toolbar":"Koodi","title":"Koodi"},"sourcearea":{"toolbar":"Koodi"},"showblocks":{"toolbar":"Näytä elementit"},"removeformat":{"toolbar":"Poista muotoilu"},"pastetext":{"button":"Liitä tekstinä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"magicline":{"title":"Lisää kappale tähän."},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"language":{"button":"Aseta kieli","remove":"Poista kieli"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"image2":{"alt":"Vaihtoehtoinen teksti","btnUpload":"Lähetä palvelimelle","captioned":"Kuva kuvatekstillä","captionPlaceholder":"Kuvateksti","infoTab":"Kuvan tiedot","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","pathName":"kuva","pathNameCaption":"kuvateksti","resetSize":"Alkuperäinen koko","resizer":"Klikkaa ja raahaa muuttaaksesi kokoa","title":"Kuvan ominaisuudet","uploadTab":"Lisää tiedosto","urlMissing":"Kuvan lähdeosoite puuttuu.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Leikealue","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Lainaus"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"about":{"copy":"Copyright © $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:"},"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","left":"Vasemmalle","right":"Oikealle","center":"Keskelle","justify":"Tasaa molemmat reunat","alignLeft":"Tasaa vasemmat reunat","alignRight":"Tasaa oikeat reunat","alignCenter":"Align Center","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/fo.js b/web/core/assets/vendor/ckeditor/lang/fo.js index a5971cf9f6f3d0e2791830b6b592fe011c1b408c..031e7be5768c9ae67d68bec4e654bc00909cab2e 100644 --- a/web/core/assets/vendor/ckeditor/lang/fo.js +++ b/web/core/assets/vendor/ckeditor/lang/fo.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['fo']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Vend aftur","undo":"Angra"},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","heightUnit":"height unit","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"sourcedialog":{"toolbar":"Kelda","title":"Kelda"},"sourcearea":{"toolbar":"Kelda"},"showblocks":{"toolbar":"Vís blokkar"},"removeformat":{"toolbar":"Strika sniðgeving"},"pastetext":{"button":"Innrita som reinan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Innrita som reinan tekst"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"language":{"button":"Velja tungumál","remove":"Remove language"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"image2":{"alt":"Alternativur tekstur","btnUpload":"Send til ambætaran","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Myndaupplýsingar","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","pathName":"image","pathNameCaption":"caption","resetSize":"Upprunastødd","resizer":"Click and drag to resize","title":"Myndaeginleikar","uploadTab":"Send til ambætaran","urlMissing":"URL til mynd manglar.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Avritingarumráði","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"Um CKEditor 4","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"<ikki sett>","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýs","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","left":"Vinstra","right":"Høgra","center":"Miðsett","justify":"Javnir tekstkantar","alignLeft":"Vinstrasett","alignRight":"Høgrasett","alignCenter":"Align Center","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"Eingin","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikki tøkt</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/fr-ca.js b/web/core/assets/vendor/ckeditor/lang/fr-ca.js index 0c00dea378d27c4c49b28d71baf04ac3d760d2fd..a2c620275d6cef74c0f0fd6a48a137b6d2e14195 100644 --- a/web/core/assets/vendor/ckeditor/lang/fr-ca.js +++ b/web/core/assets/vendor/ckeditor/lang/fr-ca.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['fr-ca']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Refaire","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de cellule doit être un nombre.","invalidHeight":"La hauteur de cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","heightUnit":"height unit","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Afficher les blocs"},"removeformat":{"toolbar":"Supprimer le formatage"},"pastetext":{"button":"Coller comme texte","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"magicline":{"title":"Insérer le paragraphe ici"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image2":{"alt":"Texte alternatif","btnUpload":"Envoyer sur le serveur","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Informations sur l'image2","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image2","pathName":"image","pathNameCaption":"caption","resetSize":"Taille originale","resizer":"Click and drag to resize","title":"Propriétés de l'image2","uploadTab":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Coller la zone","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright © $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, consulter notre site internet:"},"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<Par défaut>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centré","justify":"Justifié","alignLeft":"Aligner à gauche","alignRight":"Aligner à Droite","alignCenter":"Align Center","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/fr.js b/web/core/assets/vendor/ckeditor/lang/fr.js index 0f3bf8d9e2e334b230d3a229f854ccdbd54e1c81..39e714191afbbc37bc2540500ea8a7e578838171 100644 --- a/web/core/assets/vendor/ckeditor/lang/fr.js +++ b/web/core/assets/vendor/ckeditor/lang/fr.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['fr']={"widget":{"move":"Cliquer et glisser pour déplacer","label":"Élément %1"},"undo":{"redo":"Rétablir","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barres d'outils de l'éditeur"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner vers la droite","mergeDown":"Fusionner vers le bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Lignes occupées","colSpan":"Colonnes occupées","wordWrap":"Césure","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Ligne de base","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de la cellule doit être un nombre.","invalidHeight":"La hauteur de la cellule doit être un nombre.","invalidRowSpan":"Le nombre de colonnes occupées doit être un nombre entier.","invalidColSpan":"Le nombre de colonnes occupées doit être un nombre entier.","chooseColor":"Choisir"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement entre les cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","heightUnit":"height unit","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement entre les cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pour cent","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en forme","panelTitle1":"Styles de bloc","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionner un caractère","toolbar":"Insérer un caractère spécial"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Afficher les blocs"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"pastetext":{"button":"Coller comme texte brut","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","title":"Coller comme texte brut"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?","error":"Les données collées n'ont pas pu être nettoyées à cause d'une erreur interne","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"notification":{"closed":"Notification fermée."},"maximize":{"maximize":"Agrandir","minimize":"Réduire"},"magicline":{"title":"Insérer un paragraphe ici"},"list":{"bulletedlist":"Insérer/Supprimer une liste à puces","numberedlist":"Insérer/Supprimer une liste numérotée"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image2":{"alt":"Texte alternatif","btnUpload":"Envoyer sur le serveur","captioned":"Image légendée","captionPlaceholder":"Légende","infoTab":"Informations sur l'image","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","pathName":"image","pathNameCaption":"légende","resetSize":"Réinitialiser la taille","resizer":"Cliquer et glisser pour redimensionner","title":"Propriétés de l'image","uploadTab":"Téléverser","urlMissing":"L'URL source de l'image est manquante.","altMissing":"Vous n'avez pas indiqué de texte de remplacement."},"horizontalrule":{"toolbar":"Ligne horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Division","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Préformaté"},"filetools":{"loadError":"Une erreur est survenue lors de la lecture du fichier.","networkError":"Une erreur réseau est survenue lors du téléversement du fichier.","httpError404":"Une erreur HTTP est survenue durant le téléversement du fichier (404 : fichier non trouvé).","httpError403":"Une erreur HTTP est survenue durant le téléversement du fichier (403 : accès refusé).","httpError":"Une erreur HTTP est survenue durant le téléversement du fichier (erreur : %1).","noUrlError":"L'URL de téléversement n'est pas spécifiée.","responseError":"Réponse du serveur incorrecte."},"elementspath":{"eleLabel":"Chemin des éléments","eleTitle":"Élément %1"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","pasteArea":"Coller la zone","pasteMsg":"Collez votre contenu dans la zone de saisie ci-dessous et cliquez OK."},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright © $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, veuillez visiter notre site web :"},"editor":"Éditeur de texte enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Utilisez le raccourci Alt-0 pour obtenir de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Télécharger","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ invisible","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton avec image","notSet":"<indéfini>","id":"ID","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue","cssClass":"Classes de style","advisoryTitle":"Infobulle","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page ?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer ?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à droite (LTR)","langDirRTL":"Droite à gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centrer","justify":"Justifier","alignLeft":"Aligner à gauche","alignRight":"Aligner à droite","alignCenter":"Aligner au centre","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"La valeur de \"%1\" doit être un nombre positif avec ou sans unité de mesure (%2).","invalidCssLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style en ligne doit être composée d'un ou plusieurs couples au format « nom : valeur », séparés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Retour arrière","13":"Entrée","16":"Majuscule","17":"Ctrl","18":"Alt","32":"Espace","35":"Fin","36":"Origine","46":"Supprimer","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Commande"},"keyboardShortcut":"Raccourci clavier","optionDefault":"Par défaut"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/gl.js b/web/core/assets/vendor/ckeditor/lang/gl.js index fa9830b2073654d10326e14bca027177dba8aa1a..02a7f9cab87739c378db111d694d8a880672a5e0 100644 --- a/web/core/assets/vendor/ckeditor/lang/gl.js +++ b/web/core/assets/vendor/ckeditor/lang/gl.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['gl']={"widget":{"move":"Prema e arrastre para mover","label":"Trebello %1"},"undo":{"redo":"Refacer","undo":"Desfacer"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","heightUnit":"height unit","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de liña","panelTitle3":"Estilos de obxecto"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"sourcedialog":{"toolbar":"Orixe","title":"Orixe"},"sourcearea":{"toolbar":"Orixe"},"showblocks":{"toolbar":"Amosar os bloques"},"removeformat":{"toolbar":"Retirar o formato"},"pastetext":{"button":"Pegar como texto simple","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"notification":{"closed":"Notificación pechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir aquí o parágrafo"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"language":{"button":"Estabelezer o idioma","remove":"Retirar o idioma"},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar ao servidor","captioned":"Imaxe con lenda","captionPlaceholder":"Lenda","infoTab":"Información da imaxe","lockRatio":"Proporcional","menu":"Propiedades da imaxe","pathName":"Imaxe","pathNameCaption":"lenda","resetSize":"Tamaño orixinal","resizer":"Prema e arrastre para axustar o tamaño","title":"Propiedades da imaxe","uploadTab":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","altMissing":"Non foi posíbel atopar o texto alternativo."},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"filetools":{"loadError":"Produciuse un erro durante a lectura do ficheiro.","networkError":"Produciuse un erro na rede durante o envío do ficheiro.","httpError404":"Produciuse un erro HTTP durante o envío do ficheiro (404: Ficheiro non atopado).","httpError403":"Produciuse un erro HTTP durante o envío do ficheiro (403: Acceso denegado).","httpError":"Produciuse un erro HTTP durante o envío do ficheiro (erro de estado: %1).","noUrlError":"Non foi definido o URL para o envío.","responseError":"Resposta incorrecta do servidor."},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opcións do menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","pasteArea":"Zona de pegado","pasteMsg":"Pegue o contido dentro da área de abaixo e prema Aceptar."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"about":{"copy":"Copyright © $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para obter información sobre a licenza, visite o noso sitio web:"},"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","left":"Esquerda","right":"Dereita","center":"Centro","justify":"Xustificado","alignLeft":"Aliñar á esquerda","alignRight":"Aliñar á dereita","alignCenter":"Aliñar ao centro","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"Ningún","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida correcta (%2).","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>","keyboard":{"8":"Ir atrás","13":"Intro","16":"Maiús","17":"Ctrl","18":"Alt","32":"Espazo","35":"Fin","36":"Inicio","46":"Supr","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Orde"},"keyboardShortcut":"Atallo de teclado","optionDefault":"Predeterminado"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/gu.js b/web/core/assets/vendor/ckeditor/lang/gu.js index 0f30e9ea07ddd6edceb75a9eba91f6e280679aff..82e13dbe73ed98a4a27c643cb07ac4793cb71b97 100644 --- a/web/core/assets/vendor/ckeditor/lang/gu.js +++ b/web/core/assets/vendor/ckeditor/lang/gu.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['gu']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"table":{"border":"કોઠાની બાજુ(બોર્ડર) સાઇઝ","caption":"મથાળું/કૅપ્શન ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજુ ભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસ્તરીય વિભાજન કરવું","splitVertical":"કોષને સીધું ને ઊભું વિભાજન કરવું","title":"સેલના ગુણ","cellType":"સેલનો પ્રકાર","rowSpan":"આડી કટારની જગ્યા","colSpan":"ઊભી કતારની જગ્યા","wordWrap":"વર્ડ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોર્ડેર રંગ","data":"સ્વીકૃત માહિતી","header":"મથાળું","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈએ.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRowSpan":"રો સ્પાન આંકડો હોવો જોઈએ.","invalidColSpan":"કોલમ સ્પાન આંકડો હોવો જોઈએ.","chooseColor":"પસંદ કરવું"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવું","headers":"મથાળા","headersBoth":"બેવું","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી કટાર","heightUnit":"height unit","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"sourcedialog":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ","title":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"showblocks":{"toolbar":"બ્લૉક બતાવવું"},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"image2":{"alt":"ઑલ્ટર્નટ ટેક્સ્ટ","btnUpload":"આ સર્વરને મોકલવું","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ચિત્ર ની જાણકારી","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","pathName":"image","pathNameCaption":"caption","resetSize":"રીસેટ સાઇઝ","resizer":"Click and drag to resize","title":"ચિત્રના ગુણ","uploadTab":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"format":{"label":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","panelTitle":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","tag_address":"સરનામું","tag_div":"શીર્ષક (DIV)","tag_h1":"શીર્ષક 1","tag_h2":"શીર્ષક 2","tag_h3":"શીર્ષક 3","tag_h4":"શીર્ષક 4","tag_h5":"શીર્ષક 5","tag_h6":"શીર્ષક 6","tag_p":"સામાન્ય","tag_pre":"ફૉર્મટેડ"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"about":{"copy":"કોપીરાઈટ © $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ"},"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"વધુ વિકલ્પ વાળુ એડિટર","common":{"editorHelp":"મદદ માટ ALT 0 દબાવો","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","flash":"ફ્લૅશ","form":"ફૉર્મ/પત્રક","checkbox":"ચેક બોક્સ","radio":"રેડિઓ બટન","textField":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર","textarea":"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર","hiddenField":"ગુપ્ત ક્ષેત્ર","button":"બટન","select":"પસંદગી ક્ષેત્ર","imageButton":"ચિત્ર બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સ્ટાઇલ-શીટ ક્લાસ","advisoryTitle":"મુખ્ય મથાળું","cssStyle":"સ્ટાઇલ","ok":"ઠીક છે","cancel":"રદ કરવું","close":"બંધ કરવું","preview":"જોવું","resize":"ખેંચી ને યોગ્ય કરવું","generalTab":"જનરલ","advancedTab":"અડ્વાન્સડ","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?","confirmCancel":"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?","options":"વિકલ્પો","target":"લક્ષ્ય","targetNew":"નવી વિન્ડો (_blank)","targetTop":"ઉપરની વિન્ડો (_top)","targetSelf":"એજ વિન્ડો (_self)","targetParent":"પેરનટ વિન્ડો (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવું","left":"ડાબી બાજુ ગોઠવવું","right":"જમણી","center":"મધ્ય સેન્ટર","justify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignLeft":"ડાબી બાજુએ/બાજુ તરફ","alignRight":"જમણી બાજુએ/બાજુ તરફ","alignCenter":"Align Center","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"કઇ નહી","invalidValue":"અનુચિત મૂલ્ય","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન સ્ટાઈલ ની વેલ્યુ \"name : value\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.","cssLengthTooltip":"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1<span class=\"cke_accessibility\">, નથી મળતું</span>","keyboard":{"8":"Backspace કી","13":"Enter કી","16":"Shift કી","17":"Ctrl કી","18":"Alt કી","32":"Space કી","35":"End કી","36":"Home કી","46":"Delete કી","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command કી"},"keyboardShortcut":"કીબોર્ડ શૉર્ટકટ","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/he.js b/web/core/assets/vendor/ckeditor/lang/he.js index c03ed4df499199221720b7f5974f26fe6251beb9..56ff7db2f20b8fc1aec07c21e8e2caa03c6daaad 100644 --- a/web/core/assets/vendor/ckeditor/lang/he.js +++ b/web/core/assets/vendor/ckeditor/lang/he.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['he']={"widget":{"move":"לחץ וגרור להזזה","label":"%1 widget"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","heightUnit":"height unit","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"sourcedialog":{"toolbar":"מקור","title":"מקור"},"sourcearea":{"toolbar":"מקור"},"showblocks":{"toolbar":"הצגת בלוקים"},"removeformat":{"toolbar":"הסרת העיצוב"},"pastetext":{"button":"הדבקה כטקסט פשוט","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"magicline":{"title":"הכנס פסקה כאן"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"language":{"button":"צור שפה","remove":"הסר שפה"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"image2":{"alt":"טקסט חלופי","btnUpload":"שליחה לשרת","captioned":"כותרת תמונה","captionPlaceholder":"כותרת","infoTab":"מידע על התמונה","lockRatio":"נעילת היחס","menu":"תכונות התמונה","pathName":"תמונה","pathNameCaption":"כותרת","resetSize":"איפוס הגודל","resizer":"לחץ וגרור לשינוי הגודל","title":"מאפייני התמונה","uploadTab":"העלאה","urlMissing":"כתובת התמונה חסרה.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"איזור הדבקה","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"בלוק ציטוט"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"about":{"copy":"Copyright © $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","moreInfo":"למידע נוסף בקרו באתרנו:"},"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","left":"לשמאל","right":"לימין","center":"מרכז","justify":"יישור לשוליים","alignLeft":"יישור לשמאל","alignRight":"יישור לימין","alignCenter":"Align Center","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"מחק","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/hi.js b/web/core/assets/vendor/ckeditor/lang/hi.js index eaf8a168560c4461bb2bd93c62d7c2c38e4285cb..8da2cf309239814232eb5d87d6f5ab380945b4e5 100644 --- a/web/core/assets/vendor/ckeditor/lang/hi.js +++ b/web/core/assets/vendor/ckeditor/lang/hi.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['hi']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"रीडू","undo":"अन्डू"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"एडिटर टूलबार"},"table":{"border":"बॉर्डर साइज़","caption":"शीर्षक","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाँया विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को क्षैतिज स्थिति में विभाजित करें","splitVertical":"सैल को लम्बाकार में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल प्रॉपर्टीज़","row":{"menu":"पंक्ति","insertBefore":"पहले पंक्ति डालें","insertAfter":"बाद में पंक्ति डालें","deleteRow":"पंक्तियाँ डिलीट करें"},"rows":"पंक्तियाँ","summary":"सारांश","title":"टेबल प्रॉपर्टीज़","toolbar":"टेबल","widthPc":"प्रतिशत","widthPx":"पिक्सैल","widthUnit":"width unit"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"विशेष चरित्र विकल्प","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"sourcedialog":{"toolbar":"सोर्स","title":"सोर्स"},"sourcearea":{"toolbar":"सोर्स"},"showblocks":{"toolbar":"ब्लॉक दिखायें"},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"पेस्ट (सादा टॅक्स्ट)"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेस्ट (वर्ड से)","toolbar":"पेस्ट (वर्ड से)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"image2":{"alt":"वैकल्पिक टेक्स्ट","btnUpload":"इसे सर्वर को भेजें","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"तस्वीर की जानकारी","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","pathName":"image","pathNameCaption":"caption","resetSize":"रीसॅट साइज़","resizer":"Click and drag to resize","title":"तस्वीर प्रॉपर्टीज़","uploadTab":"अपलोड","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"format":{"label":"फ़ॉर्मैट","panelTitle":"फ़ॉर्मैट","tag_address":"पता","tag_div":"शीर्षक (DIV)","tag_h1":"शीर्षक 1","tag_h2":"शीर्षक 2","tag_h3":"शीर्षक 3","tag_h4":"शीर्षक 4","tag_h5":"शीर्षक 5","tag_h6":"शीर्षक 6","tag_p":"साधारण","tag_pre":"फ़ॉर्मैटॅड"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ब्लॉक-कोट"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","flash":"फ़्लैश","form":"फ़ॉर्म","checkbox":"चॅक बॉक्स","radio":"रेडिओ बटन","textField":"टेक्स्ट फ़ील्ड","textarea":"टेक्स्ट एरिया","hiddenField":"गुप्त फ़ील्ड","button":"बटन","select":"चुनाव फ़ील्ड","imageButton":"तस्वीर बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिए URL","cssClass":"स्टाइल-शीट क्लास","advisoryTitle":"परामर्श शीर्शक","cssStyle":"स्टाइल","ok":"ठीक है","cancel":"रद्द करें","close":"Close","preview":"प्रीव्यू","resize":"Resize","generalTab":"सामान्य","advancedTab":"ऍड्वान्स्ड","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"टार्गेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"स्टाइल","cssClasses":"स्टाइल-शीट क्लास","width":"चौड़ाई","height":"ऊँचाई","align":"ऍलाइन","left":"दायें","right":"दायें","center":"बीच में","justify":"ब्लॉक जस्टीफ़ाई","alignLeft":"बायीं तरफ","alignRight":"दायीं तरफ","alignCenter":"Align Center","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/hr.js b/web/core/assets/vendor/ckeditor/lang/hr.js index 3bb9cdcf1edb831cbf1bb7a7c387b9ca803f92f9..84c36143dd892f548a51303365972241c83e4546 100644 --- a/web/core/assets/vendor/ckeditor/lang/hr.js +++ b/web/core/assets/vendor/ckeditor/lang/hr.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['hr']={"widget":{"move":"Klikni i povuci za pomicanje","label":"%1 widget"},"undo":{"redo":"Ponovi","undo":"Poništi"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"Ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","heightUnit":"height unit","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebni znak"},"sourcedialog":{"toolbar":"Kôd","title":"Kôd"},"sourcearea":{"toolbar":"Kôd"},"showblocks":{"toolbar":"Prikaži blokove"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalijepi kao čisti tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Zalijepi kao čisti tekst"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"notification":{"closed":"Obavijest zatvorena."},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"magicline":{"title":"Ubaci paragraf ovdje"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"language":{"button":"Namjesti jezik","remove":"Makni jezik"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Titl slike","captionPlaceholder":"Titl","infoTab":"Info slike","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","pathName":"slika","pathNameCaption":"titl","resetSize":"Obriši veličinu","resizer":"Odaberi i povuci za promjenu veličine","title":"Svojstva slika","uploadTab":"Pošalji","urlMissing":"Nedostaje URL slike.","altMissing":"Nedostaje alternativni tekst."},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"format":{"label":"Format","panelTitle":"Format paragrafa","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normalno","tag_pre":"Formatirano"},"filetools":{"loadError":"Greška prilikom čitanja datoteke.","networkError":"Mrežna greška prilikom slanja datoteke.","httpError404":"HTTP greška tijekom slanja datoteke (404: datoteka nije pronađena).","httpError403":"HTTP greška tijekom slanja datoteke (403: Zabranjeno).","httpError":"HTTP greška tijekom slanja datoteke (greška status: %1).","noUrlError":"URL za slanje nije podešen.","responseError":"Neispravni odgovor servera."},"elementspath":{"eleLabel":"Putanje elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije izbornika"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteNotification":"Vaš preglednik Vam ne dozvoljava lijepljenje običnog teksta na ovaj način. Za lijepljenje, pritisnite %1.","pasteArea":"Okvir za lijepljenje","pasteMsg":"Zalijepite vaš sadržaj u okvir ispod i pritisnite OK."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Podebljano","italic":"Ukošeno","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"about":{"copy":"Autorsko pravo © $1. Sva prava pridržana.","dlgTitle":"O CKEditoru 4","moreInfo":"Za informacije o licencama posjetite našu web stranicu:"},"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnanje","left":"Lijevo","right":"Desno","center":"Središnje","justify":"Blok poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"Bez poravnanja","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidLength":"Naznačena vrijednost polja \"%1\" mora biti pozitivni broj sa ili bez važeće mjerne jedinice (%2).","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Prečica na tipkovnici","optionDefault":"Zadano"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/hu.js b/web/core/assets/vendor/ckeditor/lang/hu.js index 9372e5520dee4297c93c971d5585599467ff3cc8..1997809d588a4e68cf96c3c43e522d7f653a551e 100644 --- a/web/core/assets/vendor/ckeditor/lang/hu.js +++ b/web/core/assets/vendor/ckeditor/lang/hu.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['hu']={"widget":{"move":"Kattints és húzd a mozgatáshoz","label":"%1 modul"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","heightUnit":"height unit","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"sourcedialog":{"toolbar":"Forráskód","title":"Forráskód"},"sourcearea":{"toolbar":"Forráskód"},"showblocks":{"toolbar":"Blokkok megjelenítése"},"removeformat":{"toolbar":"Formázás eltávolítása"},"pastetext":{"button":"Beillesztés formázatlan szövegként","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztár gombbal vagy a menüből.","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolta át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"notification":{"closed":"Értesítés bezárva."},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"magicline":{"title":"Szúrja be a bekezdést ide"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"language":{"button":"Nyelv beállítása","remove":"Nyelv eltávolítása"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"image2":{"alt":"Alternatív szöveg","btnUpload":"Küldés a szerverre","captioned":"Feliratozott kép","captionPlaceholder":"Képfelirat","infoTab":"Alaptulajdonságok","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","pathName":"kép","pathNameCaption":"felirat","resetSize":"Eredeti méret","resizer":"Kattintson és húzza az átméretezéshez","title":"Kép tulajdonságai","uploadTab":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","altMissing":"Az alternatív szöveg hiányzik."},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"format":{"label":"Formátum","panelTitle":"Bekezdés formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"filetools":{"loadError":"Hiba történt a fájl olvasása közben.","networkError":"Hálózati hiba történt a fájl feltöltése közben.","httpError404":"HTTP hiba történt a fájl feltöltése alatt (404: A fájl nem található).","httpError403":"HTTP hiba történt a fájl feltöltése alatt (403: Tiltott).","httpError":"HTTP hiba történt a fájl feltöltése alatt (hiba státusz: %1).","noUrlError":"Feltöltési URL nincs megadva.","responseError":"Helytelen szerver válasz."},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"contextmenu":{"options":"Helyi menü opciók"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztárról vagy a menüből.","pasteArea":"Beillesztési terület","pasteMsg":"Illessze be a tartalmat az alábbi mezőbe, és nyomja meg az OK-t."},"blockquote":{"toolbar":"Idézet blokk"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"about":{"copy":"Copyright © $1. Minden jog fenntartva.","dlgTitle":"A CKEditor 4-ről","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:"},"editor":"HTML szerkesztő","editorPanel":"HTML szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0-t","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtett mező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"CSS osztályok","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Pár beállítást megváltoztatott. Biztosan be szeretné zárni az ablakot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","left":"Bal","right":"Jobbra","center":"Középre","justify":"Sorkizárt","alignLeft":"Balra","alignRight":"Jobbra","alignCenter":"Középre igazítás","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"Semmi","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidLength":"A megadott értéknek a \"%1\" mezőben pozitív számnak kell lennie, egy érvényes mértékegységgel vagy anélkül (%2).","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Gyorsbillentyű","optionDefault":"Alapértelmezett"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/id.js b/web/core/assets/vendor/ckeditor/lang/id.js index 262770341c54161cd9315c76449d20f8ea2d3e9b..ebcbc048b113dc27dae97aa6b5e6b5787f92f4bd 100644 --- a/web/core/assets/vendor/ckeditor/lang/id.js +++ b/web/core/assets/vendor/ckeditor/lang/id.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['id']={"widget":{"move":"Tekan dan geser untuk memindahkan","label":"%1 widget"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Toolbar Penyunting"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","heightUnit":"height unit","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"sourcedialog":{"toolbar":"Sumber","title":"Sumber"},"sourcearea":{"toolbar":"Sumber"},"showblocks":{"toolbar":"Perlihatkan Blok"},"removeformat":{"toolbar":"Hapus Format"},"pastetext":{"button":"Tempel sebagai teks polos","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"notification":{"closed":"Pemberitahuan ditutup"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"magicline":{"title":"Masukkan paragraf disini"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"language":{"button":"Atur Bahasa","remove":"Hapus Bahasa"},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"image2":{"alt":"Teks alternatif","btnUpload":"Kirim ke Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info Gambar","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Atur Ulang Ukuran","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Unggah","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Membentuk"},"filetools":{"loadError":"Error terjadi ketika berkas dibaca","networkError":"Jaringan error terjadi ketika mengunggah berkas","httpError404":"HTTP error terjadi ketika mengunggah berkas (404: Berkas tidak ditemukan)","httpError403":"HTTP error terjadi ketika mengunggah berkas (403: Gangguan)","httpError":"HTTP error terjadi ketika mengunggah berkas (status error: %1)","noUrlError":"Unggahan URL tidak terdefinisi","responseError":"Respon server tidak sesuai"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Tempel","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Area Tempel","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Kutipan Blok"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"about":{"copy":"Hak cipta © $1. All rights reserved.","dlgTitle":"Tentang CKEditor 4","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:"},"editor":"Rich Text Editor","editorPanel":"Panel Rich Text Editor","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Lebih Lanjut","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Laman Atas (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Jendela Induk (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Rata kiri-kanan","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"Tidak ada","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Nilai pada inline style merupakan pasangan nama dan nilai dengan format \"nama : nilai\", yang dipisahkan dengan titik dua.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spasi","35":"End","36":"Home","46":"Hapus","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Pintasan Keyboard","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/is.js b/web/core/assets/vendor/ckeditor/lang/is.js index ed4dcaf704280f3485d7cbd79abab17c455ae454..fed8dba22ee6c1f785a71ec6b9aff38e9c48ae6b 100644 --- a/web/core/assets/vendor/ckeditor/lang/is.js +++ b/web/core/assets/vendor/ckeditor/lang/is.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['is']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Áfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"sourcedialog":{"toolbar":"Kóði","title":"Kóði"},"sourcearea":{"toolbar":"Kóði"},"showblocks":{"toolbar":"Sýna blokkir"},"removeformat":{"toolbar":"Fjarlægja snið"},"pastetext":{"button":"Líma sem ósniðinn texta","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Líma sem ósniðinn texta"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"image2":{"alt":"Baklægur texti","btnUpload":"Hlaða upp","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Almennt","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","pathName":"image","pathNameCaption":"caption","resetSize":"Reikna stærð","resizer":"Click and drag to resize","title":"Eigindi myndar","uploadTab":"Senda upp","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Lóðrétt lína"},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Inndráttur"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"<ekkert valið>","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"Í lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","left":"Vinstri","right":"Hægri","center":"Miðjað","justify":"Jafna báðum megin","alignLeft":"Vinstrijöfnun","alignRight":"Hægrijöfnun","alignCenter":"Align Center","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/it.js b/web/core/assets/vendor/ckeditor/lang/it.js index 1c7b53f4bad7f02d7896eac0f91ed6817cc56987..15f0d1230eb0f72cdc0f1afe4b12dd8efe500c96 100644 --- a/web/core/assets/vendor/ckeditor/lang/it.js +++ b/web/core/assets/vendor/ckeditor/lang/it.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['it']={"widget":{"move":"Fare clic e trascinare per spostare","label":"Widget %1"},"undo":{"redo":"Ripristina","undo":"Annulla"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","heightUnit":"height unit","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"sourcedialog":{"toolbar":"Sorgente","title":"Sorgente"},"sourcearea":{"toolbar":"Sorgente"},"showblocks":{"toolbar":"Visualizza Blocchi"},"removeformat":{"toolbar":"Elimina formattazione"},"pastetext":{"button":"Incolla come testo semplice","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"notification":{"closed":"Notifica chiusa."},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"magicline":{"title":"Inserisci paragrafo qui"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"language":{"button":"Imposta lingua","remove":"Rimuovi lingua"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"image2":{"alt":"Testo alternativo","btnUpload":"Invia al server","captioned":"Immagine con didascalia","captionPlaceholder":"Didascalia","infoTab":"Informazioni immagine","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","pathName":"immagine","pathNameCaption":"didascalia","resetSize":"Reimposta dimensione","resizer":"Fare clic e trascinare per ridimensionare","title":"Proprietà immagine","uploadTab":"Carica","urlMissing":"Manca l'URL dell'immagine.","altMissing":"Testo alternativo mancante."},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"filetools":{"loadError":"Si è verificato un errore durante la lettura del file.","networkError":"Si è verificato un errore di rete durante il caricamento del file.","httpError404":"Si è verificato un errore HTTP durante il caricamento del file (404: file non trovato).","httpError403":"Si è verificato un errore HTTP durante il caricamento del file (403: accesso negato).","httpError":"Si è verificato un errore HTTP durante il caricamento del file (stato dell'errore: %1).","noUrlError":"L'URL per il caricamento non è stato definito.","responseError":"La risposta del server non è corretta."},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opzioni del menù contestuale"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteNotification":"Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.","pasteArea":"Area dove incollare","pasteMsg":"Incollare il proprio contenuto all'interno dell'area sottostante e premere OK."},"blockquote":{"toolbar":"Citazione"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"about":{"copy":"Copyright © $1. Tutti i diritti riservati.","dlgTitle":"Informazioni su CKEditor 4","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:"},"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","left":"Sinistra","right":"Destra","center":"Centrato","justify":"Giustifica","alignLeft":"Allinea a sinistra","alignRight":"Allinea a destra","alignCenter":"Allinea al centro","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidLength":"Il valore specificato per il campo \"%1\" deve essere un numero positivo con o senza un'unità di misura valida (%2).","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>","keyboard":{"8":"Backspace","13":"Invio","16":"Maiusc","17":"Ctrl","18":"Alt","32":"Spazio","35":"Fine","36":"Inizio","46":"Canc","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Scorciatoia da tastiera","optionDefault":"Predefinito"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ja.js b/web/core/assets/vendor/ckeditor/lang/ja.js index 953de6ec08ca2718bddf9430a761cea25606e416..5b806fb25d3f8b2e37bd085759f6ac662d592606 100644 --- a/web/core/assets/vendor/ckeditor/lang/ja.js +++ b/web/core/assets/vendor/ckeditor/lang/ja.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ja']={"widget":{"move":"ドラッグして移動","label":"%1 ウィジェット"},"undo":{"redo":"やり直す","undo":"元に戻す"},"toolbar":{"toolbarCollapse":"ツールバーを閉じる","toolbarExpand":"ツールバーを開く","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編集ツールバー"},"table":{"border":"枠線の幅","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルを前に挿入","insertAfter":"セルを後に挿入","deleteCell":"セルを削除","merge":"セルを結合","mergeRight":"右に結合","mergeDown":"下に結合","splitHorizontal":"セルを水平方向に分割","splitVertical":"セルを垂直方向に分割","title":"セルのプロパティ","cellType":"セルの種類","rowSpan":"行の結合数","colSpan":"列の結合数","wordWrap":"単語の折り返し","hAlign":"水平方向の配置","vAlign":"垂直方向の配置","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ (td)","header":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","heightUnit":"height unit","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"sourcedialog":{"toolbar":"ソース","title":"ソース"},"sourcearea":{"toolbar":"ソース"},"showblocks":{"toolbar":"ブロック表示"},"removeformat":{"toolbar":"書式を解除"},"pastetext":{"button":"プレーンテキストとして貼り付け","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"プレーンテキストとして貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"notification":{"closed":"通知を閉じました。"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"ここに段落を挿入"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"language":{"button":"言語を設定","remove":"言語を削除"},"indent":{"indent":"インデント","outdent":"インデント解除"},"image2":{"alt":"代替テキスト","btnUpload":"サーバーに送信","captioned":"キャプションを付ける","captionPlaceholder":"キャプション","infoTab":"画像情報","lockRatio":"比率を固定","menu":"画像のプロパティ","pathName":"image","pathNameCaption":"caption","resetSize":"サイズをリセット","resizer":"ドラッグしてリサイズ","title":"画像のプロパティ","uploadTab":"アップロード","urlMissing":"画像のURLを入力してください。","altMissing":"代替テキストを入力してください。"},"horizontalrule":{"toolbar":"水平線"},"format":{"label":"書式","panelTitle":"段落の書式","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出し 1","tag_h2":"見出し 2","tag_h3":"見出し 3","tag_h4":"見出し 4","tag_h5":"見出し 5","tag_h6":"見出し 6","tag_p":"標準","tag_pre":"書式付き"},"filetools":{"loadError":"ファイルの読み込み中にエラーが発生しました。","networkError":"ファイルのアップロード中にネットワークエラーが発生しました。","httpError404":"ファイルのアップロード中にHTTPエラーが発生しました。(404: File not found)","httpError403":"ファイルのアップロード中にHTTPエラーが発生しました。(403: Forbidden)","httpError":"ファイルのアップロード中にHTTPエラーが発生しました。(error status: %1)","noUrlError":"アップロードURLが定義されていません。","responseError":"サーバーの応答が不正です。"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"contextmenu":{"options":"コンテキストメニューオプション"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"貼り付け場所","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ブロック引用文"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"CKEditorについて","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:"},"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","textarea":"テキストエリア","hiddenField":"不可視フィールド","button":"ボタン","select":"選択フィールド","imageButton":"画像ボタン","notSet":"<なし>","id":"Id","name":"Name属性","langDir":"文字表記の方向","langDirLtr":"左から右 (LTR)","langDirRtl":"右から左 (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"閉じる","preview":"プレビュー","resize":"ドラッグしてリサイズ","generalTab":"全般","advancedTab":"高度な設定","validateNumberFailed":"値が数値ではありません","confirmNewPage":"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?","confirmCancel":"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?","options":"オプション","target":"ターゲット","targetNew":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","left":"左","right":"右","center":"中央","justify":"両端揃え","alignLeft":"左揃え","alignRight":"右揃え","alignCenter":"Align Center","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"入力された \"%1\" 項目の値は、CSSの大きさ(px, %, in, cm, mm, em, ex, pt, または pc)が正しいものである/ないに関わらず、正の値である必要があります。","invalidHtmlLength":"入力された \"%1\" 項目の値は、HTMLの大きさ(px または %)が正しいものである/ないに関わらず、正の値である必要があります。","invalidInlineStyle":"入力されたインラインスタイルの値は、\"名前 : 値\" のフォーマットのセットで、複数の場合はセミコロンで区切られている形式である必要があります。","cssLengthTooltip":"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"キーボードショートカット","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ka.js b/web/core/assets/vendor/ckeditor/lang/ka.js index a4e1c3a5448165a2b5402d8be1d9a31a8b21ee83..fc96da478415e85793dabadb901bed87b12ad26e 100644 --- a/web/core/assets/vendor/ckeditor/lang/ka.js +++ b/web/core/assets/vendor/ckeditor/lang/ka.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ka']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"table":{"border":"ჩარჩოს ზომა","caption":"სათაური","cell":{"menu":"უჯრა","insertBefore":"უჯრის ჩასმა მანამდე","insertAfter":"უჯრის ჩასმა მერე","deleteCell":"უჯრების წაშლა","merge":"უჯრების შეერთება","mergeRight":"შეერთება მარჯვენასთან","mergeDown":"შეერთება ქვემოთასთან","splitHorizontal":"გაყოფა ჰორიზონტალურად","splitVertical":"გაყოფა ვერტიკალურად","title":"უჯრის პარამეტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქონების ოდენობა","colSpan":"სვეტების ოდენობა","wordWrap":"სტრიქონის გადატანა (Word Wrap)","hAlign":"ჰორიზონტალური სწორება","vAlign":"ვერტიკალური სწორება","alignBaseline":"ძირითადი ხაზის გასწვრივ","bgColor":"ფონის ფერი","borderColor":"ჩარჩოს ფერი","data":"მონაცემები","header":"სათაური","yes":"დიახ","no":"არა","invalidWidth":"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidHeight":"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRowSpan":"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.","invalidColSpan":"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.","chooseColor":"არჩევა"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩამატება წინ","insertAfter":"სვეტის ჩამატება მერე","deleteColumn":"სვეტების წაშლა"},"columns":"სვეტი","deleteTable":"ცხრილის წაშლა","headers":"სათაურები","headersBoth":"ორივე","headersColumn":"პირველი სვეტი","headersNone":"არაფერი","headersRow":"პირველი სტრიქონი","heightUnit":"height unit","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"sourcedialog":{"toolbar":"კოდები","title":"კოდები"},"sourcearea":{"toolbar":"კოდები"},"showblocks":{"toolbar":"არეების ჩვენება"},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"image2":{"alt":"სანაცვლო ტექსტი","btnUpload":"სერვერისთვის გაგზავნა","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"სურათის ინფორმცია","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","pathName":"image","pathNameCaption":"caption","resetSize":"ზომის დაბრუნება","resizer":"Click and drag to resize","title":"სურათის პარამეტრები","uploadTab":"აქაჩვა","urlMissing":"სურათის URL არაა შევსებული.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"format":{"label":"ფიორმატირება","panelTitle":"ფორმატირება","tag_address":"მისამართი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სათაური 1","tag_h2":"სათაური 2","tag_h3":"სათაური 3","tag_h4":"სათაური 4","tag_h5":"სათაური 5","tag_h6":"სათაური 6","tag_p":"ჩვეულებრივი","tag_pre":"ფორმატირებული"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"ჩასმის არე","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ციტატა"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"about":{"copy":"Copyright © $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:"},"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","flash":"Flash","form":"ფორმა","checkbox":"მონიშვნის ღილაკი","radio":"ამორჩევის ღილაკი","textField":"ტექსტური ველი","textarea":"ტექსტური არე","hiddenField":"მალული ველი","button":"ღილაკი","select":"არჩევის ველი","imageButton":"სურათიანი ღილაკი","notSet":"<არაფერი>","id":"Id","name":"სახელი","langDir":"ენის მიმართულება","langDirLtr":"მარცხნიდან მარჯვნივ (LTR)","langDirRtl":"მარჯვნიდან მარცხნივ (RTL)","langCode":"ენის კოდი","longDescr":"დიდი აღწერის URL","cssClass":"CSS კლასი","advisoryTitle":"სათაური","cssStyle":"CSS სტილი","ok":"დიახ","cancel":"გაუქმება","close":"დახურვა","preview":"გადახედვა","resize":"გაწიე ზომის შესაცვლელად","generalTab":"ინფორმაცია","advancedTab":"გაფართოებული","validateNumberFailed":"ეს მნიშვნელობა არაა რიცხვი.","confirmNewPage":"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?","confirmCancel":"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?","options":"პარამეტრები","target":"გახსნის ადგილი","targetNew":"ახალი ფანჯარა (_blank)","targetTop":"ზედა ფანჯარა (_top)","targetSelf":"იგივე ფანჯარა (_self)","targetParent":"მშობელი ფანჯარა (_parent)","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","styles":"სტილი","cssClasses":"CSS კლასი","width":"სიგანე","height":"სიმაღლე","align":"სწორება","left":"მარცხენა","right":"მარჯვენა","center":"შუა","justify":"両端揃え","alignLeft":"მარცხნივ სწორება","alignRight":"მარჯვნივ სწორება","alignCenter":"Align Center","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, მიუწვდომელია</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/km.js b/web/core/assets/vendor/ckeditor/lang/km.js index 0403df3c385c51d3a8245f9222a018589d1e500e..25fdf1af335d9db21dae9b0ad0c4f1c498fe0f84 100644 --- a/web/core/assets/vendor/ckeditor/lang/km.js +++ b/web/core/assets/vendor/ckeditor/lang/km.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['km']={"widget":{"move":"ចុចហើយទាញដើម្បីផ្លាស់ទី","label":"%1 widget"},"undo":{"redo":"ធ្វើឡើងវិញ","undo":"មិនធ្វើវិញ"},"toolbar":{"toolbarCollapse":"បង្រួមរបារឧបករណ៍","toolbarExpand":"ពង្រីករបារឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិនធ្វើវិញ","editing":"ការកែសម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថមូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារឧបករណ៍កែសម្រួល"},"table":{"border":"ទំហំបន្ទាត់ស៊ុម","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូលក្រឡាពីមុខ","insertAfter":"បញ្ចូលក្រឡាពីក្រោយ","deleteCell":"លុបក្រឡា","merge":"បញ្ចូលក្រឡាចូលគ្នា","mergeRight":"បញ្ចូលគ្នាខាងស្ដាំ","mergeDown":"បញ្ចូលគ្នាចុះក្រោម","splitHorizontal":"ពុះក្រឡាផ្ដេក","splitVertical":"ពុះក្រឡាបញ្ឈរ","title":"លក្ខណៈក្រឡា","cellType":"ប្រភេទក្រឡា","rowSpan":"ចំនួនជួរដេកលាយចូលគ្នា","colSpan":"ចំនួនជួរឈរលាយចូលគ្នា","wordWrap":"រុំពាក្យ","hAlign":"ការតម្រឹមផ្ដេក","vAlign":"ការតម្រឹមបញ្ឈរ","alignBaseline":"ខ្សែបន្ទាត់គោល","bgColor":"ពណ៌ផ្ទៃក្រោយ","borderColor":"ពណ៌បន្ទាត់ស៊ុម","data":"ទិន្នន័យ","header":"ក្បាល","yes":"ព្រម","no":"ទេ","invalidWidth":"ទទឹងក្រឡាត្រូវតែជាលេខ។","invalidHeight":"កម្ពស់ក្រឡាត្រូវតែជាលេខ។","invalidRowSpan":"ចំនួនជួរដេកលាយចូលគ្នាត្រូវតែជាលេខទាំងអស់។","invalidColSpan":"ចំនួនជួរឈរលាយចូលគ្នាត្រូវតែជាលេខទាំងអស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះក្រឡា","cellSpace":"គម្លាតក្រឡា","column":{"menu":"ជួរឈរ","insertBefore":"បញ្ចូលជួរឈរពីមុខ","insertAfter":"បញ្ចូលជួរឈរពីក្រោយ","deleteColumn":"លុបជួរឈរ"},"columns":"ជួរឈរ","deleteTable":"លុបតារាង","headers":"ក្បាល","headersBoth":"ទាំងពីរ","headersColumn":"ជួរឈរដំបូង","headersNone":"មិនមាន","headersRow":"ជួរដេកដំបូង","heightUnit":"height unit","invalidBorder":"ទំហំបន្ទាត់ស៊ុមត្រូវតែជាលេខ។","invalidCellPadding":"ចន្លោះក្រឡាត្រូវតែជាលេខវិជ្ជមាន។","invalidCellSpacing":"គម្លាតក្រឡាត្រូវតែជាលេខវិជ្ជមាន។","invalidCols":"ចំនួនជួរឈរត្រូវតែជាលេខធំជាង 0។","invalidHeight":"កម្ពស់តារាងត្រូវតែជាលេខ","invalidRows":"ចំនួនជួរដេកត្រូវតែជាលេខធំជាង 0។","invalidWidth":"ទទឹងតារាងត្រូវតែជាលេខ។","menu":"លក្ខណៈតារាង","row":{"menu":"ជួរដេក","insertBefore":"បញ្ចូលជួរដេកពីមុខ","insertAfter":"បញ្ចូលជួរដេកពីក្រោយ","deleteRow":"លុបជួរដេក"},"rows":"ជួរដេក","summary":"សេចក្តីសង្ខេប","title":"លក្ខណៈតារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតាទទឹង"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយរចនាបថ","panelTitle1":"រចនាបថប្លក់","panelTitle2":"រចនាបថក្នុងជួរ","panelTitle3":"រចនាបថវត្ថុ"},"specialchar":{"options":"ជម្រើសតួអក្សរពិសេស","title":"រើសតួអក្សរពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"sourcedialog":{"toolbar":"អក្សរកូដ","title":"អក្សរកូដ"},"sourcearea":{"toolbar":"អក្សរកូដ"},"showblocks":{"toolbar":"បង្ហាញប្លក់"},"removeformat":{"toolbar":"ជម្រះទ្រង់ទ្រាយ"},"pastetext":{"button":"បិទភ្ជាប់ជាអត្ថបទធម្មតា","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"បិទភ្ជាប់ជាអត្ថបទធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទដែលអ្នកចង់បិទភ្ជាប់នេះ ទំនងដូចជាចម្លងមកពី Word។ តើអ្នកចង់សម្អាតវាមុនបិទភ្ជាប់ទេ?","error":"ដោយសារមានបញ្ហាផ្នែកក្នុងធ្វើឲ្យមិនអាចសម្អាតទិន្នន័យដែលបានបិទភ្ជាប់","title":"បិទភ្ជាប់ពី Word","toolbar":"បិទភ្ជាប់ពី Word"},"notification":{"closed":"បានបិទការផ្ដល់ដំណឹង។"},"maximize":{"maximize":"ពង្រីកអតិបរមា","minimize":"បង្រួមអប្បបរមា"},"magicline":{"title":"បញ្ចូលកថាខណ្ឌនៅទីនេះ"},"list":{"bulletedlist":"បញ្ចូល / លុបបញ្ជីជាចំណុចមូល","numberedlist":"បញ្ចូល / លុបបញ្ជីជាលេខ"},"language":{"button":"កំណត់ភាសា","remove":"លុបភាសា"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"image2":{"alt":"អត្ថបទជំនួស","btnUpload":"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា","captioned":"រូបដែលមានចំណងជើង","captionPlaceholder":"Caption","infoTab":"ពត៌មានអំពីរូបភាព","lockRatio":"ចាក់សោផលធៀប","menu":"លក្ខណៈសម្បត្តិរូបភាព","pathName":"រូបភាព","pathNameCaption":"ចំណងជើង","resetSize":"កំណត់ទំហំឡើងវិញ","resizer":"ចុចហើយទាញដើម្បីប្ដូរទំហំ","title":"លក្ខណៈសម្បត្តិរូបភាប","uploadTab":"ផ្ទុកឡើង","urlMissing":"ខ្វះ URL ប្រភពរូបភាព។","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"format":{"label":"ទម្រង់","panelTitle":"ទម្រង់កថាខណ្ឌ","tag_address":"អាសយដ្ឋាន","tag_div":"ធម្មតា (DIV)","tag_h1":"ចំណងជើង 1","tag_h2":"ចំណងជើង 2","tag_h3":"ចំណងជើង 3","tag_h4":"ចំណងជើង 4","tag_h5":"ចំណងជើង 5","tag_h6":"ចំណងជើង 6","tag_p":"ធម្មតា","tag_pre":"Formatted"},"filetools":{"loadError":"មានបញ្ហាកើតឡើងក្នុងពេលអានឯកសារ។","networkError":"មានបញ្ហាបណ្ដាញកើតឡើងក្នុងពេលផ្ទុកឡើងឯកសារ។","httpError404":"មានបញ្ហា HTTP កើតឡើងក្នុងពេលផ្ទុកឡើងឯកសារ (404៖ រកឯកសារមិនឃើញ)។","httpError403":"មានបញ្ហា HTTP កើតឡើងក្នុងពេលផ្ទុកឡើងឯកសារ (403៖ ហាមឃាត់)។","httpError":"មានបញ្ហា HTTP កើតឡើងក្នុងពេលផ្ទុកឡើងឯកសារ (ស្ថានភាពកំហុស៖ %1)។","noUrlError":"មិនមានបញ្ជាក់ URL ផ្ទុកឡើង។","responseError":"ការឆ្លើយតបរបស់ម៉ាស៊ីនបម្រើ មិនត្រឹមត្រូវ។"},"elementspath":{"eleLabel":"ទីតាំងធាតុ","eleTitle":"ធាតុ %1"},"contextmenu":{"options":"ជម្រើសម៉ឺនុយបរិបទ"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។","paste":"បិទភ្ជាប់","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"តំបន់បិទភ្ជាប់","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ប្លក់ពាក្យសម្រង់"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូសបន្ទាត់ចំកណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូសបន្ទាត់ក្រោម"},"about":{"copy":"រក្សាសិទ្ធិ © $1។ រក្សាសិទ្ធិគ្រប់បែបយ៉ាង។","dlgTitle":"អំពី CKEditor","moreInfo":"សម្រាប់ព័ត៌មានអំពីអាជ្ញាបណញណ សូមមើលក្នុងគេហទំព័ររបស់យើង៖"},"editor":"ឧបករណ៍សរសេរអត្ថបទសម្បូរបែប","editorPanel":"ផ្ទាំងឧបករណ៍សរសេរអត្ថបទសម្បូរបែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់ជំនួយ","browseServer":"រកមើលក្នុងម៉ាស៊ីនបម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុកឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីនបម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់ធីក","radio":"ប៊ូតុងមូល","textField":"វាលអត្ថបទ","textarea":"Textarea","hiddenField":"វាលកំបាំង","button":"ប៊ូតុង","select":"វាលជម្រើស","imageButton":"ប៊ូតុងរូបភាព","notSet":"<មិនកំណត់>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ (LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង (RTL)","langCode":"លេខកូដភាសា","longDescr":"URL អធិប្បាយវែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណងជើងណែនាំ","cssStyle":"រចនាបថ","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើលជាមុន","resize":"ប្ដូរទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិតខ្ពស់","validateNumberFailed":"តម្លៃនេះពុំមែនជាលេខទេ។","confirmNewPage":"រាល់បន្លាស់ប្ដូរនានាដែលមិនទាន់រក្សាទុកក្នុងមាតិកានេះ នឹងត្រូវបាត់បង់។ តើអ្នកពិតជាចង់ផ្ទុកទំព័រថ្មីមែនទេ?","confirmCancel":"ការកំណត់មួយចំនួនត្រូវបានផ្លាស់ប្ដូរ។ តើអ្នកពិតជាចង់បិទប្រអប់នេះមែនទេ?","options":"ការកំណត់","target":"គោលដៅ","targetNew":"វីនដូថ្មី (_blank)","targetTop":"វីនដូលើគេ (_top)","targetSelf":"វីនដូដូចគ្នា (_self)","targetParent":"វីនដូមេ (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"រចនាបថ","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់ទីតាំង","left":"ខាងឆ្វង","right":"ខាងស្តាំ","center":"កណ្តាល","justify":"តំរឹមសងខាង","alignLeft":"តម្រឹមឆ្វេង","alignRight":"តម្រឹមស្ដាំ","alignCenter":"Align Center","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"គ្មាន","invalidValue":"តម្លៃមិនត្រឹមត្រូវ។","invalidHeight":"តម្លៃកំពស់ត្រូវតែជាលេខ។","invalidWidth":"តម្លៃទទឹងត្រូវតែជាលេខ។","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"តម្លៃកំណត់សម្រាប់វាល \"%1\" ត្រូវតែជាលេខវិជ្ជមាន ដោយភ្ជាប់ឬមិនភ្ជាប់ជាមួយនឹងឯកតារង្វាស់របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"តម្លៃកំណត់សម្រាប់វាល \"%1\" ត្រូវតែជាលេខវិជ្ជមាន ដោយភ្ជាប់ឬមិនភ្ជាប់ជាមួយនឹងឯកតារង្វាស់របស់ HTML (px ឬ %) ។","invalidInlineStyle":"តម្លៃកំណត់សម្រាប់រចនាបថក្នុងតួ ត្រូវតែមានមួយឬធាតុច្រើនដោយមានទ្រង់ទ្រាយជា \"ឈ្មោះ : តម្លៃ\" ហើយញែកចេញពីគ្នាដោយចុចក្បៀស។","cssLengthTooltip":"បញ្ចូលលេខសម្រាប់តម្លៃជាភិចសែល ឬលេខដែលមានឯកតាត្រឹមត្រូវរបស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1<span class=\"cke_accessibility\">, មិនមាន</span>","keyboard":{"8":"លុបថយក្រោយ","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"ចុង","36":"ផ្ទះ","46":"លុប","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ko.js b/web/core/assets/vendor/ckeditor/lang/ko.js index 2b6bae9a73d025aa89b6e313c69725d963fbc45a..d0215582405cc7b8d6168ca0922f6b4d2640a5f0 100644 --- a/web/core/assets/vendor/ckeditor/lang/ko.js +++ b/web/core/assets/vendor/ckeditor/lang/ko.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.lang['ko']={"widget":{"move":"움직이려면 클릭 후 드래그 하세요","label":"%1 위젯"},"undo":{"redo":"다시 실행","undo":"실행 취소"},"toolbar":{"toolbarCollapse":"툴바 줄이기","toolbarExpand":"툴바 확장","toolbarGroups":{"document":"문서","clipboard":"클립보드/실행 취소","editing":"편집","forms":"폼","basicstyles":"기본 스타일","paragraph":"단락","links":"링크","insert":"삽입","styles":"스타일","colors":"색상","tools":"도구"},"toolbars":"에디터 툴바"},"table":{"border":"테두리 두께","caption":"주석","cell":{"menu":"셀","insertBefore":"앞에 셀 삽입","insertAfter":"뒤에 셀 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 합치기","mergeDown":"왼쪽 합치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"셀 속성","cellType":"셀 종류","rowSpan":"행 간격","colSpan":"열 간격","wordWrap":"줄 끝 단어 줄 바꿈","hAlign":"가로 정렬","vAlign":"세로 정렬","alignBaseline":"영문 글꼴 기준선","bgColor":"배경색","borderColor":"테두리 색","data":"자료","header":"머릿칸","yes":"예","no":"아니오","invalidWidth":"셀 너비는 숫자여야 합니다.","invalidHeight":"셀 높이는 숫자여야 합니다.","invalidRowSpan":"행 간격은 정수여야 합니다.","invalidColSpan":"열 간격은 정수여야 합니다.","chooseColor":"선택"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열","insertBefore":"왼쪽에 열 삽입","insertAfter":"오른쪽에 열 삽입","deleteColumn":"열 삭제"},"columns":"열","deleteTable":"표 삭제","headers":"머릿칸","headersBoth":"모두","headersColumn":"첫 열","headersNone":"없음","headersRow":"첫 행","heightUnit":"height unit","invalidBorder":"테두리 두께는 숫자여야 합니다.","invalidCellPadding":"셀 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"열 번호는 0보다 커야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 커야 합니다.","invalidWidth":"표의 너비는 숫자여야 합니다.","menu":"표 속성","row":{"menu":"행","insertBefore":"위에 행 삽입","insertAfter":"아래에 행 삽입","deleteRow":"행 삭제"},"rows":"행","summary":"요약","title":"표 속성","toolbar":"표","widthPc":"백분율","widthPx":"픽셀","widthUnit":"너비 단위"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"객체 스타일"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"sourcedialog":{"toolbar":"소스","title":"소스"},"sourcearea":{"toolbar":"소스"},"showblocks":{"toolbar":"블록 보기"},"removeformat":{"toolbar":"형식 지우기"},"pastetext":{"button":"텍스트로 붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 에서 붙여넣기","toolbar":"MS Word 에서 붙여넣기"},"notification":{"closed":"알림이 닫힘."},"maximize":{"maximize":"최대화","minimize":"최소화"},"magicline":{"title":"여기에 단락 삽입"},"list":{"bulletedlist":"순서 없는 목록","numberedlist":"순서 있는 목록"},"language":{"button":"언어 설정","remove":"언어 설정 지우기"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"image2":{"alt":"대체 문자열","btnUpload":"서버로 전송","captioned":"이미지 설명 넣기","captionPlaceholder":"설명","infoTab":"이미지 정보","lockRatio":"비율 유지","menu":"이미지 속성","pathName":"이미지","pathNameCaption":"설명","resetSize":"원래 크기로","resizer":"크기를 조절하려면 클릭 후 드래그 하세요","title":"이미지 속성","uploadTab":"업로드","urlMissing":"이미지 원본 주소(URL)가 없습니다.","altMissing":"대체 문자가 없습니다."},"horizontalrule":{"toolbar":"가로 줄 삽입"},"format":{"label":"문단","panelTitle":"문단 형식","tag_address":"글쓴이","tag_div":"기본 (DIV)","tag_h1":"제목 1","tag_h2":"제목 2","tag_h3":"제목 3","tag_h4":"제목 4","tag_h5":"제목 5","tag_h6":"제목 6","tag_p":"본문","tag_pre":"정형 문단"},"filetools":{"loadError":"파일을 읽는 중 오류가 발생했습니다.","networkError":"파일 업로드 중 네트워크 오류가 발생했습니다.","httpError404":"파일 업로드중 HTTP 오류가 발생했습니다 (404: 파일 찾을수 없음).","httpError403":"파일 업로드중 HTTP 오류가 발생했습니다 (403: 권한 없음).","httpError":"파일 업로드중 HTTP 오류가 발생했습니다 (오류 코드 %1).","noUrlError":"업로드 주소가 정의되어 있지 않습니다.","responseError":"잘못된 서버 응답."},"elementspath":{"eleLabel":"요소 경로","eleTitle":"%1 요소"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"clipboard":{"copy":"복사","copyError":"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.","cut":"잘라내기","cutError":"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오","paste":"붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"붙여넣기 범위","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"인용 단락"},"basicstyles":{"bold":"굵게","italic":"기울임꼴","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"about":{"copy":"저작권 © $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","moreInfo":"라이선스에 대한 정보는 저희 웹 사이트를 참고하세요:"},"editor":"리치 텍스트 편집기","editorPanel":"리치 텍스트 편집기 패널","common":{"editorHelp":"도움이 필요하면 ALT 0 을 누르세요","browseServer":"서버 탐색","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래시","form":"폼","checkbox":"체크 박스","radio":"라디오 버튼","textField":"한 줄 입력 칸","textarea":"여러 줄 입력 칸","hiddenField":"숨은 입력 칸","button":"버튼","select":"선택 목록","imageButton":"이미지 버튼","notSet":"<설정 안 됨>","id":"ID","name":"이름","langDir":"언어 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"웹 주소 설명","cssClass":"스타일 시트 클래스","advisoryTitle":"보조 제목","cssStyle":"스타일","ok":"확인","cancel":"취소","close":"닫기","preview":"미리보기","resize":"크기 조절","generalTab":"일반","advancedTab":"자세히","validateNumberFailed":"이 값은 숫자가 아닙니다.","confirmNewPage":"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?","confirmCancel":"일부 옵션이 변경 되었습니다. 정말로 창을 닫겠습니까?","options":"옵션","target":"타겟","targetNew":"새 창 (_blank)","targetTop":"최상위 창 (_top)","targetSelf":"같은 창 (_self)","targetParent":"부모 창 (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"스타일","cssClasses":"스타일 시트 클래스","width":"너비","height":"높이","align":"정렬","left":"왼쪽","right":"오른쪽","center":"중앙","justify":"양쪽 정렬","alignLeft":"왼쪽 정렬","alignRight":"오른쪽 정렬","alignCenter":"중앙 정렬","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"기본","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidLength":"\"%1\" 값은 유효한 측정단위(%2)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidCssLength":"\"%1\" 값은 유효한 CSS 측정 단위(px, %, in, cm, mm, em, ex, pt, or pc)를 포함하거나 포함하지 않은 양수 여야 합니다.","invalidHtmlLength":"\"%1\" 값은 유효한 HTML 측정 단위(px or %)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidInlineStyle":"인라인 스타일에 설정된 값은 \"name : value\" 형식을 가진 하나 이상의 투플(tuples)이 세미콜론(;)으로 구분되어 구성되어야 합니다.","cssLengthTooltip":"픽셀 단위의 숫자만 입력하시거나 유효한 CSS 단위(px, %, in, cm, mm, em, ex, pt, or pc)와 함께 숫자를 입력해주세요.","unavailable":"%1<span class=\"cke_accessibility\">, 사용불가</span>","keyboard":{"8":"백스페이스","13":"엔터","16":"시프트","17":"컨트롤","18":"알트","32":"간격","35":"엔드","36":"홈","46":"딜리트","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"커맨드"},"keyboardShortcut":"키보드 단축키","optionDefault":"기본값"}}; \ No newline at end of file +CKEDITOR.lang['ko']={"widget":{"move":"움직이려면 클릭 후 드래그 하세요","label":"%1 위젯"},"undo":{"redo":"다시 실행","undo":"실행 취소"},"toolbar":{"toolbarCollapse":"툴바 줄이기","toolbarExpand":"툴바 확장","toolbarGroups":{"document":"문서","clipboard":"클립보드/실행 취소","editing":"편집","forms":"폼","basicstyles":"기본 스타일","paragraph":"단락","links":"링크","insert":"삽입","styles":"스타일","colors":"색상","tools":"도구"},"toolbars":"에디터 툴바"},"table":{"border":"테두리 두께","caption":"주석","cell":{"menu":"셀","insertBefore":"앞에 셀 삽입","insertAfter":"뒤에 셀 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 합치기","mergeDown":"왼쪽 합치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"셀 속성","cellType":"셀 종류","rowSpan":"행 간격","colSpan":"열 간격","wordWrap":"줄 끝 단어 줄 바꿈","hAlign":"가로 정렬","vAlign":"세로 정렬","alignBaseline":"영문 글꼴 기준선","bgColor":"배경색","borderColor":"테두리 색","data":"자료","header":"머릿칸","yes":"예","no":"아니오","invalidWidth":"셀 너비는 숫자여야 합니다.","invalidHeight":"셀 높이는 숫자여야 합니다.","invalidRowSpan":"행 간격은 정수여야 합니다.","invalidColSpan":"열 간격은 정수여야 합니다.","chooseColor":"선택"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열","insertBefore":"왼쪽에 열 삽입","insertAfter":"오른쪽에 열 삽입","deleteColumn":"열 삭제"},"columns":"열","deleteTable":"표 삭제","headers":"머릿칸","headersBoth":"모두","headersColumn":"첫 열","headersNone":"없음","headersRow":"첫 행","heightUnit":"height unit","invalidBorder":"테두리 두께는 숫자여야 합니다.","invalidCellPadding":"셀 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"열 번호는 0보다 커야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 커야 합니다.","invalidWidth":"표의 너비는 숫자여야 합니다.","menu":"표 속성","row":{"menu":"행","insertBefore":"위에 행 삽입","insertAfter":"아래에 행 삽입","deleteRow":"행 삭제"},"rows":"행","summary":"요약","title":"표 속성","toolbar":"표","widthPc":"백분율","widthPx":"픽셀","widthUnit":"너비 단위"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"객체 스타일"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"sourcedialog":{"toolbar":"소스","title":"소스"},"sourcearea":{"toolbar":"소스"},"showblocks":{"toolbar":"블록 보기"},"removeformat":{"toolbar":"형식 지우기"},"pastetext":{"button":"텍스트로 붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 에서 붙여넣기","toolbar":"MS Word 에서 붙여넣기"},"notification":{"closed":"알림이 닫힘."},"maximize":{"maximize":"최대화","minimize":"최소화"},"magicline":{"title":"여기에 단락 삽입"},"list":{"bulletedlist":"순서 없는 목록","numberedlist":"순서 있는 목록"},"language":{"button":"언어 설정","remove":"언어 설정 지우기"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"image2":{"alt":"대체 문자열","btnUpload":"서버로 전송","captioned":"이미지 설명 넣기","captionPlaceholder":"설명","infoTab":"이미지 정보","lockRatio":"비율 유지","menu":"이미지 속성","pathName":"이미지","pathNameCaption":"설명","resetSize":"원래 크기로","resizer":"크기를 조절하려면 클릭 후 드래그 하세요","title":"이미지 속성","uploadTab":"업로드","urlMissing":"이미지 원본 주소(URL)가 없습니다.","altMissing":"대체 문자가 없습니다."},"horizontalrule":{"toolbar":"가로 줄 삽입"},"format":{"label":"문단","panelTitle":"문단 형식","tag_address":"글쓴이","tag_div":"기본 (DIV)","tag_h1":"제목 1","tag_h2":"제목 2","tag_h3":"제목 3","tag_h4":"제목 4","tag_h5":"제목 5","tag_h6":"제목 6","tag_p":"본문","tag_pre":"정형 문단"},"filetools":{"loadError":"파일을 읽는 중 오류가 발생했습니다.","networkError":"파일 업로드 중 네트워크 오류가 발생했습니다.","httpError404":"파일 업로드중 HTTP 오류가 발생했습니다 (404: 파일 찾을수 없음).","httpError403":"파일 업로드중 HTTP 오류가 발생했습니다 (403: 권한 없음).","httpError":"파일 업로드중 HTTP 오류가 발생했습니다 (오류 코드 %1).","noUrlError":"업로드 주소가 정의되어 있지 않습니다.","responseError":"잘못된 서버 응답."},"elementspath":{"eleLabel":"요소 경로","eleTitle":"%1 요소"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"clipboard":{"copy":"복사","copyError":"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.","cut":"잘라내기","cutError":"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오","paste":"붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"붙여넣기 범위","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"인용 단락"},"basicstyles":{"bold":"굵게","italic":"기울임꼴","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"about":{"copy":"저작권 © $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","moreInfo":"라이선스에 대한 정보는 저희 웹 사이트를 참고하세요:"},"editor":"리치 텍스트 편집기","editorPanel":"리치 텍스트 편집기 패널","common":{"editorHelp":"도움이 필요하면 ALT 0 을 누르세요","browseServer":"서버 탐색","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래시","form":"폼","checkbox":"체크 박스","radio":"라디오 버튼","textField":"한 줄 입력 칸","textarea":"여러 줄 입력 칸","hiddenField":"숨은 입력 칸","button":"버튼","select":"선택 목록","imageButton":"이미지 버튼","notSet":"<설정 안 됨>","id":"ID","name":"이름","langDir":"언어 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"웹 주소 설명","cssClass":"스타일 시트 클래스","advisoryTitle":"보조 제목","cssStyle":"스타일","ok":"확인","cancel":"취소","close":"닫기","preview":"미리보기","resize":"크기 조절","generalTab":"일반","advancedTab":"자세히","validateNumberFailed":"이 값은 숫자가 아닙니다.","confirmNewPage":"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?","confirmCancel":"일부 옵션이 변경 되었습니다. 정말로 창을 닫겠습니까?","options":"옵션","target":"타겟","targetNew":"새 창 (_blank)","targetTop":"최상위 창 (_top)","targetSelf":"같은 창 (_self)","targetParent":"부모 창 (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"스타일","cssClasses":"스타일 시트 클래스","width":"너비","height":"높이","align":"정렬","left":"왼쪽","right":"오른쪽","center":"중앙","justify":"양쪽 정렬","alignLeft":"왼쪽 정렬","alignRight":"오른쪽 정렬","alignCenter":"중앙 정렬","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"기본","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidLength":"\"%1\" 값은 유효한 측정단위(%2)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidCssLength":"\"%1\" 값은 유효한 CSS 측정 단위(px, %, in, cm, mm, em, ex, pt, or pc)를 포함하거나 포함하지 않은 양수 여야 합니다.","invalidHtmlLength":"\"%1\" 값은 유효한 HTML 측정 단위(px or %)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidInlineStyle":"인라인 스타일에 명시된 값은 세미콜론(;)으로 구분되는 한 쌍 이상의 \"이름 : 값\" 형식으로 구성되어야 합니다.","cssLengthTooltip":"픽셀 단위의 숫자만 입력하시거나 숫자와 유효한 CSS 단위(px, %, in, cm, mm, em, ex, pt, or pc)를 함께 입력해주세요.","unavailable":"%1<span class=\"cke_accessibility\">, 사용불가</span>","keyboard":{"8":"백스페이스","13":"엔터","16":"시프트","17":"컨트롤","18":"알트","32":"간격","35":"엔드","36":"홈","46":"딜리트","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"커맨드"},"keyboardShortcut":"키보드 단축키","optionDefault":"기본값"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ku.js b/web/core/assets/vendor/ckeditor/lang/ku.js index 5f9b3bacb9951aca0c2a15cc15e72ea07e319be9..0aeb35ddc050d7f9e59f2ce16ddbbba18a82c0ac 100644 --- a/web/core/assets/vendor/ckeditor/lang/ku.js +++ b/web/core/assets/vendor/ckeditor/lang/ku.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ku']={"widget":{"move":"کرتەبکە و ڕایبکێشە بۆ جوڵاندن","label":"%1 ویجێت"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"table":{"border":"گەورەیی پەراوێز","caption":"سەردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه لەپێش","insertAfter":"دانانی خانه لەپاش","deleteCell":"سڕینەوەی خانه","merge":"تێکەڵکردنی خانە","mergeRight":"تێکەڵکردنی لەگەڵ ڕاست","mergeDown":"تێکەڵکردنی لەگەڵ خوارەوە","splitHorizontal":"دابەشکردنی خانەی ئاسۆیی","splitVertical":"دابەشکردنی خانەی ئەستونی","title":"خاسیەتی خانه","cellType":"جۆری خانه","rowSpan":"ماوەی نێوان ڕیز","colSpan":"بستی ئەستونی","wordWrap":"پێچانەوەی وشە","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئەستونی","alignBaseline":"هێڵەبنەڕەت","bgColor":"ڕەنگی پاشبنەما","borderColor":"ڕەنگی پەراوێز","data":"داتا","header":"سەرپەڕه","yes":"بەڵێ","no":"نەخێر","invalidWidth":"پانی خانه دەبێت بەتەواوی ژماره بێت.","invalidHeight":"درێژی خانه بەتەواوی دەبێت ژمارە بێت.","invalidRowSpan":"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.","invalidColSpan":"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.","chooseColor":"هەڵبژێرە"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئەستون","insertBefore":"دانانی ئەستون لەپێش","insertAfter":"دانانی ئەستوون لەپاش","deleteColumn":"سڕینەوەی ئەستوون"},"columns":"ستوونەکان","deleteTable":"سڕینەوەی خشتە","headers":"سەرپەڕه","headersBoth":"هەردووك","headersColumn":"یەکەم ئەستوون","headersNone":"هیچ","headersRow":"یەکەم ڕیز","heightUnit":"height unit","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"sourcedialog":{"toolbar":"سەرچاوە","title":"سەرچاوە"},"sourcearea":{"toolbar":"سەرچاوە"},"showblocks":{"toolbar":"نیشاندانی بەربەستەکان"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست","title":"لکاندنی وەك دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"notification":{"closed":"ئاگادارکەرەوەکە داخرا."},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"magicline":{"title":"بڕگە لێرە دابنێ"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"language":{"button":"جێگیرکردنی زمان","remove":"لابردنی زمان"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"image2":{"alt":"جێگرەوەی دەق","btnUpload":"ناردنی بۆ ڕاژه","captioned":"وێنەی بەسەردێر","captionPlaceholder":"سەردێر","infoTab":"زانیاری وێنه","lockRatio":"داخستنی ڕێژه","menu":"خاسیەتی وێنه","pathName":"وێنە","pathNameCaption":"سەردێر","resetSize":"ڕێکخستنەوەی قەباره","resizer":"کرتەبکە و ڕایبکێشە بۆ قەبارە گۆڕین","title":"خاسیەتی وێنه","uploadTab":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","altMissing":"جێگرەوەی دەق لەدەست چووە."},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"filetools":{"loadError":"هەڵەیەک ڕوویدا لە ماوەی خوێندنەوەی پەڕگەکە.","networkError":"هەڵەیەکی ڕایەڵە ڕوویدا لە ماوەی بارکردنی پەڕگەکە.","httpError404":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (404: پەڕگەکە نەدۆزراوە).","httpError403":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (403: قەدەغەکراو).","httpError":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (دۆخی هەڵە: %1).","noUrlError":"بەستەری پەڕگەکە پێناسە نەکراوە.","responseError":"وەڵامێکی نادروستی سێرڤەر."},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست. ","pasteArea":"ناوچەی لکاندن","pasteMsg":"ناوەڕۆکەکەت لەم پانتایی خوارەوە بلکێنە"},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"about":{"copy":"مافی لەبەرگەرتنەوەی © $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.","dlgTitle":"دەربارەی CKEditor 4","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:"},"editor":"سەرنووسەی دەقی تەواو","editorPanel":"بڕگەی سەرنووسەی دەقی تەواو","common":{"editorHelp":"کلیکی ALT لەگەڵ 0 بکه بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","flash":"فلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی وێنە","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"چەپ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ چەپ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی پهڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"پاشگەزبوونەوە","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پەرەسەندوو","validateNumberFailed":"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لە داخستنی ئەم دیالۆگە؟","options":"هەڵبژاردەکان","target":"ئامانج","targetNew":"پەنجەرەیەکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی پەڕە","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","left":"چەپ","right":"ڕاست","center":"ناوەڕاست","justify":"هاوستوونی","alignLeft":"بەهێڵ کردنی چەپ","alignRight":"بەهێڵ کردنی ڕاست","alignCenter":"بەهێڵ کردنی ناوەڕاست","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"هیچ","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست لەگەڵ بێت یان بە بێ پێوانەی یەکەی ( %2)","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \"ناو : نرخ\", جیاکردنەوەی بە فاریزە و خاڵ","cssLengthTooltip":"ژمارەیەك بنووسه بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1<span class=\"cke_accessibility\">, ئامادە نیە</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فەرمان"},"keyboardShortcut":"کورتبڕی تەختەکلیل","optionDefault":"هەمیشەیی"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/lt.js b/web/core/assets/vendor/ckeditor/lang/lt.js index 4aa8ce62bcd9f15b2ed334fa4e5375df97db4dcf..ae00a3020f23378e5ba9a02d809503c1e5bb9cea 100644 --- a/web/core/assets/vendor/ckeditor/lang/lt.js +++ b/web/core/assets/vendor/ckeditor/lang/lt.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['lt']={"widget":{"move":"Paspauskite ir tempkite kad perkeltumėte","label":"%1 valdiklis"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostą","toolbarExpand":"Išplėsti įrankių juostą","toolbarGroups":{"document":"Dokumentas","clipboard":"Atmintinė/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Įterpti","styles":"Stiliai","colors":"Spalvos","tools":"Įrankiai"},"toolbars":"Redaktoriaus įrankiai"},"table":{"border":"Rėmelio dydis","caption":"Antraštė","cell":{"menu":"Langelis","insertBefore":"Įterpti langelį prieš","insertAfter":"Įterpti langelį po","deleteCell":"Šalinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su dešine","mergeDown":"Sujungti su apačia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rūšis","rowSpan":"Eilučių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"Apatinė linija","bgColor":"Fono spalva","borderColor":"Rėmelio spalva","data":"Data","header":"Antraštė","yes":"Taip","no":"Ne","invalidWidth":"Reikšmė turi būti skaičius.","invalidHeight":"Reikšmė turi būti skaičius.","invalidRowSpan":"Reikšmė turi būti skaičius.","invalidColSpan":"Reikšmė turi būti skaičius.","chooseColor":"Pasirinkite"},"cellPad":"Tarpas nuo langelio rėmo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Įterpti stulpelį prieš","insertAfter":"Įterpti stulpelį po","deleteColumn":"Šalinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Šalinti lentelę","headers":"Antraštės","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"Nėra","headersRow":"Pirma eilutė","heightUnit":"height unit","invalidBorder":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellPadding":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellSpacing":"Reikšmė turi būti nurodyta skaičiumi.","invalidCols":"Skaičius turi būti didesnis nei 0.","invalidHeight":"Reikšmė turi būti nurodyta skaičiumi.","invalidRows":"Skaičius turi būti didesnis nei 0.","invalidWidth":"Reikšmė turi būti nurodyta skaičiumi.","menu":"Lentelės savybės","row":{"menu":"Eilutė","insertBefore":"Įterpti eilutę prieš","insertAfter":"Įterpti eilutę po","deleteRow":"Šalinti eilutes"},"rows":"Eilutės","summary":"Santrauka","title":"Lentelės savybės","toolbar":"Lentelė","widthPc":"procentais","widthPx":"taškais","widthUnit":"pločio vienetas"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"sourcedialog":{"toolbar":"Šaltinis","title":"Šaltinis"},"sourcearea":{"toolbar":"Šaltinis"},"showblocks":{"toolbar":"Rodyti blokus"},"removeformat":{"toolbar":"Panaikinti formatą"},"pastetext":{"button":"Įdėti kaip gryną tekstą","pasteNotification":"Spauskite %1 kad įklijuotumėte. Jūsų naršyklė nepalaiko įklijavimo mygtuko arba kontekstinio meniu šiam veiksmui.","title":"Įdėti kaip gryną tekstą"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?","error":"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto","title":"Įdėti iš Word","toolbar":"Įdėti iš Word"},"notification":{"closed":"Pranešimas uždarytas."},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"magicline":{"title":"Įterpti pastraipą čia"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"language":{"button":"Nustatyti kalbą","remove":"Pašalinti kalbą"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"image2":{"alt":"Alternatyvus Tekstas","btnUpload":"Siųsti į serverį","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Vaizdo informacija","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","pathName":"image","pathNameCaption":"caption","resetSize":"Atstatyti dydį","resizer":"Click and drag to resize","title":"Vaizdo savybės","uploadTab":"Siųsti","urlMissing":"Paveiksliuko nuorodos nėra.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"format":{"label":"Šrifto formatas","panelTitle":"Šrifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"Antraštinis 1","tag_h2":"Antraštinis 2","tag_h3":"Antraštinis 3","tag_h4":"Antraštinis 4","tag_h5":"Antraštinis 5","tag_h6":"Antraštinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"clipboard":{"copy":"Kopijuoti","copyError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).","cut":"Iškirpti","cutError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).","paste":"Įdėti","pasteNotification":"Spauskite %1 kad įkliuotumėte. Jūsų naršyklė nepalaiko įklijavimo paspaudus mygtuką arba kontekstinio menių galimybės.","pasteArea":"Įkelti dalį","pasteMsg":"Įklijuokite savo turinį į žemiau esantį lauką ir paspauskite OK."},"blockquote":{"toolbar":"Citata"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"about":{"copy":"Copyright © $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor 4","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:"},"editor":"Pilnas redaktorius","editorPanel":"Pilno redagtoriaus skydelis","common":{"editorHelp":"Spauskite ALT 0 dėl pagalbos","browseServer":"Naršyti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutė","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"<nėra nustatyta>","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"Iš kairės į dešinę (LTR)","langDirRtl":"Iš dešinės į kairę (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas aprašymas URL","cssClass":"Stilių lentelės klasės","advisoryTitle":"Konsultacinė antraštė","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"Peržiūrėti","resize":"Pavilkite, kad pakeistumėte dydį","generalTab":"Bendros savybės","advancedTab":"Papildomas","validateNumberFailed":"Ši reikšmė nėra skaičius.","confirmNewPage":"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?","confirmCancel":"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?","options":"Parametrai","target":"Tikslinė nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"Viršutinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","styles":"Stilius","cssClasses":"Stilių klasės","width":"Plotis","height":"Aukštis","align":"Lygiuoti","left":"Kairę","right":"Dešinę","center":"Centrą","justify":"Lygiuoti abi puses","alignLeft":"Lygiuoti kairę","alignRight":"Lygiuoti dešinę","alignCenter":"Align Center","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"Niekas","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \"vardas : reikšmė\", atskirta kabliataškiais.","cssLengthTooltip":"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1<span class=\"cke_accessibility\">, netinkamas</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tarpas","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Spartusis klavišas","optionDefault":"Numatytasis"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/lv.js b/web/core/assets/vendor/ckeditor/lang/lv.js index 2bce16140fa567e3c3d5624a1143adac8e8fa55e..2c33b50596ad2b323afa280a81fa6e89b27dcebd 100644 --- a/web/core/assets/vendor/ckeditor/lang/lv.js +++ b/web/core/assets/vendor/ckeditor/lang/lv.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['lv']={"widget":{"move":"Klikšķina un velc, lai pārvietotu","label":"logrīks %1"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"toolbar":{"toolbarCollapse":"Aizvērt rīkjoslu","toolbarExpand":"Atvērt rīkjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"Labošana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"Paragrāfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"Krāsas","tools":"Rīki"},"toolbars":"Redaktora rīkjoslas"},"table":{"border":"Rāmja izmērs","caption":"Leģenda","cell":{"menu":"Šūna","insertBefore":"Pievienot šūnu pirms","insertAfter":"Pievienot šūnu pēc","deleteCell":"Dzēst rūtiņas","merge":"Apvienot rūtiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"Sadalīt šūnu horizontāli","splitVertical":"Sadalīt šūnu vertikāli","title":"Šūnas uzstādījumi","cellType":"Šūnas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"Vārdu pārnese","hAlign":"Horizontālais novietojums","vAlign":"Vertikālais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krāsa","borderColor":"Rāmja krāsa","data":"Dati","header":"Virsraksts","yes":"Jā","no":"Nē","invalidWidth":"Šūnas platumam jābūt skaitlim","invalidHeight":"Šūnas augstumam jābūt skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jābūt veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jābūt veselam skaitlim","chooseColor":"Izvēlēties"},"cellPad":"Rūtiņu nobīde","cellSpace":"Rūtiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pēc","deleteColumn":"Dzēst kolonnas"},"columns":"Kolonnas","deleteTable":"Dzēst tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"Pirmā kolona","headersNone":"Nekas","headersRow":"Pirmā rinda","heightUnit":"height unit","invalidBorder":"Rāmju izmēram jābūt skaitlim","invalidCellPadding":"Šūnu atkāpēm jābūt pozitīvam skaitlim","invalidCellSpacing":"Šūnu atstarpēm jābūt pozitīvam skaitlim","invalidCols":"Kolonu skaitam jābūt lielākam par 0","invalidHeight":"Tabulas augstumam jābūt skaitlim","invalidRows":"Rindu skaitam jābūt lielākam par 0","invalidWidth":"Tabulas platumam jābūt skaitlim","menu":"Tabulas īpašības","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pēc","deleteRow":"Dzēst rindas"},"rows":"Rindas","summary":"Anotācija","title":"Tabulas īpašības","toolbar":"Tabula","widthPc":"procentuāli","widthPx":"pikseļos","widthUnit":"platuma mērvienība"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"sourcedialog":{"toolbar":"HTML kods","title":"HTML kods"},"sourcearea":{"toolbar":"HTML kods"},"showblocks":{"toolbar":"Parādīt blokus"},"removeformat":{"toolbar":"Noņemt stilus"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","pasteNotification":"Nospied %1 lai ielīmētu. Tavs pārlūks neatbalsta ielīmēšanu ar rīkjoslas pogām vai uznirstošās izvēlnes opciju.","title":"Ievietot kā vienkāršu tekstu"},"pastefromword":{"confirmCleanup":"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?","error":"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"notification":{"closed":"Paziņojums aizvērts."},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"magicline":{"title":"Ievietot šeit rindkopu"},"list":{"bulletedlist":"Pievienot/Noņemt vienkāršu sarakstu","numberedlist":"Numurēts saraksts"},"language":{"button":"Uzstādīt valodu","remove":"Noņemt valodu"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"image2":{"alt":"Alternatīvais teksts","btnUpload":"Nosūtīt serverim","captioned":"Attēls ar parakstu","captionPlaceholder":"Paraksts","infoTab":"Informācija par attēlu","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","pathName":"Attēls","pathNameCaption":"paraksts","resetSize":"Atjaunot sākotnējo izmēru","resizer":"Noklikšķini un pavelc lai mērogotu","title":"Attēla īpašības","uploadTab":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","altMissing":"Trūkst alternatīvais teksts"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"format":{"label":"Formāts","panelTitle":"Formāts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"Normāls teksts","tag_pre":"Formatēts teksts"},"filetools":{"loadError":"Radās kļūda nolasot failu.","networkError":"Radās tīkla kļūda, kamēr tika ielādēts fails.","httpError404":"Ielādējot failu, radās HTTP kļūda (404: Fails nav atrasts)","httpError403":"Ielādējot failu, radās HTTP kļūda (403: Pieeja liegta)","httpError":"Ielādējot failu, radās HTTP kļūda (kļūdas statuss: %1)","noUrlError":"Augšupielādes adrese nav norādīta.","responseError":"Nekorekta servera atbilde."},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"clipboard":{"copy":"Kopēt","copyError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.","cut":"Izgriezt","cutError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.","paste":"Ielīmēt","pasteNotification":"Nospied %1 lai ielīmētu. Tavs pārlūks neatbalsta ielīmēšanu ar rīkjoslas pogām vai uznirstošās izvēlnes opciju.","pasteArea":"Ielīmēšanas zona","pasteMsg":"Ielīmē saturu zemāk esošajā laukā un nospied OK."},"blockquote":{"toolbar":"Bloka citāts"},"basicstyles":{"bold":"Treknināts","italic":"Kursīvs","strike":"Pārsvītrots","subscript":"Apakšrakstā","superscript":"Augšrakstā","underline":"Pasvītrots"},"about":{"copy":"Kopēšanas tiesības © $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor 4","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:"},"editor":"Bagātinātā teksta redaktors","editorPanel":"Bagātinātā teksta redaktora panelis","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"<nav iestatīts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasīšanas virziens","langDirLtr":"No kreisās uz labo (LTR)","langDirRtl":"No labās uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"Konsultatīvs virsraksts","cssStyle":"Stils","ok":"Darīts!","cancel":"Atcelt","close":"Aizvērt","preview":"Priekšskatījums","resize":"Mērogot","generalTab":"Vispārīgi","advancedTab":"Izvērstais","validateNumberFailed":"Šī vērtība nav skaitlis","confirmNewPage":"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?","confirmCancel":"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?","options":"Uzstādījumi","target":"Mērķis","targetNew":"Jauns logs (_blank)","targetTop":"Virsējais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"Nolīdzināt","left":"Pa kreisi","right":"Pa labi","center":"Centrēti","justify":"Izlīdzināt malas","alignLeft":"Izlīdzināt pa kreisi","alignRight":"Izlīdzināt pa labi","alignCenter":"Centrēt","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"Nekas","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām mērvienībām (%2).","invalidCssLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).","invalidInlineStyle":"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc formāta \"nosaukums: vērtība\", atdalītiem ar semikolu.","cssLengthTooltip":"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>","keyboard":{"8":" atkāpšanās taustiņš","13":"Ievadīt","16":"pārslēgšanas taustiņš","17":"vadīšanas taustiņš","18":"alternēšanas taustiņš","32":"Atstarpe","35":"Beigas","36":"Mājup","46":"Dzēst","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komanda"},"keyboardShortcut":"Klaviatūras saīsne","optionDefault":"Noklusēts"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/mk.js b/web/core/assets/vendor/ckeditor/lang/mk.js index cc44a0316dbdad4256d1a765b154f79edee86d68..b4381687e6e32ec38f8a1028101bd84121175f83 100644 --- a/web/core/assets/vendor/ckeditor/lang/mk.js +++ b/web/core/assets/vendor/ckeditor/lang/mk.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['mk']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Алтернативен текст","btnUpload":"Прикачи на сервер","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Информации за сликата","lockRatio":"Зачувај пропорција","menu":"Својства на сликата","pathName":"image","pathNameCaption":"caption","resetSize":"Ресетирај големина","resizer":"Click and drag to resize","title":"Својства на сликата","uploadTab":"Прикачи","urlMissing":"Недостасува URL-то на сликата.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Контекст-мени опции"},"clipboard":{"copy":"Копирај (Copy)","copyError":"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши копирање. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)","cut":"Исечи (Cut)","cutError":"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши сечење. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)","paste":"Залепи (Paste)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Простор за залепување","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Одвоен цитат"},"basicstyles":{"bold":"Здебелено","italic":"Накривено","strike":"Прецртано","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подвлечено"},"about":{"copy":"Авторски права © $1. Сите права се задржани.","dlgTitle":"За CKEditor 4","moreInfo":"За информации околу лиценцата, ве молиме посетете го нашиот веб-сајт: "},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Притисни ALT 0 за помош","browseServer":"Пребарај низ серверот","url":"URL","protocol":"Протокол","upload":"Прикачи","uploadSubmit":"Прикачи на сервер","image":"Слика","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Поле за текст","textarea":"Големо поле за текст","hiddenField":"Скриено поле","button":"Button","select":"Selection Field","imageButton":"Копче-слика","notSet":"<not set>","id":"Id","name":"Name","langDir":"Насока на јазик","langDirLtr":"Лево кон десно","langDirRtl":"Десно кон лево","langCode":"Код на јазик","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Стил","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"Општо","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опции","target":"Target","targetNew":"Нов прозорец (_blank)","targetTop":"Најгорниот прозорец (_top)","targetSelf":"Истиот прозорец (_self)","targetParent":"Прозорец-родител (_parent)","langDirLTR":"Лево кон десно","langDirRTL":"Десно кон лево","styles":"Стил","cssClasses":"Stylesheet Classes","width":"Широчина","height":"Височина","align":"Alignment","left":"Лево","right":"Десно","center":"Во средина","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Горе","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"Никое","invalidValue":"Невалидна вредност","invalidHeight":"Височината мора да биде број.","invalidWidth":"Широчината мора да биде број.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/mn.js b/web/core/assets/vendor/ckeditor/lang/mn.js index d6417074ddb21e4d21ff9322067845e30227f72f..4fb1e6d97dd54ad76821fb09f37dc8e2d590ba43 100644 --- a/web/core/assets/vendor/ckeditor/lang/mn.js +++ b/web/core/assets/vendor/ckeditor/lang/mn.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['mn']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Холбоосууд","insert":"Оруулах","styles":"Загварууд","colors":"Онгөнүүд","tools":"Хэрэгслүүд"},"toolbars":"Болосруулагчийн хэрэгслийн самбар"},"table":{"border":"Хүрээний хэмжээ","caption":"Тайлбар","cell":{"menu":"Нүх/зай","insertBefore":"Нүх/зай өмнө нь оруулах","insertAfter":"Нүх/зай дараа нь оруулах","deleteCell":"Нүх устгах","merge":"Нүх нэгтэх","mergeRight":"Баруун тийш нэгтгэх","mergeDown":"Доош нэгтгэх","splitHorizontal":"Нүх/зайг босоогоор нь тусгаарлах","splitVertical":"Нүх/зайг хөндлөнгөөр нь тусгаарлах","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Хэвтээд тэгшлэх арга","vAlign":"Босоод тэгшлэх арга","alignBaseline":"Baseline","bgColor":"Дэвсгэр өнгө","borderColor":"Хүрээний өнгө","data":"Data","header":"Header","yes":"Тийм","no":"Үгүй","invalidWidth":"Нүдний өргөн нь тоо байх ёстой.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сонгох"},"cellPad":"Нүх доторлох(padding)","cellSpace":"Нүх хоорондын зай (spacing)","column":{"menu":"Багана","insertBefore":"Багана өмнө нь оруулах","insertAfter":"Багана дараа нь оруулах","deleteColumn":"Багана устгах"},"columns":"Багана","deleteTable":"Хүснэгт устгах","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Хүснэгтийн өргөн нь тоо байх ёстой.","menu":"Хүснэгт","row":{"menu":"Мөр","insertBefore":"Мөр өмнө нь оруулах","insertAfter":"Мөр дараа нь оруулах","deleteRow":"Мөр устгах"},"rows":"Мөр","summary":"Тайлбар","title":"Хүснэгт","toolbar":"Хүснэгт","widthPc":"хувь","widthPx":"цэг","widthUnit":"өргөний нэгж"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"sourcedialog":{"toolbar":"Код","title":"Код"},"sourcearea":{"toolbar":"Код"},"showblocks":{"toolbar":"Хавтангуудыг харуулах"},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Энгийн бичвэрээр буулгах"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word-оос буулгах","toolbar":"Word-оос буулгах"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"image2":{"alt":"Зургийг орлох бичвэр","btnUpload":"Үүнийг сервэррүү илгээ","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Зурагны мэдээлэл","lockRatio":"Радио түгжих","menu":"Зураг","pathName":"image","pathNameCaption":"caption","resetSize":"хэмжээ дахин оноох","resizer":"Click and drag to resize","title":"Зураг","uploadTab":"Илгээж ачаалах","urlMissing":"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"format":{"label":"Параргафын загвар","panelTitle":"Параргафын загвар","tag_address":"Хаяг","tag_div":"Paragraph (DIV)","tag_h1":"Гарчиг 1","tag_h2":"Гарчиг 2","tag_h3":"Гарчиг 3","tag_h4":"Гарчиг 4","tag_h5":"Гарчиг 5","tag_h6":"Гарчиг 6","tag_p":"Хэвийн","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Ишлэл хэсэг"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Хэлбэрт бичвэр боловсруулагч","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Үйлчлэгч тооцоолуур (сервэр)-ийг үзэх","url":"цахим хуудасны хаяг (URL)","protocol":"Протокол","upload":"Илгээж ачаалах","uploadSubmit":"Үүнийг үйлчлэгч тооцоолуур (сервер) лүү илгээх","image":"Зураг","flash":"Флаш хөдөлгөөнтэй зураг","form":"Маягт","checkbox":"Тэмдэглээний нүд","radio":"Радио товчлуур","textField":"Бичвэрийн талбар","textarea":"Бичвэрийн зай","hiddenField":"Далд талбар","button":"Товчлуур","select":"Сонголтын талбар","imageButton":"Зургий товчуур","notSet":"<тохируулаагүй>","id":"Id (техникийн нэр)","name":"Нэр","langDir":"Хэлний чиглэл","langDirLtr":"Зүүнээс баруун (LTR)","langDirRtl":"Баруунаас зүүн (RTL)","langCode":"Хэлний код","longDescr":"Урт тайлбарын вэб хаяг","cssClass":"Хэлбэрийн хуудасны ангиуд","advisoryTitle":"Зөвлөх гарчиг","cssStyle":"Загвар","ok":"За","cancel":"Болих","close":"Хаах","preview":"Урьдчилан харах","resize":"Resize","generalTab":"Ерөнхий","advancedTab":"Гүнзгий","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Сонголт","target":"Бай","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Зүүн талаас баруун тийшээ (LTR)","langDirRTL":"Баруун талаас зүүн тийшээ (RTL)","styles":"Загвар","cssClasses":"Хэлбэрийн хуудасны ангиуд","width":"Өргөн","height":"Өндөр","align":"Эгнээ","left":"Зүүн","right":"Баруун","center":"Төвд","justify":"Тэгшлэх","alignLeft":"Зүүн талд тулгах","alignRight":"Баруун талд тулгах","alignCenter":"Align Center","alignTop":"Дээд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ms.js b/web/core/assets/vendor/ckeditor/lang/ms.js index 72d9eeb25902f4ff73e3a92df698f0d074ed6737..a519b0f7021587de2256b196ec1b9bc12ce94984 100644 --- a/web/core/assets/vendor/ckeditor/lang/ms.js +++ b/web/core/assets/vendor/ckeditor/lang/ms.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ms']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"sourcedialog":{"toolbar":"Sumber","title":"Sumber"},"sourcearea":{"toolbar":"Sumber"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Buang Format"},"pastetext":{"button":"Tampal sebagai text biasa","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Tampal sebagai text biasa"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"image2":{"alt":"Text Alternatif","btnUpload":"Hantar ke Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info Imej","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","pathName":"image","pathNameCaption":"caption","resetSize":"Saiz Set Semula","resizer":"Click and drag to resize","title":"Ciri-ciri Imej","uploadTab":"Muat Naik","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"<tidak di set>","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Prebiu","resize":"Resize","generalTab":"Umum","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Jajaran Blok","alignLeft":"Jajaran Kiri","alignRight":"Jajaran Kanan","alignCenter":"Align Center","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/nb.js b/web/core/assets/vendor/ckeditor/lang/nb.js index 02c4d30c1f65a981d189bb3d1f72196c09dd7b40..13fa2092d718bb08a2e88408a1685203d108fa42 100644 --- a/web/core/assets/vendor/ckeditor/lang/nb.js +++ b/web/core/assets/vendor/ckeditor/lang/nb.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['nb']={"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"undo":{"redo":"Gjør om","undo":"Angre"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","heightUnit":"height unit","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis blokker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"notification":{"closed":"Varsling lukket."},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til / fjern punktliste","numberedlist":"Legg til / fjern nummerert liste"},"language":{"button":"Sett språk","remove":"Fjern språk"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image2":{"alt":"Alternativ tekst","btnUpload":"Send det til serveren","captioned":"Bilde med bildetekst","captionPlaceholder":"Bildetekst","infoTab":"Bildeinformasjon","lockRatio":"Lås forhold","menu":"Bildeegenskaper","pathName":"bilde","pathNameCaption":"bildetekst","resetSize":"Tilbakestill størrelse","resizer":"Klikk og dra for å endre størrelse","title":"Bildeegenskaper","uploadTab":"Last opp","urlMissing":"Bildets adresse mangler.","altMissing":"Alternativ tekst mangler."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"filetools":{"loadError":"Feil oppsto under filinnlesing.","networkError":"Nettverksfeil oppsto under filopplasting.","httpError404":"HTTP-feil oppsto under filopplasting (404: Fant ikke filen).","httpError403":"HTTP-feil oppsto under filopplasting (403: Ikke tillatt).","httpError":"HTTP-feil oppsto under filopplasting (feilstatus: %1).","noUrlError":"URL for opplasting er ikke oppgitt.","responseError":"Ukorrekt svar fra serveren."},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteNotification":"Trykk %1 for å lime inn. Nettleseren din støtter ikke å lime inn med knappen i verktøylinjen eller høyreklikkmenyen.","pasteArea":"Innlimingsområde","pasteMsg":"Lim inn innholdet i området nedenfor og klikk OK."},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright © $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor 4","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (LTR)","langDirRtl":"Høyre til venstre (RTL)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vinduet (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","left":"Venstre","right":"Høyre","center":"Midtstill","justify":"Blokkjuster","alignLeft":"Venstrejuster","alignRight":"Høyrejuster","alignCenter":"Midtstill","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig måleenhet (%2).","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellomrom","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Tastatursnarvei","optionDefault":"Standard"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/nl.js b/web/core/assets/vendor/ckeditor/lang/nl.js index c88a2aad2797defc24cf4ef0df41695b2ed4047d..ed2b3de429db233ec52939aa96892790fefe79a6 100644 --- a/web/core/assets/vendor/ckeditor/lang/nl.js +++ b/web/core/assets/vendor/ckeditor/lang/nl.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['nl']={"widget":{"move":"Klik en sleep om te verplaatsen","label":"%1 widget"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"table":{"border":"Randdikte","caption":"Bijschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","heightUnit":"height unit","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"sourcedialog":{"toolbar":"Broncode","title":"Broncode"},"sourcearea":{"toolbar":"Broncode"},"showblocks":{"toolbar":"Toon blokken"},"removeformat":{"toolbar":"Opmaak verwijderen"},"pastetext":{"button":"Plakken als platte tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken vanuit Word","toolbar":"Plakken vanuit Word"},"notification":{"closed":"Melding gesloten."},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"magicline":{"title":"Hier paragraaf invoeren"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"language":{"button":"Taal instellen","remove":"Taal verwijderen"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"image2":{"alt":"Alternatieve tekst","btnUpload":"Naar server verzenden","captioned":"Afbeelding met onderschrift","captionPlaceholder":"Onderschrift","infoTab":"Afbeeldingsinformatie","lockRatio":"Verhouding vergrendelen","menu":"Eigenschappen afbeelding","pathName":"afbeelding","pathNameCaption":"onderschrift","resetSize":"Afmetingen herstellen","resizer":"Klik en sleep om te herschalen","title":"Afbeeldingseigenschappen","uploadTab":"Uploaden","urlMissing":"De URL naar de afbeelding ontbreekt.","altMissing":"Alternatieve tekst ontbreekt."},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"filetools":{"loadError":"Fout tijdens lezen van bestand.","networkError":"Netwerkfout tijdens uploaden van bestand.","httpError404":"HTTP fout tijdens uploaden van bestand (404: Bestand niet gevonden).","httpError403":"HTTP fout tijdens uploaden van bestand (403: Verboden).","httpError":"HTTP fout tijdens uploaden van bestand (fout status: %1).","noUrlError":"Upload URL is niet gedefinieerd.","responseError":"Ongeldig antwoord van server."},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"contextmenu":{"options":"Contextmenu opties"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Plakgebied","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citaatblok"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"about":{"copy":"Copyright © $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor 4","moreInfo":"Bezoek onze website voor licentieinformatie:"},"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet-klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","left":"Links","right":"Rechts","center":"Centreren","justify":"Uitvullen","alignLeft":"Links uitlijnen","alignRight":"Rechts uitlijnen","alignCenter":"Centreren","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spatie","35":"End","36":"Home","46":"Verwijderen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Sneltoets","optionDefault":"Standaard"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/no.js b/web/core/assets/vendor/ckeditor/lang/no.js index 2e3f09fc81237c910c867d1ca9e8fe43e9baeff3..32a37da9e59d8173ffe47777f5372c2dd9fb530d 100644 --- a/web/core/assets/vendor/ckeditor/lang/no.js +++ b/web/core/assets/vendor/ckeditor/lang/no.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['no']={"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"undo":{"redo":"Gjør om","undo":"Angre"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","heightUnit":"height unit","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis blokker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"language":{"button":"Sett språk","remove":"Fjern språk"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image2":{"alt":"Alternativ tekst","btnUpload":"Send det til serveren","captioned":"Bilde med bildetekst","captionPlaceholder":"Billedtekst","infoTab":"Bildeinformasjon","lockRatio":"Lås forhold","menu":"Bildeegenskaper","pathName":"bilde","pathNameCaption":"bildetekst","resetSize":"Tilbakestill størrelse","resizer":"Klikk og dra for å endre størrelse","title":"Bildeegenskaper","uploadTab":"Last opp","urlMissing":"Bildets adresse mangler.","altMissing":"Alternativ tekst mangler."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"filetools":{"loadError":"Det oppstod en feil under lesing av filen.","networkError":"Det oppstod en nettverksfeil under opplasting av filen.","httpError404":"En HTTP-feil oppstod under opplasting av filen (404: Filen finnes ikke).","httpError403":"En HTTP-feil oppstod under opplasting av filen (403: Ingen tilgang).","httpError":"En HTTP-feil oppstod under opplasting av filen (feilkode: %1).","noUrlError":"Opplastings-URL er ikke definert.","responseError":"Feil svar fra serveren."},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteNotification":"Trykk %1 for å lime inn. På grunn av manglende støtte i nettleseren din, kan du ikke lime inn via knapperaden eller kontekstmenyen.","pasteArea":"Innlimingsområde","pasteMsg":"Lim inn innholdet i området nedenfor og trykk OK."},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright © $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor 4","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","left":"Venstre","right":"Høyre","center":"Midtjuster","justify":"Blokkjuster","alignLeft":"Venstrejuster","alignRight":"Høyrejuster","alignCenter":"Midtjustér","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidLength":"Verdien i \"%1\"-feltet må være et positivt tall med eller uten en gyldig måleenhet (%2).","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellomrom","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Hurtigtast","optionDefault":"Standard"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/oc.js b/web/core/assets/vendor/ckeditor/lang/oc.js index 7cc8c324e4ff7dc1eae2348cccd91c21e3c94238..379a2fa96564c46f637a3bf6dc59b2e67fa0acf5 100644 --- a/web/core/assets/vendor/ckeditor/lang/oc.js +++ b/web/core/assets/vendor/ckeditor/lang/oc.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['oc']={"widget":{"move":"Clicar e lisar per desplaçar","label":"Element %1"},"undo":{"redo":"Refar","undo":"Restablir"},"toolbar":{"toolbarCollapse":"Enrotlar la barra d'aisinas","toolbarExpand":"Desenrotlar la barra d'aisinas","toolbarGroups":{"document":"Document","clipboard":"Quichapapièr/Desfar","editing":"Edicion","forms":"Formularis","basicstyles":"Estils de basa","paragraph":"Paragraf","links":"Ligams","insert":"Inserir","styles":"Estils","colors":"Colors","tools":"Aisinas"},"toolbars":"Barras d'aisinas de l'editor"},"table":{"border":"Talha de la bordadura","caption":"Títol del tablèu","cell":{"menu":"Cellula","insertBefore":"Inserir una cellula abans","insertAfter":"Inserir una cellula aprèp","deleteCell":"Suprimir las cellulas","merge":"Fusionar las cellulas","mergeRight":"Fusionar cap a dreita","mergeDown":"Fusionar cap aval","splitHorizontal":"Separar la cellula orizontalament","splitVertical":"Separar la cellula verticalament","title":"Proprietats de la cellula","cellType":"Tipe de cellula","rowSpan":"Linhas ocupadas","colSpan":"Colomnas ocupadas","wordWrap":"Cesura","hAlign":"Alinhament orizontal","vAlign":"Alinhament vertical","alignBaseline":"Linha de basa","bgColor":"Color de rèireplan","borderColor":"Color de bordadura","data":"Donadas","header":"Entèsta","yes":"Òc","no":"Non","invalidWidth":"La largor de la cellula deu èsser un nombre.","invalidHeight":"La nautor de la cellula deu èsser un nombre.","invalidRowSpan":"Lo nombre de linhas ocupadas deu èsser un nombre entièr.","invalidColSpan":"Lo nombre de colomnas ocupadas deu èsser un nombre entièr.","chooseColor":"Causir"},"cellPad":"Marge intèrne de las cellulas","cellSpace":"Espaçament entre las cellulas","column":{"menu":"Colomna","insertBefore":"Inserir una colomna abans","insertAfter":"Inserir una colomna aprèp","deleteColumn":"Suprimir las colomnas"},"columns":"Colomnas","deleteTable":"Suprimir lo tablèu","headers":"Entèstas","headersBoth":"Los dos","headersColumn":"Primièra colomna","headersNone":"Pas cap","headersRow":"Primièra linha","heightUnit":"height unit","invalidBorder":"La talha de la bordadura deu èsser un nombre.","invalidCellPadding":"Lo marge intèrne de las cellulas deu èsser un nombre positiu.","invalidCellSpacing":"L'espaçament entre las cellulas deu èsser un nombre positiu.","invalidCols":"Lo nombre de colomnas deu èsser superior a 0.","invalidHeight":"La nautor del tablèu deu èsser un nombre.","invalidRows":"Lo nombre de linhas deu èsser superior a 0.","invalidWidth":"La largor del tablèu deu èsser un nombre.","menu":"Proprietats del tablèu","row":{"menu":"Linha","insertBefore":"Inserir una linha abans","insertAfter":"Inserir una linha aprèp","deleteRow":"Suprimir las linhas"},"rows":"Linhas","summary":"Resumit (descripcion)","title":"Proprietats del tablèu","toolbar":"Tablèu","widthPc":"per cent","widthPx":"pixèls","widthUnit":"unitat de largor"},"stylescombo":{"label":"Estils","panelTitle":"Estils de mesa en pagina","panelTitle1":"Estils de blòt","panelTitle2":"Estils en linha","panelTitle3":"Estils d'objècte"},"specialchar":{"options":"Opcions dels caractèrs especials","title":"Seleccionar un caractèr","toolbar":"Inserir un caractèr especial"},"sourcedialog":{"toolbar":"Font","title":"Font"},"sourcearea":{"toolbar":"Font"},"showblocks":{"toolbar":"Afichar los blòts"},"removeformat":{"toolbar":"Suprimir la mesa en forma"},"pastetext":{"button":"Pegar coma tèxte brut","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Sembla que lo tèxte de pegar proven de Word. Lo volètz netejar abans de lo pegar ?","error":"Las donadas pegadas an pas pogut èsser netejadas a causa d'una error intèrna","title":"Pegar dempuèi Word","toolbar":"Pegar dempuèi Word"},"notification":{"closed":"Notificacion tampada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir un paragraf aicí"},"list":{"bulletedlist":"Inserir/Suprimir una lista amb de piuses","numberedlist":"Inserir/Suprimir una lista numerotada"},"language":{"button":"Definir la lenga","remove":"Suprimir la lenga"},"indent":{"indent":"Aumentar l'alinèa","outdent":"Dmesir l'alinèa"},"image2":{"alt":"Tèxte alternatiu","btnUpload":"Mandar sul servidor","captioned":"Imatge amb legenda","captionPlaceholder":"Legenda","infoTab":"Informacions sus l'imatge","lockRatio":"Conservar las proporcions","menu":"Proprietats de l'imatge","pathName":"imatge","pathNameCaption":"legenda","resetSize":"Reïnicializar la talha","resizer":"Clicar e lisar per redimensionar","title":"Proprietats de l'imatge","uploadTab":"Mandar","urlMissing":"L'URL font de l'imatge es mancanta.","altMissing":"Lo tèxte alternatiu es mancant."},"horizontalrule":{"toolbar":"Inserir una linha orizontala"},"format":{"label":"Format","panelTitle":"Format de paragraf","tag_address":"Adreça","tag_div":"Division (DIV)","tag_h1":"Títol 1","tag_h2":"Títol 2","tag_h3":"Títol 3","tag_h4":"Títol 4","tag_h5":"Títol 5","tag_h6":"Títol 6","tag_p":"Normal","tag_pre":"Preformatat"},"filetools":{"loadError":"Una error s'es produita pendent la lectura del fichièr.","networkError":"Una error de ret s'es produita pendent lo mandadís del fichièr.","httpError404":"Una error HTTP s'es produita pendent lo mandadís del fichièr (404 : fichièr pas trobat).","httpError403":"Una error HTTP s'es produita pendent lo mandadís del fichièr (403 : accès refusat).","httpError":"Una error HTTP s'es produita pendent lo mandadís del fichièr (error : %1).","noUrlError":"L'URL de mandadís es pas especificada.","responseError":"Responsa del servidor incorrècta."},"elementspath":{"eleLabel":"Camin dels elements","eleTitle":"Element %1"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Los paramètres de seguretat de vòstre navigador autorizan pas l'editor a executar automaticament l'operacion « Copiar ». Utilizatz l'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+C).","cut":"Talhar","cutError":"Los paramètres de seguretat de vòstre navigador autorizan pas l'editor a executar automaticament l'operacion « Talhar ». Utilizatz l'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citacion"},"basicstyles":{"bold":"Gras","italic":"Italica","strike":"Raiat","subscript":"Indici","superscript":"Exponent","underline":"Solinhat"},"about":{"copy":"Copyright © $1. Totes los dreits reservats.","dlgTitle":"A prepaus de CKEditor 4","moreInfo":"Per las informacions de licéncia, visitatz nòstre site web :"},"editor":"Editor de tèxte enriquit","editorPanel":"Tablèu de bòrd de l'editor de tèxte enriquit","common":{"editorHelp":"Utilisatz l'acorchi Alt-0 per obténer d'ajuda","browseServer":"Percórrer lo servidor","url":"URL","protocol":"Protocòl","upload":"Mandar","uploadSubmit":"Mandar sul servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casa de marcar","radio":"Boton ràdio","textField":"Camp tèxte","textarea":"Zòna de tèxte","hiddenField":"Camp invisible","button":"Boton","select":"Lista desenrotlanta","imageButton":"Boton amb imatge","notSet":"<indefinit>","id":"Id","name":"Nom","langDir":"Sens d'escritura","langDirLtr":"Esquèrra a dreita (LTR)","langDirRtl":"Dreita a esquèrra (RTL)","langCode":"Còdi de lenga","longDescr":"URL de descripcion longa","cssClass":"Classas d'estil","advisoryTitle":"Infobulla","cssStyle":"Estil","ok":"D'acòrdi","cancel":"Anullar","close":"Tampar","preview":"Previsualizar","resize":"Redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquesta valor es pas un nombre.","confirmNewPage":"Los cambiaments pas salvats seràn perduts. Sètz segur que volètz cargar una novèla pagina ?","confirmCancel":"Certanas opcions son estadas modificadas. Sètz segur que volètz tampar ?","options":"Opcions","target":"Cibla","targetNew":"Novèla fenèstra (_blank)","targetTop":"Fenèstra superiora (_top)","targetSelf":"Meteissa fenèstra (_self)","targetParent":"Fenèstra parent (_parent)","langDirLTR":"Esquèrra a dreita (LTR)","langDirRTL":"Dreita a esquèrra (RTL)","styles":"Estil","cssClasses":"Classas d'estil","width":"Largor","height":"Nautor","align":"Alinhament","left":"Esquèrra","right":"Dreita","center":"Centrar","justify":"Justificar","alignLeft":"Alinhar a esquèrra","alignRight":"Alinhar a dreita","alignCenter":"Align Center","alignTop":"Naut","alignMiddle":"Mitan","alignBottom":"Bas","alignNone":"Pas cap","invalidValue":"Valor invalida.","invalidHeight":"La nautor deu èsser un nombre.","invalidWidth":"La largor deu èsser un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valor especificada pel camp « %1 » deu èsser un nombre positiu amb o sens unitat de mesura CSS valid (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"La valor especificada pel camp « %1 » deu èsser un nombre positiu amb o sens unitat de mesura HTML valid (px o %).","invalidInlineStyle":"La valor especificada per l'estil en linha deu èsser compausada d'un o mantun parelh al format « nom : valor », separats per de punts-virgulas.","cssLengthTooltip":"Entrar un nombre per una valor en pixèls o un nombre amb una unitat de mesura CSS valida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Retorn","13":"Entrada","16":"Majuscula","17":"Ctrl","18":"Alt","32":"Espaci","35":"Fin","36":"Origina","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comanda"},"keyboardShortcut":"Acorchi de clavièr","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/pl.js b/web/core/assets/vendor/ckeditor/lang/pl.js index 580dd4cb4210521da45ed1e0c02195bf0022479c..01a9c95001c19fbab5064fd3d748cd423ef5b8fa 100644 --- a/web/core/assets/vendor/ckeditor/lang/pl.js +++ b/web/core/assets/vendor/ckeditor/lang/pl.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['pl']={"widget":{"move":"Kliknij i przeciągnij, by przenieść.","label":"Widget %1"},"undo":{"redo":"Ponów","undo":"Cofnij"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","heightUnit":"height unit","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"sourcedialog":{"toolbar":"Źródło dokumentu","title":"Źródło dokumentu"},"sourcearea":{"toolbar":"Źródło dokumentu"},"showblocks":{"toolbar":"Pokaż bloki"},"removeformat":{"toolbar":"Usuń formatowanie"},"pastetext":{"button":"Wklej jako czysty tekst","pasteNotification":"Naciśnij %1 by wkleić tekst. Twoja przeglądarka nie obsługuje wklejania za pomocą przycisku paska narzędzi lub opcji menu kontekstowego.","title":"Wklej jako czysty tekst"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"notification":{"closed":"Powiadomienie zostało zamknięte."},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"magicline":{"title":"Wstaw nowy akapit"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"language":{"button":"Ustaw język","remove":"Usuń język"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"image2":{"alt":"Tekst zastępczy","btnUpload":"Wyślij","captioned":"Obrazek z podpisem","captionPlaceholder":"Podpis","infoTab":"Informacje o obrazku","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","pathName":"obrazek","pathNameCaption":"podpis","resetSize":"Przywróć rozmiar","resizer":"Kliknij i przeciągnij, by zmienić rozmiar.","title":"Właściwości obrazka","uploadTab":"Wyślij","urlMissing":"Podaj adres URL obrazka.","altMissing":"Podaj tekst zastępczy obrazka."},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"filetools":{"loadError":"Błąd podczas odczytu pliku.","networkError":"W trakcie wysyłania pliku pojawił się błąd sieciowy.","httpError404":"Błąd HTTP w trakcie wysyłania pliku (404: Nie znaleziono pliku).","httpError403":"Błąd HTTP w trakcie wysyłania pliku (403: Zabroniony).","httpError":"Błąd HTTP w trakcie wysyłania pliku (status błędu: %1).","noUrlError":"Nie zdefiniowano adresu URL do przesłania pliku.","responseError":"Niepoprawna odpowiedź serwera."},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"contextmenu":{"options":"Opcje menu kontekstowego"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteNotification":"Naciśnij %1 by wkleić tekst. Twoja przeglądarka nie pozwala na wklejanie za pomocą przycisku paska narzędzi lub opcji menu kontekstowego.","pasteArea":"Miejsce do wklejenia treści","pasteMsg":"Wklej treść do obszaru poniżej i naciśnij OK."},"blockquote":{"toolbar":"Cytat"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"about":{"copy":"Copyright © $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor 4","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:"},"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","left":"Do lewej","right":"Do prawej","center":"Do środka","justify":"Wyjustuj","alignLeft":"Wyrównaj do lewej","alignRight":"Wyrównaj do prawej","alignCenter":"Wyśrodkuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości (%2).","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"spacja","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Skrót klawiszowy","optionDefault":"Domyślny"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/pt-br.js b/web/core/assets/vendor/ckeditor/lang/pt-br.js index f7b0e8445e37bc0472b1aeab6807218126958ec2..bed125efcef5bb3aa80d5826c5c10b5ca91f2e55 100644 --- a/web/core/assets/vendor/ckeditor/lang/pt-br.js +++ b/web/core/assets/vendor/ckeditor/lang/pt-br.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.lang['pt-br']={"widget":{"move":"Click e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Desfazer"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","heightUnit":"height unit","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"sourcedialog":{"toolbar":"Código-Fonte","title":"Código-Fonte"},"sourcearea":{"toolbar":"Código-Fonte"},"showblocks":{"toolbar":"Mostrar blocos de código"},"removeformat":{"toolbar":"Remover Formatação"},"pastetext":{"button":"Colar como Texto sem Formatação","pasteNotification":"Pressione %1 para colar. Seu navegador não suporta colar a partir do botão da barra de ferramentas ou do menu de contexto.","title":"Colar como Texto sem Formatação"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"notification":{"closed":"Notificação fechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"magicline":{"title":"Insera um parágrafo aqui"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"language":{"button":"Configure o Idioma","remove":"Remover Idioma"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar para o Servidor","captioned":"Legenda da Imagem","captionPlaceholder":"Legenda","infoTab":"Informações da Imagem","lockRatio":"Travar Proporções","menu":"Formatar Imagem","pathName":"Imagem","pathNameCaption":"Legenda","resetSize":"Redefinir para o Tamanho Original","resizer":"Click e arraste para redimensionar","title":"Formatar Imagem","uploadTab":"Enviar ao Servidor","urlMissing":"URL da imagem está faltando.","altMissing":"Texto alternativo não informado."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"filetools":{"loadError":"Um erro ocorreu durante a leitura do arquivo.","networkError":"Um erro de rede ocorreu durante o envio do arquivo.","httpError404":"Um erro HTTP ocorreu durante o envio do arquivo (404: Arquivo não encontrado).","httpError403":"Um erro HTTP ocorreu durante o envio do arquivo (403: Proibido).","httpError":"Um erro HTTP ocorreu durante o envio do arquivo (status do erro: %1)","noUrlError":"A URL de upload não está definida.","responseError":"Resposta incorreta do servidor."},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opções Menu de Contexto"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Área para Colar","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"about":{"copy":"Copyright © $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informações sobre a licença por favor visite o nosso site:"},"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Área de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","left":"Esquerda","right":"Direita","center":"Centralizado","justify":"Justificar","alignLeft":"Alinhar Esquerda","alignRight":"Alinhar Direita","alignCenter":"Centralizar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidLength":"Valor especifico para o campo \"%1\" deve ser um número positivo com ou sem uma unidade mensurável (%2) válida.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Tecla Retroceder","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tecla Espaço","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atalho do teclado","optionDefault":"Padrão"}}; \ No newline at end of file +CKEDITOR.lang['pt-br']={"widget":{"move":"Click e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Desfazer"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","heightUnit":"height unit","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"sourcedialog":{"toolbar":"Código-Fonte","title":"Código-Fonte"},"sourcearea":{"toolbar":"Código-Fonte"},"showblocks":{"toolbar":"Mostrar blocos de código"},"removeformat":{"toolbar":"Remover Formatação"},"pastetext":{"button":"Colar como Texto sem Formatação","pasteNotification":"Pressione %1 para colar. Seu navegador não suporta colar a partir do botão da barra de ferramentas ou do menu de contexto.","title":"Colar como Texto sem Formatação"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"notification":{"closed":"Notificação fechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"magicline":{"title":"Insera um parágrafo aqui"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"language":{"button":"Configure o Idioma","remove":"Remover Idioma"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar para o Servidor","captioned":"Legenda da Imagem","captionPlaceholder":"Legenda","infoTab":"Informações da Imagem","lockRatio":"Travar Proporções","menu":"Formatar Imagem","pathName":"Imagem","pathNameCaption":"Legenda","resetSize":"Redefinir para o Tamanho Original","resizer":"Click e arraste para redimensionar","title":"Formatar Imagem","uploadTab":"Enviar ao Servidor","urlMissing":"URL da imagem está faltando.","altMissing":"Texto alternativo não informado."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"filetools":{"loadError":"Um erro ocorreu durante a leitura do arquivo.","networkError":"Um erro de rede ocorreu durante o envio do arquivo.","httpError404":"Um erro HTTP ocorreu durante o envio do arquivo (404: Arquivo não encontrado).","httpError403":"Um erro HTTP ocorreu durante o envio do arquivo (403: Proibido).","httpError":"Um erro HTTP ocorreu durante o envio do arquivo (status do erro: %1)","noUrlError":"A URL de upload não está definida.","responseError":"Resposta incorreta do servidor."},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opções Menu de Contexto"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteNotification":"Pressione %1 para colar. Seu navegador não permite colar pelos botões da barra de tarefas ou pelo menu de contexto.","pasteArea":"Área para Colar","pasteMsg":"Cole o conteúdo na área abaixo e pressione OK."},"blockquote":{"toolbar":"Citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"about":{"copy":"Copyright © $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informações sobre a licença por favor visite o nosso site:"},"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Área de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","left":"Esquerda","right":"Direita","center":"Centralizado","justify":"Justificar","alignLeft":"Alinhar Esquerda","alignRight":"Alinhar Direita","alignCenter":"Centralizar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidLength":"Valor especifico para o campo \"%1\" deve ser um número positivo com ou sem uma unidade mensurável (%2) válida.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Tecla Retroceder","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tecla Espaço","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atalho do teclado","optionDefault":"Padrão"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/pt.js b/web/core/assets/vendor/ckeditor/lang/pt.js index 69f760af84973723c5503855bcedf7073f170a9d..e928d0baa60f3d7e95e531c9e42ce075a258437c 100644 --- a/web/core/assets/vendor/ckeditor/lang/pt.js +++ b/web/core/assets/vendor/ckeditor/lang/pt.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['pt']={"widget":{"move":"Clique e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Anular"},"toolbar":{"toolbarCollapse":"Ocultar barra de ferramentas","toolbarExpand":"Expandir barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de barras de ferramentas"},"table":{"border":"Tamanho do contorno","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula antes","insertAfter":"Inserir célula depois","deleteCell":"Apagar células","merge":"Unir células","mergeRight":"Unir à direita","mergeDown":"Fundir abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas na célula","colSpan":"Colunas na célula","wordWrap":"Moldar texto","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Linha base","bgColor":"Cor de fundo","borderColor":"Cor da margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As linhas da célula devem ser um número inteiro.","invalidColSpan":"As colunas da célula devem ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Espaço interior","cellSpace":"Espaçamento de célula","column":{"menu":"Coluna","insertBefore":"Inserir coluna antes","insertAfter":"Inserir coluna depois","deleteColumn":"Apagar colunas"},"columns":"Colunas","deleteTable":"Apagar tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","heightUnit":"height unit","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número de linhas tem de ser maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da tabela","row":{"menu":"Linha","insertBefore":"Inserir linha antes","insertAfter":"Inserir linha depois","deleteRow":"Apagar linhas"},"rows":"Linhas","summary":"Resumo","title":"Propriedades da tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"píxeis","widthUnit":"unidade da largura"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos nas etiquetas","panelTitle3":"Estilos em objeto"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir carácter especial"},"sourcedialog":{"toolbar":"Fonte","title":"Fonte"},"sourcearea":{"toolbar":"Fonte"},"showblocks":{"toolbar":"Exibir blocos"},"removeformat":{"toolbar":"Limpar formatação"},"pastetext":{"button":"Colar como texto simples","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Colar como texto simples"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpar o código antes de o colar?","error":"Não foi possível limpar a informação colada devido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"notification":{"closed":"Notificação encerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir parágrafo aqui"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"language":{"button":"Definir Idioma","remove":"Remover idioma"},"indent":{"indent":"Aumentar avanço","outdent":"Diminuir avanço"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar para o servidor","captioned":"Imagem legendada","captionPlaceholder":"Legenda","infoTab":"Informação da imagem","lockRatio":"Proporcional","menu":"Propriedades da imagem","pathName":"imagem","pathNameCaption":"legenda","resetSize":"Tamanho original","resizer":"Clique e arraste para redimensionar","title":"Propriedades da imagem","uploadTab":"Carregar","urlMissing":"O URL de origem da imagem está em falta.","altMissing":"Texto alternativo em falta."},"horizontalrule":{"toolbar":"Inserir linha horizontal"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"filetools":{"loadError":"Ocorreu um erro ao ler o ficheiro","networkError":"Ocorreu um erro de rede ao carregar o ficheiro.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Caminho dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Menu de opções de contexto"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Área de colagem","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Bloco de citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à linha","superscript":"Superior à linha","underline":"Sublinhado"},"about":{"copy":"Direitos de Autor © $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informação sobre licenciamento visite o nosso sítio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Painel do editor de texto enriquecido","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Navegar no servidor","url":"URL","protocol":"Protocolo","upload":"Carregar","uploadSubmit":"Enviar para o servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de verificação","radio":"Botão","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botão","select":"Campo de seleção","imageButton":"Botão da imagem","notSet":"<Não definido>","id":"ID","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do idioma","longDescr":"Descrição completa do URL","cssClass":"Classes de estilo das folhas","advisoryTitle":"Título consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova janela (_blank)","targetTop":"Janela superior (_top)","targetSelf":"Mesma janela (_self)","targetParent":"Janela dependente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de folhas de estilo","width":"Largura","height":"Altura","align":"Alinhamento","left":"Esquerda","right":"Direita","center":"Centrado","justify":"Justificado","alignLeft":"Alinhar à esquerda","alignRight":"Alinhar à direita","alignCenter":"Centrado","alignTop":"Topo","alignMiddle":"Meio","alignBottom":"Base","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em píxeis ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Espaço","35":"Fim","36":"Entrada","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Padrão"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ro.js b/web/core/assets/vendor/ckeditor/lang/ro.js index 7c38515742fef15bc733d743baa374bd3eae3e77..695ea26c6f36c9c9ab307932cc57b3c03cf6fe6d 100644 --- a/web/core/assets/vendor/ckeditor/lang/ro.js +++ b/web/core/assets/vendor/ckeditor/lang/ro.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ro']={"widget":{"move":"Apasă și trage pentru a muta","label":"%1 widget"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"toolbar":{"toolbarCollapse":"Micșorează Bara","toolbarExpand":"Mărește Bara","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editează bara de unelte"},"table":{"border":"Mărimea marginii","caption":"Titlu (Caption)","cell":{"menu":"Celulă","insertBefore":"Inserează celulă înainte","insertAfter":"Inserează celulă după","deleteCell":"Şterge celule","merge":"Uneşte celule","mergeRight":"Uneşte la dreapta","mergeDown":"Uneşte jos","splitHorizontal":"Împarte celula pe orizontală","splitVertical":"Împarte celula pe verticală","title":"Proprietăți celulă","cellType":"Tipul celulei","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Aliniament orizontal","vAlign":"Aliniament vertical","alignBaseline":"Baseline","bgColor":"Culoare fundal","borderColor":"Culoare bordură","data":"Data","header":"Antet","yes":"Da","no":"Nu","invalidWidth":"Lățimea celulei trebuie să fie un număr.","invalidHeight":"Înălțimea celulei trebuie să fie un număr.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Alege"},"cellPad":"Spaţiu în cadrul celulei","cellSpace":"Spaţiu între celule","column":{"menu":"Coloană","insertBefore":"Inserează coloană înainte","insertAfter":"Inserează coloană după","deleteColumn":"Şterge celule"},"columns":"Coloane","deleteTable":"Şterge tabel","headers":"Antente","headersBoth":"Ambele","headersColumn":"Prima coloană","headersNone":"Nimic","headersRow":"Primul rând","heightUnit":"height unit","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","invalidRows":"Numărul rândurilor trebuie să fie mai mare decât 0.","invalidWidth":"Lățimea tabelului trebuie să fie un număr.","menu":"Proprietăţile tabelului","row":{"menu":"Rând","insertBefore":"Inserează rând înainte","insertAfter":"Inserează rând după","deleteRow":"Şterge rânduri"},"rows":"Rânduri","summary":"Rezumat","title":"Proprietăţile tabelului","toolbar":"Tabel","widthPc":"procente","widthPx":"pixeli","widthUnit":"unitate lățime"},"stylescombo":{"label":"Stil","panelTitle":"Formatare stilurilor","panelTitle1":"Bloc stiluri","panelTitle2":"Stiluri înșiruite","panelTitle3":"Stiluri obiect"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"sourcedialog":{"toolbar":"Sursa","title":"Sursa"},"sourcearea":{"toolbar":"Sursa"},"showblocks":{"toolbar":"Arată blocurile"},"removeformat":{"toolbar":"Înlătură formatarea"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Adaugă ca text simplu (Plain Text)"},"pastefromword":{"confirmCleanup":"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?","error":"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne","title":"Adaugă din Word","toolbar":"Adaugă din Word"},"notification":{"closed":"Notificare închisă."},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"magicline":{"title":"Inserează paragraf aici"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"language":{"button":"Alege limba","remove":"Șterge limba deja selectată"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"image2":{"alt":"Text alternativ","btnUpload":"Încarcă pe server","captioned":"Descris","captionPlaceholder":"Descriere implicită","infoTab":"Informaţii despre imagine","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","pathName":"Adresa căii","pathNameCaption":"Descrierea numelui căii","resetSize":"Resetează mărimea","resizer":"Redimensionare dinamică","title":"Proprietăţile imaginii","uploadTab":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","altMissing":"Textul alternativ descriptive lipsește!"},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"format":{"label":"Formatare","panelTitle":"Formatare","tag_address":"Adresă","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatat"},"filetools":{"loadError":"Eroare în timpul citirii fișierului.","networkError":"Eroare de rețea în timpul încărcării fișierului.","httpError404":"Eroare HTTP în timpul încărcării fișierului (404: Fișier negăsit).","httpError403":"Eroare HTTP în timpul încărcării fișierului (403: Operașie nepermisă).","httpError":"Eroare HTTP în timpul încărcării fișierului (stare eroiare: %1).","noUrlError":"URL-ul de ăncărcare nu este specificat.","responseError":"Răspuns server incorect."},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"Nume element"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"clipboard":{"copy":"Copiază","copyError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).","cut":"Tăiere","cutError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).","paste":"Adaugă","pasteNotification":"Apasă %1 pentru adăugare. Navigatorul (browser) tău nu suportă adăugarea din clipboard cu butonul din toolbar sau cu opțiunea din meniul contextual.","pasteArea":"Suprafața de adăugare","pasteMsg":"Adaugă conținutul tău înăuntru zonei de mai jos și apasă OK."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"about":{"copy":"Copyright © $1. Toate drepturile rezervate.","dlgTitle":"Despre CKEeditor 4","moreInfo":"Pentru informații despre licențiere, vă rugăm vizitați web site-ul nostru:"},"editor":"Editor de text îmbogățit","editorPanel":"Panoul editorului de text îmbogățit","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoiește fișiere","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","flash":"Flash","form":"Formular (Form)","checkbox":"Bifă (Checkbox)","radio":"Buton radio (RadioButton)","textField":"Câmp text (TextField)","textarea":"Suprafaţă text (Textarea)","hiddenField":"Câmp ascuns (HiddenField)","button":"Buton","select":"Câmp selecţie (SelectionField)","imageButton":"Buton imagine (ImageButton)","notSet":"fără setări","id":"identificator","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"de la stânga la dreapta (LTR)","langDirRtl":"de la dreapta la stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea completă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Redimensionează","generalTab":"General","advancedTab":"Avansat","validateNumberFailed":"Această valoare nu este un număr!","confirmNewPage":"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?","confirmCancel":"Ai schimbat câteva opțiuni. Ești sigur că dorești să închiz fereastra de dialog?","options":"Opțiuni","target":"Țintă","targetNew":"Fereastră nouă (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"În aceeași fereastră (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Stânga spre Dreapta (LTR)","langDirRTL":"Dreapta spre Stânga (RTL)","styles":"Stil","cssClasses":"Clase foaie de stil","width":"Lăţime","height":"Înălţime","align":"Aliniere","left":"Aliniază la stânga","right":"Aliniază la dreapta","center":"Aliniază pe centru","justify":"Aliniere în bloc (Justify)","alignLeft":"Aliniere la stânga","alignRight":"Aliniere la dreapta","alignCenter":"Aliniere centru","alignTop":"Aliniere sus","alignMiddle":"Aliniere la mijloc","alignBottom":"Aliniere jos","alignNone":"Fără aliniere","invalidValue":"Valoare invalidă","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă (%2).","invalidCssLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","invalidHtmlLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă HTML (px sau %).","invalidInlineStyle":"Valoarea specificată pentru stil trebuie să conțină una sau mai multe construcții de tipul \"name : value\", separate prin punct și virgulă.","cssLengthTooltip":"Introdu un număr pentru o valoare în pixeli sau un număr pentru o unitate de măsură validă CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Bară spațiu","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Scurtături tastatură","optionDefault":"Implicit"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ru.js b/web/core/assets/vendor/ckeditor/lang/ru.js index 0d4c8dfab3a9783579e2039a8d70e8e86a4f579b..b1818207260735641ba5c75d7934ee71debb3e6e 100644 --- a/web/core/assets/vendor/ckeditor/lang/ru.js +++ b/web/core/assets/vendor/ckeditor/lang/ru.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ru']={"widget":{"move":"Нажмите и перетащите, чтобы переместить","label":"%1 виджет"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по вертикали","splitVertical":"Разделить ячейку по горизонтали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","heightUnit":"height unit","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcedialog":{"toolbar":"Исходник","title":"Источник"},"sourcearea":{"toolbar":"Источник"},"showblocks":{"toolbar":"Отображать блоки"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"notification":{"closed":"Уведомление закрыто"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"language":{"button":"Установка языка","remove":"Удалить язык"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image2":{"alt":"Альтернативный текст","btnUpload":"Загрузить на сервер","captioned":"Отображать название","captionPlaceholder":"Название","infoTab":"Данные об изображении","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","pathName":"изображение","pathNameCaption":"название","resetSize":"Вернуть обычные размеры","resizer":"Нажмите и растяните","title":"Свойства изображения","uploadTab":"Загрузка файла","urlMissing":"Не указана ссылка на изображение.","altMissing":"Не задан альтернативный текст"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"filetools":{"loadError":"Ошибка при чтении файла","networkError":"Сетевая ошибка при загрузке файла","httpError404":"HTTP ошибка при загрузке файла (404: Файл не найден)","httpError403":"HTTP ошибка при загрузке файла (403: Запрещено)","httpError":"HTTP ошибка при загрузке файла (%1)","noUrlError":"Не определен URL для загрузки файлов","responseError":"Некорректный ответ сервера"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteNotification":"Для вставки нажмите %1. Ваш браузер не поддерживает возможность вставки через панель инструментов или контекстное меню","pasteArea":"Область вставки","pasteMsg":"Вставьте контент в эту область и нажмите OK"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright © $1. Все права защищены.","dlgTitle":"О CKEditor 4","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","left":"По левому краю","right":"По правому краю","center":"По центру","justify":"По ширине","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidLength":"Указанное значение для поля \"%1\" должно быть положительным числом без или с корректным символом единицы измерения (%2)","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>","keyboard":{"8":"Backspace","13":"Ввод","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробел","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Комбинация клавиш","optionDefault":"По умолчанию"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/si.js b/web/core/assets/vendor/ckeditor/lang/si.js index e139b5a0afdeb9a783458ea8ec4141e19f6b7e76..a61d59273fc28f36341f2e1f95d0bcdfa0c3ccd0 100644 --- a/web/core/assets/vendor/ckeditor/lang/si.js +++ b/web/core/assets/vendor/ckeditor/lang/si.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['si']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"විශේෂ ගුණාංග වීකල්ප","title":"විශේෂ ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"sourcedialog":{"toolbar":"මුලාශ්රය","title":"මුලාශ්රය"},"sourcearea":{"toolbar":"මුලාශ්රය"},"showblocks":{"toolbar":"කොටස පෙන්නන්න"},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"pastetext":{"button":"සාමාන්ය අක්ෂර ලෙස අලවන්න","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"සාමාන්ය අක්ෂර ලෙස අලවන්න"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"image2":{"alt":"විකල්ප ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"රුපයේ තොරතුරු","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","pathName":"image","pathNameCaption":"caption","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","resizer":"Click and drag to resize","title":"රුපයේ ","uploadTab":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්ර URL නැත.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"සාමාන්ය(DIV)","tag_h1":"ශීර්ෂය 1","tag_h2":"ශීර්ෂය 2","tag_h3":"ශීර්ෂය 3","tag_h4":"ශීර්ෂය 4","tag_h5":"ශීර්ෂය 5","tag_h6":"ශීර්ෂය 6","tag_p":"සාමාන්ය","tag_pre":"ආකෘතියන්"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"මුලද්රව්ය මාර්ගය","eleTitle":"%1 මුල"},"contextmenu":{"options":"අනතර්ග ලේඛණ විකල්ප"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපාගන්න","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"අලවන ප්රදේශ","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","moreInfo":"බලපත්ර තොරතුරු සදහා කරුණාකර අපගේ විද්යුත් ලිපිනයට පිවිසෙන්න:"},"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","left":"වම","right":"දකුණ","center":"මධ්ය","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්රදේශය ධන සංක්යාත්මක වටිනාකමක් හෝ නිවරදි නොවන CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්රදේශය ධන සංක්යාත්මක වටිනාකමක් හෝ නිවරදි නොවන HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම පේළි විලාසයයට ආකෘතිය අනතර්ග විය යුතය \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්රමාණය නිවරදි CSS ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/sk.js b/web/core/assets/vendor/ckeditor/lang/sk.js index 622ed54a8ff0c6cc4119ae8f0aa52b1bf6c45965..8eb9833b5bcc9c187f22edb05e75bfb204dbd36c 100644 --- a/web/core/assets/vendor/ckeditor/lang/sk.js +++ b/web/core/assets/vendor/ckeditor/lang/sk.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['sk']={"widget":{"move":"Kliknite a potiahnite pre presunutie","label":"%1 widget"},"undo":{"redo":"Znovu","undo":"Späť"},"toolbar":{"toolbarCollapse":"Zbaliť lištu nástrojov","toolbarExpand":"Rozbaliť lištu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné štýly","paragraph":"Odsek","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"table":{"border":"Šírka orámovania","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"Vložiť bunku pred","insertAfter":"Vložiť bunku za","deleteCell":"Vymazať bunky","merge":"Zlúčiť bunky","mergeRight":"Zlúčiť doprava","mergeDown":"Zlúčiť dole","splitHorizontal":"Rozdeliť bunky horizontálne","splitVertical":"Rozdeliť bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalamovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba orámovania","data":"Dáta","header":"Hlavička","yes":"Áno","no":"Nie","invalidWidth":"Šírka bunky musí byť číslo.","invalidHeight":"Výška bunky musí byť číslo.","invalidRowSpan":"Rozsah riadkov musí byť celé číslo.","invalidColSpan":"Rozsah stĺpcov musí byť celé číslo.","chooseColor":"Vybrať"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"Vzdialenosť buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"Vložiť stĺpec pred","insertAfter":"Vložiť stĺpec po","deleteColumn":"Zmazať stĺpce"},"columns":"Stĺpce","deleteTable":"Vymazať tabuľku","headers":"Hlavička","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","heightUnit":"height unit","invalidBorder":"Šírka orámovania musí byť číslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byť kladné číslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.","invalidCols":"Počet stĺpcov musí byť číslo väčšie ako 0.","invalidHeight":"Výška tabuľky musí byť číslo.","invalidRows":"Počet riadkov musí byť číslo väčšie ako 0.","invalidWidth":"Širka tabuľky musí byť číslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"Vložiť riadok pred","insertAfter":"Vložiť riadok po","deleteRow":"Vymazať riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Znakové štýly","panelTitle3":"Štýly objektu"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"sourcearea":{"toolbar":"Zdroj"},"showblocks":{"toolbar":"Ukázať bloky"},"removeformat":{"toolbar":"Odstrániť formátovanie"},"pastetext":{"button":"Vložiť ako čistý text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Vložiť ako čistý text"},"pastefromword":{"confirmCleanup":"Zdá sa, že vkladaný text pochádza z programu MS Word. Chcete ho pred vkladaním automaticky vyčistiť?","error":"Kvôli internej chybe nebolo možné vložené dáta vyčistiť","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"notification":{"closed":"Notifikácia zatvorená."},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"magicline":{"title":"Odsek vložiť sem"},"list":{"bulletedlist":"Vložiť/odstrániť zoznam s odrážkami","numberedlist":"Vložiť/odstrániť číslovaný zoznam"},"language":{"button":"Nastaviť jazyk","remove":"Odstrániť jazyk"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"image2":{"alt":"Alternatívny text","btnUpload":"Odoslať to na server","captioned":"Opísaný obrázok","captionPlaceholder":"Popis","infoTab":"Informácie o obrázku","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","pathName":"obrázok","pathNameCaption":"popis","resetSize":"Pôvodná veľkosť","resizer":"Kliknite a potiahnite pre zmenu veľkosti","title":"Vlastnosti obrázka","uploadTab":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","altMissing":"Chýba alternatívny text."},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"format":{"label":"Formát","panelTitle":"Odsek","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"filetools":{"loadError":"Počas čítania súboru nastala chyba.","networkError":"Počas nahrávania súboru nastala chyba siete.","httpError404":"Počas nahrávania súboru nastala HTTP chyba (404: Súbor nebol nájdený).","httpError403":"Počas nahrávania súboru nastala HTTP chyba (403: Zakázaný).","httpError":"Počas nahrávania súboru nastala HTTP chyba (error status: %1).","noUrlError":"URL nahrávania nie je definovaný.","responseError":"Nesprávna odpoveď servera."},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"contextmenu":{"options":"Možnosti kontextového menu"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteNotification":"Stlačte %1 na vloženie. Váš prehliadač nepodporuje vloženie prostredníctvom tlačidla v nástrojovej lište alebo voľby v kontextovom menu.","pasteArea":"Miesto pre vloženie","pasteMsg":"Vložte svoj obsah do nasledujúcej oblasti a stlačte OK."},"blockquote":{"toolbar":"Citácia"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"about":{"copy":"Copyright © $1. Všetky práva vyhradené.","dlgTitle":"O aplikácii CKEditor 4","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:"},"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačením ALT 0 spustiť pomocníka","browseServer":"Prehliadať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie pole","radio":"Prepínač","textField":"Textové pole","textarea":"Textová oblasť","hiddenField":"Skryté pole","button":"Tlačidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlačidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda štýlu","advisoryTitle":"Pomocný titulok","cssStyle":"Štýl","ok":"OK","cancel":"Zrušiť","close":"Zatvoriť","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nie je číslo.","confirmNewPage":"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"Najvrchnejšie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Štýl","cssClasses":"Triedy štýlu","width":"Šírka","height":"Výška","align":"Zarovnanie","left":"Vľavo","right":"Vpravo","center":"Na stred","justify":"Do bloku","alignLeft":"Zarovnať vľavo","alignRight":"Zarovnať vpravo","alignCenter":"Zarovnať na stred","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidLength":"Hodnota uvedená v poli \"%1\" musí byť kladné číslo a s platnou mernou jednotkou (%2), alebo bez nej.","invalidCssLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkočiarkou.","cssLengthTooltip":"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Medzerník","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová skratka","optionDefault":"Predvolený"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/sl.js b/web/core/assets/vendor/ckeditor/lang/sl.js index 16c6c0947c10b91b99c1da7de023ce1ccaa7b2ff..ba31ad786b4b9a7086432c46dad8354f64d1ab09 100644 --- a/web/core/assets/vendor/ckeditor/lang/sl.js +++ b/web/core/assets/vendor/ckeditor/lang/sl.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['sl']={"widget":{"move":"Kliknite in povlecite, da premaknete","label":"%1 widget"},"undo":{"redo":"Uveljavi","undo":"Razveljavi"},"toolbar":{"toolbarCollapse":"Skrči orodno vrstico","toolbarExpand":"Razširi orodno vrstico","toolbarGroups":{"document":"Dokument","clipboard":"Odložišče/Razveljavi","editing":"Urejanje","forms":"Obrazci","basicstyles":"Osnovni slogi","paragraph":"Odstavek","links":"Povezave","insert":"Vstavi","styles":"Slogi","colors":"Barve","tools":"Orodja"},"toolbars":"Orodne vrstice urejevalnika"},"table":{"border":"Velikost obrobe","caption":"Napis","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Združi navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Odmik znotraj celic","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","heightUnit":"height unit","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Odmik znotraj celic mora biti pozitivno število.","invalidCellSpacing":"Razmik med celicami mora biti pozitivno število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"odstotkov","widthPx":"pik","widthUnit":"enota širine"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"specialchar":{"options":"Možnosti posebnih znakov","title":"Izberi posebni znak","toolbar":"Vstavi posebni znak"},"sourcedialog":{"toolbar":"Izvorna koda","title":"Izvorna koda"},"sourcearea":{"toolbar":"Izvorna koda"},"showblocks":{"toolbar":"Prikaži ograde"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"pastetext":{"button":"Prilepi kot golo besedilo","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti, je kopirano iz Worda. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"magicline":{"title":"Vstavite odstavek tukaj"},"list":{"bulletedlist":"Vstavi/odstrani neoštevilčen seznam","numberedlist":"Vstavi/odstrani oštevilčen seznam"},"language":{"button":"Nastavi jezik","remove":"Odstrani jezik"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"image2":{"alt":"Nadomestno besedilo","btnUpload":"Pošlji na strežnik","captioned":"Slika z napisom","captionPlaceholder":"Napis","infoTab":"Podatki o sliki","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","pathName":"slika","pathNameCaption":"napis","resetSize":"Ponastavi velikost","resizer":"Kliknite in povlecite, da spremenite velikost","title":"Lastnosti slike","uploadTab":"Naloži","urlMissing":"Manjka vir (URL) slike.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"format":{"label":"Oblika","panelTitle":"Oblika odstavka","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"Element %1"},"contextmenu":{"options":"Možnosti kontekstnega menija"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Prilepi območje","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"about":{"copy":"Copyright © $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor 4","moreInfo":"Za informacije o licenciranju prosimo obiščite našo spletno stran:"},"editor":"Urejevalnik obogatenega besedila","editorPanel":"Plošča urejevalnika obogatenega besedila","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Besedilno polje","textarea":"Besedilno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno polje","imageButton":"Slikovni gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razredi slogovne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Spremenili ste nekaj možnosti. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo okno (_blank)","targetTop":"Vrhovno okno (_top)","targetSelf":"Isto okno (_self)","targetParent":"Starševsko okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razredi slogovne predloge","width":"Širina","height":"Višina","align":"Poravnava","left":"Levo","right":"Desno","center":"Sredinsko","justify":"Obojestranska poravnava","alignLeft":"Leva poravnava","alignRight":"Desna poravnava","alignCenter":"Align Center","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne CSS-enote za merjenje (px, %, in, cm, mm, em, ex, pt ali pc).","invalidHtmlLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne HTML-enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost, določena za slog v vrstici, mora biti sestavljena iz ene ali več dvojic oblike »ime : vrednost«, ločenih s podpičji.","cssLengthTooltip":"Vnesite število za vrednost v slikovnih pikah ali število z veljavno CSS-enoto (px, %, in, cm, mm, em, ex, pt ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/sq.js b/web/core/assets/vendor/ckeditor/lang/sq.js index d18952dc7f231d1406863a097371b2cd54022e5c..6ba13016c3d612e00a4999e6edd8cabdb4004064 100644 --- a/web/core/assets/vendor/ckeditor/lang/sq.js +++ b/web/core/assets/vendor/ckeditor/lang/sq.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['sq']={"widget":{"move":"Kliko dhe tërhiqe për ta lëvizur","label":"%1 vegël"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokumenti","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formularët","basicstyles":"Stilet Bazë","paragraph":"Paragrafi","links":"Nyjat","insert":"Shto","styles":"Stilet","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritat e Redaktuesit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","heightUnit":"height unit","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"stylescombo":{"label":"Stilet","panelTitle":"Formatimi i Stileve","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stilet e Brendshme","panelTitle3":"Stilet e Objektit"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"sourcedialog":{"toolbar":"Burimi","title":"Burimi"},"sourcearea":{"toolbar":"Burimi"},"showblocks":{"toolbar":"Shfaq Blloqet"},"removeformat":{"toolbar":"Largo Formatin"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","pasteNotification":"Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"notification":{"closed":"Njoftimi është mbyllur."},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"magicline":{"title":"Shto paragrafin këtu"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"language":{"button":"Përzgjidhni gjuhën","remove":"Largoni gjuhën"},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"image2":{"alt":"Tekst Alternativ","btnUpload":"Dërgo në server","captioned":"Foto e titulluar","captionPlaceholder":"Titulli","infoTab":"Informacione mbi Fotografinë","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","pathName":"foto","pathNameCaption":"titull","resetSize":"Rikthe Madhësinë","resizer":"Kliko dhe tërhiqe për ndryshim të madhësisë","title":"Karakteristikat e Fotografisë","uploadTab":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","altMissing":"Teksti alternativ mungon."},"horizontalrule":{"toolbar":"Shto Vijë Horizontale"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"filetools":{"loadError":"Gabimi u paraqit gjatë leximit të skedës.","networkError":"Gabimi në rrjetë u paraqitë gjatë ngarkimit të skedës.","httpError404":"Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (404: Skeda nuk u gjetë).","httpError403":"Gabimi në HTTP u paraqitë gjatë ngarkimit të skedës (403: E ndaluar).","httpError":"Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (gjendja e gabimit: %1).","noUrlError":"URL e ngarkimit nuk është vendosur.","responseError":"Përgjigje e gabuar e serverit."},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteNotification":"Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.","pasteArea":"Hapësira e Hedhjes","pasteMsg":"Hidh përmbajtjen brenda hapësirës më poshtë dhe shtyp MIRË."},"blockquote":{"toolbar":"Thonjëzat"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"about":{"copy":"Të drejtat e autorit © $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor 4","moreInfo":"Për informacione rreth licencave shih faqen tonë:"},"editor":"Redaktues i Pasur Teksti","editorPanel":"Paneli i redaktuesit të tekstit të plotë","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"E dërgo në server","image":"Foto","flash":"Objekt flash","form":"Formulari","checkbox":"Kuti përzgjedhjeje","radio":"Pullë përzgjedhjeje","textField":"Fushë teksti","textarea":"Hapësirë teksti","hiddenField":"Fushë e fshehur","button":"Pullë","select":"Fusha e përzgjedhjeve","imageButton":"Pullë fotografie","notSet":"<not set>","id":"Id","name":"Emri","langDir":"Drejtim gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kodi i Gjuhës","longDescr":"URL e përshkrimit të hollësishëm","cssClass":"CSS Klasat","advisoryTitle":"Titulli Konsultativ","cssStyle":"Stili","ok":"Mirë","cancel":"Anulo","close":"Mbyll","preview":"Parashih","resize":"Ndrysho madhësinë","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Kjo vlerë nuk është numër.","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurt që dëshiron të hapsh faqe të re?","confirmCancel":"Ke ndryshuar ca mundësi. Je i sigurt që dëshiron ta mbyllësh dritaren?","options":"Mundësitë","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stili","cssClasses":"CSS Klasat","width":"Gjerësia","height":"Lartësia","align":"Rreshtimi","left":"Majtas","right":"Djathtas","center":"Në mes","justify":"Zgjero","alignLeft":"Rreshto majtas","alignRight":"Rreshto Djathtas","alignCenter":"Rreshto në mes","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"Asnjë","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidLength":"Vlera e përcaktuar për fushën \"%1\" duhet të jetë pozitive me ose pa njësi matëse me vlerë (%2).","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Vlera e përcaktuar për stilin e vijëzuar duhet përmbajtur një ose më shumë vlera me format \"emër : vlerë\", të ndara me pikëpresje.","cssLengthTooltip":"Shto një numër për vlerën në piksel ose një numër me njësi të vlefshme CSS (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>","keyboard":{"8":"Prapa","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Hapësirë","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Urdhri"},"keyboardShortcut":"Shkurtesat e tastierës","optionDefault":"Parazgjedhur"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/sr-latn.js b/web/core/assets/vendor/ckeditor/lang/sr-latn.js index 20b31424946c529f3122f710c49254ddab66f180..d965e75f2a0fa616f35a5f4e3169efbdedc1ddcb 100644 --- a/web/core/assets/vendor/ckeditor/lang/sr-latn.js +++ b/web/core/assets/vendor/ckeditor/lang/sr-latn.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['sr-latn']={"widget":{"move":"Kliknite i povucite da bi pomerali","label":"%1 modul"},"undo":{"redo":"Ponovi ","undo":"Vrati"},"toolbar":{"toolbarCollapse":"Zatvori alatnu traku","toolbarExpand":"Otvori alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Vrati","editing":"Uredi","forms":"Obrasci","basicstyles":"Osnovni stilovi","paragraph":"Pasus","links":"Linkovi","insert":"Dodaj","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Uredjivač alatne trake"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Ćelija","insertBefore":"Ubaci levo","insertAfter":"Ubaci desno","deleteCell":"Obriši ćelije","merge":"Spoj ćelije","mergeRight":"Spolj ćelije desno","mergeDown":"Spolj čelije na dole","splitHorizontal":"Razdvoji ćelije vodoravno","splitVertical":"Razdvoji ćelije uspravno","title":"Karakteristike ćelija","cellType":"Tip ćelija","rowSpan":"Spoj uzdužno","colSpan":"Spoj vodoravno","wordWrap":"Brisanje dugačkih redova","hAlign":"Ravnanje vodoravno","vAlign":"Ravnanje uspravno","alignBaseline":"Bazna linija","bgColor":"Boja pozadine","borderColor":"Boja okvira","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"Nе","invalidWidth":"U polje širina možete upisati samo brojeve. ","invalidHeight":"U polje visina možete upisati samo brojeve.","invalidRowSpan":"U polje spoj uspravno možete upistai samo brojeve.","invalidColSpan":"U polje spoj vodoravno možete upistai samo brojeve.","chooseColor":"Izaberi"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Kolona","insertBefore":"Ubaci levo","insertAfter":"Ubaci desno","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Nema","headersRow":"Prvi red","heightUnit":"height unit","invalidBorder":"Veličina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak između ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Širina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Red","insertBefore":"Ubaci iznad","insertAfter":"Ubaci ispod","deleteRow":"Obriši redove"},"rows":"Redovi","summary":"Opis","title":"Karakteristike tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Blok stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Stilovi objekta"},"specialchar":{"options":"Opcije specijalnog karaktera","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"sourcedialog":{"toolbar":"Izvorni kod","title":"Izvorni kod"},"sourcearea":{"toolbar":"Izvorni kod"},"showblocks":{"toolbar":"Prikaži blokove"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalepi kao neformiran tekst","pasteNotification":"Pritisnite taster % 1 da bi ste nalepili. Pretraživač ne podržava lepljenje pomoću tastera na traci sa alatkama ili iz menija.","title":"Zalepi kao neformiran tekst"},"pastefromword":{"confirmCleanup":"Kopirani tekst je iz Word-a. Želite ga očistiti? ","error":"Zbog interne greške tekst nije očišćen.","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"notification":{"closed":"Obaveštenje zatvoreno"},"maximize":{"maximize":"Maksimalna veličina","minimize":"Minimalna veličina"},"magicline":{"title":"Umetnite pasus ovde."},"list":{"bulletedlist":"Nаbrajanje","numberedlist":"Numerisanje"},"language":{"button":"Podesi jezik","remove":"Odstrani jezik"},"indent":{"indent":"Uvećaj marginu","outdent":"Smanji marginu"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Slika sa natpisom","captionPlaceholder":"Natpis","infoTab":"Osnovne karakteristike","lockRatio":"Zadrži odnos","menu":"Osobine slike","pathName":"Slika","pathNameCaption":"Natpis","resetSize":"Original veličina","resizer":"Kliknite i povucite da bi ste promenili veličinu","title":"Osobine slika","uploadTab":"Postavi","urlMissing":"Nedostaje URL slike","altMissing":"Nedostaje alternativni tekst"},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format pasusa","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normalno","tag_pre":"Formatirano"},"filetools":{"loadError":"Došlo je do greške pri čitanju datoteke.","networkError":"Tokom postavljanja datoteke došlo je do mrežne greške","httpError404":"Tokom postavljanja datoteke došlo je do HTTP greške (404: Datoteka nije pronadjena).","httpError403":"Tokom postavljanja datoteke došlo je do HTTP greške (403: Zabranjena).","httpError":"Tokom postavljanja datoteke došlo je do HTTP greške (status greške: %1).","noUrlError":"URL adresa za postavljanje nije navedena.","responseError":"Neispravan odgovor servera."},"elementspath":{"eleLabel":"Put do elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije menija"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).","cut":"Iseci","cutError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).","paste":"Zalepi","pasteNotification":"\"Pritisnite taster %1 za lepljenje. Vaš pretraživač ne dozvoljava lepljenje iz alatne trake ili menia.","pasteArea":"Prostor za lepljenje","pasteMsg":"Nalepite sadržaj u sledeći prostor i pritisnite taster OK."},"blockquote":{"toolbar":"Blok citat"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"about":{"copy":"Copyright © $1. Sva prava zadržana.","dlgTitle":"O CKEditor 4","moreInfo":"Za informacije o licenci posetite našu web stranicu:"},"editor":"Bogati uređivač teksta","editorPanel":"Bogati uređivač panel","common":{"editorHelp":"Za pomoć pritisnite ALT 0","browseServer":"Pretraži na serveru","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Formular","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Padajuća lista","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno> ","id":"Id","name":"Naziv","langDir":"Smer pisanja","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Detaljan opis URL","cssClass":"CSS klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Promena veličine","generalTab":"Opšti","advancedTab":"Dalje opcije","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?","confirmCancel":"Neka podešavanja su promenjena.Sigurno želite zatvoriti prozor?","options":"Podešavanja","target":"Cilj","targetNew":"Novi prozor (_blank)","targetTop":"Prozor na vrhu stranice(_top)","targetSelf":"Isti prozor (_self)","targetParent":"Matični prozor (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"CSS klase","width":"Širina","height":"Visina","align":"Ravnanje","left":"Levo","right":"Desno","center":"Sredina","justify":"Obostrano ravnanje","alignLeft":"Levo ravnanje","alignRight":"Desno ravnanje","alignCenter":"Centralno ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"Ništa","invalidValue":"Nevažeća vrednost.","invalidHeight":"U polje visina mogu se upisati samo brojevi.","invalidWidth":"U polje širina mogu se upisati samo brojevi.","invalidLength":"U \"%1\" polju data vrednos treba da bude pozitivan broj, sa validnom mernom jedinicom ili bez (%2).","invalidCssLength":"Za \"%1\" data vrednost mora biti pozitivan broj, moguće označiti sa validnim CSS vrednosću (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Za \"%1\" data vrednost mora biti potitivan broj, moguće označiti sa validnim HTML vrednošću (px or %).","invalidInlineStyle":"Vrednost u inline styleu mora da sadrži barem jedan rekord u formatu \"name : value\", razdeljeni sa tačkazapetom.","cssLengthTooltip":"Odredite broj u pixeima ili u validnim CSS vrednostima (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Taster za prečicu","optionDefault":"Оsnovni"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/sr.js b/web/core/assets/vendor/ckeditor/lang/sr.js index 0d353180b48d58abc0230536642447f656eeb047..e9a782ca1bb2e8c26bc3bf97d12dfae3ab9f3f51 100644 --- a/web/core/assets/vendor/ckeditor/lang/sr.js +++ b/web/core/assets/vendor/ckeditor/lang/sr.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['sr']={"widget":{"move":"Кликните и повуците да би померали","label":"%1 модул"},"undo":{"redo":"Понови ","undo":"Врати"},"toolbar":{"toolbarCollapse":"Затвори алатну траку","toolbarExpand":"Отвори алатну траку","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Врати","editing":"Уреди","forms":"Обрасци","basicstyles":"Основни стилови","paragraph":"Пасус","links":"Линкови","insert":"Додај","styles":"Стилови","colors":"Боје","tools":"Алатке"},"toolbars":"Уређивач алатне траке"},"table":{"border":"Величина оквира","caption":"Наслов табеле","cell":{"menu":"Ћелија","insertBefore":"Убаци лево","insertAfter":"Убаци десно","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Спој ћелије на десно","mergeDown":"Спој ћелије на доле","splitHorizontal":"Раздвој ћелије водоравно","splitVertical":"Раздвој ћелије усправно","title":"Карактеристика ћелија","cellType":"Тип ћелија","rowSpan":"Спој уздужно","colSpan":"Спој водоравно","wordWrap":"Брисање дугачких редова","hAlign":"Равнање водоравно","vAlign":"Равнање усправно","alignBaseline":"Базна линија","bgColor":"Боја позадине","borderColor":"Боја оквира","data":"Податак","header":"Наслов","yes":"Да","no":"Не","invalidWidth":"У поље ширина можете уписати само бројеве.","invalidHeight":"У поље висина можете уписати само бројеве.","invalidRowSpan":"У поље спој усправно можете уписати само бројеве.","invalidColSpan":"У поље спој водоравно можете уписати само бројеве.","chooseColor":"Изабери"},"cellPad":"Размак ћелија","cellSpace":"Ћелијски простор","column":{"menu":"Колона","insertBefore":"Убаци лево","insertAfter":"Убаци десно","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"Нема","headersRow":"Први ред","heightUnit":"height unit","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Карактеристике табеле","row":{"menu":"Ред","insertBefore":"Убаци изнад","insertAfter":"Убаци испод","deleteRow":"Обриши редове"},"rows":"Редови","summary":"Oпис","title":"Карактеристике табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"јединица ширине"},"stylescombo":{"label":"Стил","panelTitle":"Стилови форматирања","panelTitle1":"Блок стилови","panelTitle2":"Инлине стилови","panelTitle3":"Стилови објекта"},"specialchar":{"options":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"sourcedialog":{"toolbar":"Изворни код","title":"Изворни код"},"sourcearea":{"toolbar":"Изворни код"},"showblocks":{"toolbar":"Прикажи блокове"},"removeformat":{"toolbar":"Уклони форматирање"},"pastetext":{"button":"Залепи као неформиран текст","pasteNotification":"Притисните% 1 да бисте налепили. Претраживач не подржава лепљење помоћу тастера на траци са алаткама или из менија.","title":"Залепи као неформиран текст"},"pastefromword":{"confirmCleanup":"Уметнути текст је копиран из Word-а. Желите га очитити? ","error":"Због интерне грешке текст није очишћен.","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"notification":{"closed":"Обавештење затворено"},"maximize":{"maximize":"Максимална величина","minimize":"Минимлна величина"},"magicline":{"title":"Уметните пасус овде."},"list":{"bulletedlist":"Набрајање","numberedlist":"Нумерисање"},"language":{"button":"Подеси језик","remove":"Одстрани језик"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи маргину"},"image2":{"alt":"Алтернативни текст","btnUpload":"Пошаљи на сервер","captioned":"Слика са натписом","captionPlaceholder":"Натпис","infoTab":"Основне карактеристике","lockRatio":"Задржи однос","menu":"Особине слика","pathName":"Слика","pathNameCaption":"Натпис","resetSize":"Оригинална величина","resizer":"Кликните и повуците да би сте променили величину","title":"Карактеристике слике","uploadTab":"Постави","urlMissing":"Недостаје УРЛ слике.","altMissing":"Недостаје алтернативни текст."},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"format":{"label":"Формат","panelTitle":"Формат пасуса","tag_address":"Адреса","tag_div":"Нормално (DIV)","tag_h1":"Наслов 1","tag_h2":"Наслов 2","tag_h3":" Наслов 3","tag_h4":"Наслов 4","tag_h5":"Наслов 5","tag_h6":"Наслов 6","tag_p":"Нормално","tag_pre":"Форматирано"},"filetools":{"loadError":"Дошло је до грешке при читању датотеке.","networkError":"Током постављања датотеке дошло је до мрежне грешке.","httpError404":"Током постављања датотеке дошло је до ХТТП грешке (404: Датотека није пронађена).","httpError403":"Током постављања датотеке дошло је до ХТТП грешке (403: Забрањена).","httpError":"Током постављања датотеке дошло је до ХТТП грешке (статус грешке: %1).","noUrlError":"УРЛ адреса за постављање није наведена.","responseError":"Неисправан одговор сервера."},"elementspath":{"eleLabel":"Пут до елемената","eleTitle":"%1 eлемент"},"contextmenu":{"options":"Опције менија"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteNotification":"Притисните тастер %1 за лепљење. Ваш ретраживач не дозвољаба лепљење из алатне траке или мениа.","pasteArea":"Залепи зону","pasteMsg":"Налепите садржај у следећи простор и притисните тастер OK."},"blockquote":{"toolbar":"Блок цитат"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"about":{"copy":"Copyright © $1. Сва права задржана.","dlgTitle":"О CKEditor 4","moreInfo":"За информације о лиценци посетите нашу веб страницу:"},"editor":"ХТМЛ уређивач текста","editorPanel":"ХТМЛ уређивач панел","common":{"editorHelp":"За помоћ притисните АЛТ 0","browseServer":"Претражи на серверу","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","flash":"Флеш елемент","form":"Формулар","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Падајућа листа","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер писања","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"ЦСС класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Затвори","preview":"Изглед странице","resize":"Промена величине","generalTab":"Општи","advancedTab":"Далје опције","validateNumberFailed":"Ова вредност није број.","confirmNewPage":"Несачуване промене овог садржаја ће бити изгублјене. Јесте ли сигурни да желите да учитате нову страну","confirmCancel":"Нека подешавања су променјена. Сигурмо желите затворити обај прозор?","options":"Подешавања","target":"Циљ","targetNew":"Ноби прозор (_blank)","targetTop":"Прозор на врху странице (_top)","targetSelf":"Исти прозор (_self)","targetParent":"Матични прозор(_parent)","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","styles":"Стил","cssClasses":"ЦСС класе","width":"Ширина","height":"Висина","align":"Равнање","left":"Лево","right":"Десно","center":"Средина","justify":"Обострано равнање","alignLeft":"Лево равнање","alignRight":"Десно равнање","alignCenter":"Централно равнанје","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"Ништа","invalidValue":"Неважећа вредност.","invalidHeight":"У поље висина могу се уписати само бројеви.","invalidWidth":"У поље ширина могу се уписати само бројеви.","invalidLength":"У \"%1\" полју дата вредност треба да будепозитиван број са валидном мерном јединицом или без ње (%2).","invalidCssLength":"За \"%1\" дата вредност мора бити позитиван број, могуће означити са валидним ЦСС вредошћу (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Зa \"%1\" дата вредност мора бити позитиван број, могуће означити са валидним ХТМЛ вредношћу (px or %).","invalidInlineStyle":"Вреднодст у инлине стилу мора да садржи барем један рекорд у формату \"name : value\", раздељени са тачказапетом.","cssLengthTooltip":"Одредите број у пикселима или у валидним ЦСС вредностима (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Tастер за пречицу","optionDefault":"Основни"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/sv.js b/web/core/assets/vendor/ckeditor/lang/sv.js index 28421f541a0468b9eeadd48d99986711ff07fb26..61ba21c5d6c350f936a948e419008791ad7a1873 100644 --- a/web/core/assets/vendor/ckeditor/lang/sv.js +++ b/web/core/assets/vendor/ckeditor/lang/sv.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['sv']={"widget":{"move":"Klicka och drag för att flytta","label":"%1-widget"},"undo":{"redo":"Gör om","undo":"Ångra"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Urklipp/ångra","editing":"Redigering","forms":"Formulär","basicstyles":"Basstilar","paragraph":"Paragraf","links":"Länkar","insert":"Infoga","styles":"Stilar","colors":"Färger","tools":"Verktyg"},"toolbars":"Editorns verktygsfält"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","heightUnit":"height unit","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"stylescombo":{"label":"Stilar","panelTitle":"Formateringsstilar","panelTitle1":"Blockstilar","panelTitle2":"Inbäddade stilar","panelTitle3":"Objektstilar"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"sourcedialog":{"toolbar":"Källa","title":"Källa"},"sourcearea":{"toolbar":"Källa"},"showblocks":{"toolbar":"Visa block"},"removeformat":{"toolbar":"Radera formatering"},"pastetext":{"button":"Klistra in som vanlig text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"notification":{"closed":"Notifiering stängd."},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"magicline":{"title":"Infoga paragraf här"},"list":{"bulletedlist":"Infoga/ta bort punktlista","numberedlist":"Infoga/ta bort numrerad lista"},"language":{"button":"Sätt språk","remove":"Ta bort språk"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"image2":{"alt":"Alternativ text","btnUpload":"Skicka till server","captioned":"Rubricerad bild","captionPlaceholder":"Bildtext","infoTab":"Bildinformation","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","pathName":"bild","pathNameCaption":"rubrik","resetSize":"Återställ storlek","resizer":"Klicka och drag för att ändra storlek","title":"Bildegenskaper","uploadTab":"Ladda upp","urlMissing":"Bildkällans URL saknas.","altMissing":"Alternativ text saknas"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"filetools":{"loadError":"Fel uppstod vid filläsning","networkError":"Nätverksfel uppstod vid filuppladdning.","httpError404":"HTTP-fel uppstod vid filuppladdning (404: Fil hittades inte).","httpError403":"HTTP-fel uppstod vid filuppladdning (403: Förbjuden).","httpError":"HTTP-fel uppstod vid filuppladdning (felstatus: %1).","noUrlError":"URL för uppladdning inte definierad.","responseError":"Felaktigt serversvar."},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i din webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i din webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteNotification":"Tryck på %1 för att klistra in. Din webbläsare stödjer inte inklistring via verktygsfältet eller snabbmenyn.","pasteArea":"Inklistringsområde","pasteMsg":"Klistra in ditt innehåll i området nedan och tryck på OK."},"blockquote":{"toolbar":"Blockcitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"about":{"copy":"Copyright © $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor 4","moreInfo":"För information om licensiering besök vår hemsida:"},"editor":"Rich Text-editor","editorPanel":"Panel till Rich Text-editor","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","left":"Vänster","right":"Höger","center":"Centrerad","justify":"Justera till marginaler","alignLeft":"Vänsterjustera","alignRight":"Högerjustera","alignCenter":"Centrera","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan en giltig mätenhet (%2).","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>","keyboard":{"8":"Backsteg","13":"Retur","16":"Skift","17":"Ctrl","18":"Alt","32":"Mellanslag","35":"Slut","36":"Hem","46":"Radera","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Kortkommando","optionDefault":"Standard"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/th.js b/web/core/assets/vendor/ckeditor/lang/th.js index 4359385abfe0776872676036c76eee11c29d4173..b7e48b642e04c0ccb2d09d92f02b113a10beb111 100644 --- a/web/core/assets/vendor/ckeditor/lang/th.js +++ b/web/core/assets/vendor/ckeditor/lang/th.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['th']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"toolbar":{"toolbarCollapse":"ซ่อนแถบเครื่องมือ","toolbarExpand":"เปิดแถบเครื่องมือ","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะแนวตั้ง","cellSpace":"ระยะแนวนอนน","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","heightUnit":"height unit","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"sourcedialog":{"toolbar":"ดูรหัส HTML","title":"ดูรหัส HTML"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"showblocks":{"toolbar":"แสดงบล็อคข้อมูล"},"removeformat":{"toolbar":"ล้างรูปแบบ"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"วางแบบตัวอักษรธรรมดา"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"image2":{"alt":"คำประกอบรูปภาพ","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ข้อมูลของรูปภาพ","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","pathName":"image","pathNameCaption":"caption","resetSize":"กำหนดรูปเท่าขนาดจริง","resizer":"Click and drag to resize","title":"คุณสมบัติของ รูปภาพ","uploadTab":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"format":{"label":"รูปแบบ","panelTitle":"รูปแบบ","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"กด ALT 0 หากต้องการความช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"แบบฟอร์ม","checkbox":"เช็คบ๊อก","radio":"เรดิโอบัตตอน","textField":"เท็กซ์ฟิลด์","textarea":"เท็กซ์แอเรีย","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"แถบตัวเลือก","imageButton":"ปุ่มแบบรูปภาพ","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"การเขียน-อ่านภาษา","langDirLtr":"จากซ้ายไปขวา (LTR)","langDirRtl":"จากขวามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประกอบ URL","cssClass":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","left":"ชิดซ้าย","right":"ชิดขวา","center":"กึ่งกลาง","justify":"நியாயப்படுத்தவும்","alignLeft":"จัดชิดซ้าย","alignRight":"จัดชิดขวา","alignCenter":"Align Center","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/tr.js b/web/core/assets/vendor/ckeditor/lang/tr.js index 1a2bbc5924bbe3955458fa10d8b44a883c9e0b52..6c9d42444ad7bcea4397bf01068747e18d2df0d4 100644 --- a/web/core/assets/vendor/ckeditor/lang/tr.js +++ b/web/core/assets/vendor/ckeditor/lang/tr.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['tr']={"widget":{"move":"Taşımak için, tıklayın ve sürükleyin","label":"%1 Grafik Beleşeni"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"toolbar":{"toolbarCollapse":"Araç çubuklarını topla","toolbarExpand":"Araç çubuklarını aç","toolbarGroups":{"document":"Belge","clipboard":"Pano/Geri al","editing":"Düzenleme","forms":"Formlar","basicstyles":"Temel Stiller","paragraph":"Paragraf","links":"Bağlantılar","insert":"Ekle","styles":"Stiller","colors":"Renkler","tools":"Araçlar"},"toolbars":"Araç çubukları Editörü"},"table":{"border":"Kenar Kalınlığı","caption":"Başlık","cell":{"menu":"Hücre","insertBefore":"Hücre Ekle - Önce","insertAfter":"Hücre Ekle - Sonra","deleteCell":"Hücre Sil","merge":"Hücreleri Birleştir","mergeRight":"Birleştir - Sağdaki İle ","mergeDown":"Birleştir - Aşağıdaki İle ","splitHorizontal":"Hücreyi Yatay Böl","splitVertical":"Hücreyi Dikey Böl","title":"Hücre Özellikleri","cellType":"Hücre Tipi","rowSpan":"Satırlar Mesafesi (Span)","colSpan":"Sütünlar Mesafesi (Span)","wordWrap":"Kelime Kaydırma","hAlign":"Düşey Hizalama","vAlign":"Yataş Hizalama","alignBaseline":"Tabana","bgColor":"Arkaplan Rengi","borderColor":"Çerçeve Rengi","data":"Veri","header":"Başlık","yes":"Evet","no":"Hayır","invalidWidth":"Hücre genişliği sayı olmalıdır.","invalidHeight":"Hücre yüksekliği sayı olmalıdır.","invalidRowSpan":"Satırların mesafesi tam sayı olmalıdır.","invalidColSpan":"Sütünların mesafesi tam sayı olmalıdır.","chooseColor":"Seçiniz"},"cellPad":"Izgara yazı arası","cellSpace":"Izgara kalınlığı","column":{"menu":"Sütun","insertBefore":"Kolon Ekle - Önce","insertAfter":"Kolon Ekle - Sonra","deleteColumn":"Sütun Sil"},"columns":"Sütunlar","deleteTable":"Tabloyu Sil","headers":"Başlıklar","headersBoth":"Her İkisi","headersColumn":"İlk Sütun","headersNone":"Yok","headersRow":"İlk Satır","heightUnit":"height unit","invalidBorder":"Çerceve büyüklüklüğü sayı olmalıdır.","invalidCellPadding":"Hücre aralığı (padding) sayı olmalıdır.","invalidCellSpacing":"Hücre boşluğu (spacing) sayı olmalıdır.","invalidCols":"Sütün sayısı 0 sayısından büyük olmalıdır.","invalidHeight":"Tablo yüksekliği sayı olmalıdır.","invalidRows":"Satır sayısı 0 sayısından büyük olmalıdır.","invalidWidth":"Tablo genişliği sayı olmalıdır.","menu":"Tablo Özellikleri","row":{"menu":"Satır","insertBefore":"Satır Ekle - Önce","insertAfter":"Satır Ekle - Sonra","deleteRow":"Satır Sil"},"rows":"Satırlar","summary":"Özet","title":"Tablo Özellikleri","toolbar":"Tablo","widthPc":"yüzde","widthPx":"piksel","widthUnit":"genişlik birimi"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"sourcedialog":{"toolbar":"Kaynak","title":"Kaynak"},"sourcearea":{"toolbar":"Kaynak"},"showblocks":{"toolbar":"Blokları Göster"},"removeformat":{"toolbar":"Biçimi Kaldır"},"pastetext":{"button":"Düz metin olarak yapıştır","pasteNotification":"%1 tuşuna yapıştırmak için tıklayın. Tarayıcınız, Araç Çubuğu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.","title":"Düz metin olarak yapıştır"},"pastefromword":{"confirmCleanup":"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?","error":"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir","title":"Word'den Yapıştır","toolbar":"Word'den Yapıştır"},"notification":{"closed":"Uyarılar kapatıldı."},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"magicline":{"title":"Parağrafı buraya ekle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"language":{"button":"Dili seç","remove":"Dili kaldır"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"image2":{"alt":"Alternatif Yazı","btnUpload":"Sunucuya Yolla","captioned":"Başlıklı resim","captionPlaceholder":"Başlık","infoTab":"Resim Bilgisi","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","pathName":"Resim","pathNameCaption":"başlık","resetSize":"Boyutu Başa Döndür","resizer":"Boyutlandırmak için, tıklayın ve sürükleyin","title":"Resim Özellikleri","uploadTab":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı bulunamadı.","altMissing":"Alternatif yazı eksik."},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"format":{"label":"Biçim","panelTitle":"Biçim","tag_address":"Adres","tag_div":"Paragraf (DIV)","tag_h1":"Başlık 1","tag_h2":"Başlık 2","tag_h3":"Başlık 3","tag_h4":"Başlık 4","tag_h5":"Başlık 5","tag_h6":"Başlık 6","tag_p":"Normal","tag_pre":"Biçimli"},"filetools":{"loadError":"Dosya okunurken hata oluştu.","networkError":"Dosya gönderilirken ağ hatası oluştu.","httpError404":"Dosya gönderilirken HTTP hatası oluştu (404: Dosya bulunamadı).","httpError403":"Dosya gönderilirken HTTP hatası oluştu (403: Yasaklı).","httpError":"Dosya gönderilirken HTTP hatası oluştu (hata durumu: %1).","noUrlError":"Gönderilecek URL belirtilmedi.","responseError":"Sunucu cevap veremedi."},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"clipboard":{"copy":"Kopyala","copyError":"Tarayıcı yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.","cut":"Kes","cutError":"Tarayıcı yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.","paste":"Yapıştır","pasteNotification":"%1 tuşuna yapıştırmak için tıklayın. Tarayıcınız, Araç Çubuğu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.","pasteArea":"Yapıştırma Alanı","pasteMsg":"İçeriğinizi alttaki bulunan alana yapıştırın ve TAMAM butonuna tıklayın"},"blockquote":{"toolbar":"Blok Oluştur"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"about":{"copy":"Copyright © $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:"},"editor":"Zengin Metin Editörü","editorPanel":"Zengin Metin Editör Paneli","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","flash":"Flash","form":"Form","checkbox":"Seçim Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":" Dil Kodu","longDescr":"Uzun Açıklamalı URL","cssClass":"Stil Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Stil","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Stil","cssClasses":"Stil Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","left":"Sol","right":"Sağ","center":"Ortala","justify":"İki Kenara Yaslanmış","alignLeft":"Sola Dayalı","alignRight":"Sağa Dayalı","alignCenter":"Ortaya Hizala","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidLength":"\"%1\" alanı için belirtilen değer, geçerli bir ölçü birimi olsun veya olmasın (%2) pozitif bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"\"%1\" alanı için belirttiğiniz sayı, HTML (px veya %) birimi olsun yada olmasın pozitif bir değeri olmalıdır.","invalidInlineStyle":"Satıriçi stil için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>","keyboard":{"8":"Silme Tuşu","13":"Giriş Tuşu","16":"Üst Karater Tuşu","17":"Kontrol Tuşu","18":"Alt Tuşu","32":"Boşluk Tuşu","35":"En Sona Tuşu","36":"En Başa Tuşu","46":"Silme Tuşu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komut Tuşu"},"keyboardShortcut":"Klavye Kısayolu","optionDefault":"Varsayılan"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/tt.js b/web/core/assets/vendor/ckeditor/lang/tt.js index 211b47439ce03af09a131d8fcb40f5e243303482..664f348c38fb78ef7abf655a70cf24f7980ad87e 100644 --- a/web/core/assets/vendor/ckeditor/lang/tt.js +++ b/web/core/assets/vendor/ckeditor/lang/tt.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['tt']={"widget":{"move":"Күчереп куер өчен басып шудырыгыз","label":"%1 widget"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Алмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп стильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Өстәү","styles":"Стильләр","colors":"Төсләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"table":{"border":"Чик калынлыгы","caption":"Исем","cell":{"menu":"Күзәнәк","insertBefore":"Алдына күзәнәк өстәү","insertAfter":"Артына күзәнәк өстәү","deleteCell":"Күзәнәкләрне бетерү","merge":"Күзәнәкләрне берләштерү","mergeRight":"Уң яктагы белән берләштерү","mergeDown":"Астагы белән берләштерү","splitHorizontal":"Күзәнәкне юлларга бүлү","splitVertical":"Күзәнәкне баганаларга бүлү","title":"Күзәнәк үзлекләре","cellType":"Күзәнәк төре","rowSpan":"Юлларны берләштерү","colSpan":"Баганаларны берләштерү","wordWrap":"Текстны күчерү","hAlign":"Ятма тигезләү","vAlign":"Асма тигезләү","alignBaseline":"Таяныч сызыгы","bgColor":"Фон төсе","borderColor":"Чик төсе","data":"Мәгълүмат","header":"Башлык","yes":"Әйе","no":"Юк","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сайлау"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар өстәү","insertAfter":"Уңнан баганалар өстәү","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"Икесе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","heightUnit":"height unit","invalidBorder":"Чик киңлеге сан булырга тиеш.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Күзәнәкләр аралары уңай сан булырга тиеш.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Таблица биеклеге сан булырга тиеш.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Таблица киңлеге сан булырга тиеш","menu":"Таблица үзлекләре","row":{"menu":"Юл","insertBefore":"Өстән юллар өстәү","insertAfter":"Астан юллар өстәү","deleteRow":"Юлларны бетерү"},"rows":"Юллар","summary":"Йомгаклау","title":"Таблица үзлекләре","toolbar":"Таблица","widthPc":"процент","widthPx":"Нокталар","widthUnit":"киңлек берәмлеге"},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау стильләре","panelTitle1":"Блоклар стильләре","panelTitle2":"Эчке стильләр","panelTitle3":"Объектлар стильләре"},"specialchar":{"options":"Махсус символ үзлекләре","title":"Махсус символ сайлау","toolbar":"Махсус символ өстәү"},"sourcedialog":{"toolbar":"Чыганак","title":"Чыганак"},"sourcearea":{"toolbar":"Чыганак"},"showblocks":{"toolbar":"Блокларны күрсәтү"},"removeformat":{"toolbar":"Форматлауны бетерү"},"pastetext":{"button":"Форматлаусыз текст өстәү","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Форматлаусыз текст өстәү"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word'тан өстәү","toolbar":"Word'тан өстәү"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"magicline":{"title":"Бирегә параграф өстәү"},"list":{"bulletedlist":"Маркерлы тезмә өстәү/бетерү","numberedlist":" Номерланган тезмә өстәү/бетерү"},"language":{"button":"Тел сайлау","remove":"Телне бетерү"},"indent":{"indent":"Отступны арттыру","outdent":"Отступны кечерәйтү"},"image2":{"alt":"Альтернатив текст","btnUpload":"Серверга җибәрү","captioned":"Исеме куелган рәсем","captionPlaceholder":"Исем","infoTab":"Рәсем тасвирламасы","lockRatio":"Lock Ratio","menu":"Рәсем үзлекләре","pathName":"рәсем","pathNameCaption":"исем","resetSize":"Баштагы зурлык","resizer":"Күчереп куер өчен басып шудырыгыз","title":"Рәсем үзлекләре","uploadTab":"Йөкләү","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ятма сызык өстәү"},"format":{"label":"Форматлау","panelTitle":"Параграф форматлавы","tag_address":"Адрес","tag_div":"Гади (DIV)","tag_h1":"Башлам 1","tag_h2":"Башлам 2","tag_h3":"Башлам 3","tag_h4":"Башлам 4","tag_h5":"Башлам 5","tag_h6":"Башлам 6","tag_p":"Гади","tag_pre":"Форматлаулы"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 элемент"},"contextmenu":{"options":"Контекст меню үзлекләре"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"Кисеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Өстәү","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Өстәү мәйданы","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Өземтә блогы"},"basicstyles":{"bold":"Калын","italic":"Курсив","strike":"Сызылган","subscript":"Аскы индекс","superscript":"Өске индекс","underline":"Астына сызылган"},"about":{"copy":"Copyright © $1. Бар хокуклар сакланган","dlgTitle":"CKEditor турында","moreInfo":"For licensing information please visit our web site:"},"editor":"Форматлаулы текст өлкәсе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 басыгыз","browseServer":"Сервер карап чыгу","url":"Сылталама","protocol":"Протокол","upload":"Йөкләү","uploadSubmit":"Серверга җибәрү","image":"Рәсем","flash":"Флеш","form":"Форма","checkbox":"Чекбокс","radio":"Радио төймә","textField":"Текст кыры","textarea":"Текст мәйданы","hiddenField":"Яшерен кыр","button":"Төймə","select":"Сайлау кыры","imageButton":"Рәсемле төймə","notSet":"<билгеләнмәгән>","id":"Id","name":"Исем","langDir":"Язылыш юнəлеше","langDirLtr":"Сулдан уңга язылыш (LTR)","langDirRtl":"Уңнан сулга язылыш (RTL)","langCode":"Тел коды","longDescr":"Җентекле тасвирламага сылталама","cssClass":"Стильләр класслары","advisoryTitle":"Киңәш исем","cssStyle":"Стиль","ok":"Тәмам","cancel":"Баш тарту","close":"Чыгу","preview":"Карап алу","resize":"Зурлыкны үзгәртү","generalTab":"Төп","advancedTab":"Киңәйтелгән көйләүләр","validateNumberFailed":"Әлеге кыйммәт сан түгел.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"Максат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Өске тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ана тәрәзә (_parent)","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр класслары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","left":"Сул якка","right":"Уң якка","center":"Үзәккә","justify":"Киңлеккә карап тигезләү","alignLeft":"Сул як кырыйдан тигезләү","alignRight":"Уң як кырыйдан тигезләү","alignCenter":"Align Center","alignTop":"Өскә","alignMiddle":"Уртага","alignBottom":"Аска","alignNone":"Һичбер","invalidValue":"Дөрес булмаган кыйммәт.","invalidHeight":"Биеклек сан булырга тиеш.","invalidWidth":"Киңлек сан булырга тиеш.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Кайтару","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Бетерү","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/ug.js b/web/core/assets/vendor/ckeditor/lang/ug.js index 47c448318eb31d90085e65719d01a6015cc685fc..4c4ec2ea29e7ecded8cfa464c9913f601f739f82 100644 --- a/web/core/assets/vendor/ckeditor/lang/ug.js +++ b/web/core/assets/vendor/ckeditor/lang/ug.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['ug']={"widget":{"move":"يۆتكەشتە چېكىپ سۆرەڭ","label":"%1 widget"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"table":{"border":"گىرۋەك","caption":"ماۋزۇ","cell":{"menu":"كاتەكچە","insertBefore":"سولغا كاتەكچە قىستۇر","insertAfter":"ئوڭغا كاتەكچە قىستۇر","deleteCell":"كەتەكچە ئۆچۈر","merge":"كاتەكچە بىرلەشتۈر","mergeRight":"كاتەكچىنى ئوڭغا بىرلەشتۈر","mergeDown":"كاتەكچىنى ئاستىغا بىرلەشتۈر","splitHorizontal":"كاتەكچىنى توغرىسىغا بىرلەشتۈر","splitVertical":"كاتەكچىنى بويىغا بىرلەشتۈر","title":"كاتەكچە خاسلىقى","cellType":"كاتەكچە تىپى","rowSpan":"بويىغا چات ئارىسى قۇر سانى","colSpan":"توغرىسىغا چات ئارىسى ئىستون سانى","wordWrap":"ئۆزلۈكىدىن قۇر قاتلا","hAlign":"توغرىسىغا توغرىلا","vAlign":"بويىغا توغرىلا","alignBaseline":"ئاساسىي سىزىق","bgColor":"تەگلىك رەڭگى","borderColor":"گىرۋەك رەڭگى","data":"سانلىق مەلۇمات","header":"جەدۋەل باشى","yes":"ھەئە","no":"ياق","invalidWidth":"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ","invalidHeight":"كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRowSpan":"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ","invalidColSpan":"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ","chooseColor":"تاللاڭ"},"cellPad":"يان ئارىلىق","cellSpace":"ئارىلىق","column":{"menu":"ئىستون","insertBefore":"سولغا ئىستون قىستۇر","insertAfter":"ئوڭغا ئىستون قىستۇر","deleteColumn":"ئىستون ئۆچۈر"},"columns":"ئىستون سانى","deleteTable":"جەدۋەل ئۆچۈر","headers":"ماۋزۇ كاتەكچە","headersBoth":"بىرىنچى ئىستون ۋە بىرىنچى قۇر","headersColumn":"بىرىنچى ئىستون","headersNone":"يوق","headersRow":"بىرىنچى قۇر","heightUnit":"height unit","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"sourcedialog":{"toolbar":"مەنبە","title":"مەنبە"},"sourcearea":{"toolbar":"مەنبە"},"showblocks":{"toolbar":"بۆلەكنى كۆرسەت"},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","pasteNotification":"چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى ۋە سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"notification":{"closed":"ئوقتۇرۇش تاقالدى."},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"language":{"button":"تىل تەڭشەك","remove":"تىلنى چىقىرىۋەت"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"image2":{"alt":"تېكىست ئالماشتۇر","btnUpload":"مۇلازىمېتىرغا يۈكلە","captioned":"ماۋزۇلۇق سۈرەت","captionPlaceholder":"ماۋزۇ","infoTab":"سۈرەت","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","pathName":"رەسىم","pathNameCaption":"ماۋزۇ","resetSize":"ئەسلى چوڭلۇق","resizer":"چېكىپ تۇرۇپ سۆرەپ چوڭ كىچىكلىكىنى تەڭشىگىلى بولىدۇ","title":"سۈرەت خاسلىقى","uploadTab":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم","altMissing":"باشقا تېكىست كەمچىل"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"format":{"label":"پىچىم","panelTitle":"پىچىم","tag_address":"ئادرېس","tag_div":"ئابزاس (DIV)","tag_h1":"ماۋزۇ 1","tag_h2":"ماۋزۇ 2","tag_h3":"ماۋزۇ 3","tag_h4":"ماۋزۇ 4","tag_h5":"ماۋزۇ 5","tag_h6":"ماۋزۇ 6","tag_p":"ئادەتتىكى","tag_pre":"تىزىلغان پىچىم"},"filetools":{"loadError":"ھۆججەت ئوقۇشتا خاتالىق كۆرۈلدى","networkError":"ھۆججەت يۈكلەشتە تور خاتالىقى كۆرۈلدى.","httpError404":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: ھۆججەت تېپىلمىدى).","httpError403":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (403: چەكلەنگەن).","httpError":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: خاتالىق نىسپىتى: 1%).","noUrlError":"چىقىردىغان ئۇلانما تەڭشەلمىگەن .","responseError":"مۇلازىمىتىردا ئىنكاس يوق ."},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"clipboard":{"copy":"كۆچۈر","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteNotification":"چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى ۋە سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"مەزمۇنىڭىزنى تۆۋەندىكى رايونغا چاپلاپ ئاندىن OK نى بېسىڭ ."},"blockquote":{"toolbar":"بۆلەك نەقىل"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"about":{"copy":"Copyright © $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor تەھرىرلىگۈچى 4 ھەقىدە","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ"},"editor":"تەھرىرلىگۈچ","editorPanel":"مول تېكست تەھرىرلىگۈچ تاختىسى","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","url":"ئەسلى ھۆججەت","protocol":"كېلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمېتىرغا يۈكلە","image":"سۈرەت","flash":"چاقماق","form":"جەدۋەل","checkbox":"كۆپ تاللاش رامكىسى","radio":"يەككە تاللاش توپچىسى","textField":"يەككە قۇر تېكىست","textarea":"كۆپ قۇر تېكىست","hiddenField":"يوشۇرۇن دائىرە","button":"توپچا","select":"تىزىم/تىزىملىك","imageButton":"سۈرەت دائىرە","notSet":"‹تەڭشەلمىگەن›","id":"ID","name":"ئات","langDir":"تىل يۆنىلىشى","langDirLtr":"سولدىن ئوڭغا (LTR)","langDirRtl":"ئوڭدىن سولغا (RTL)","langCode":"تىل كودى","longDescr":"تەپسىلىي چۈشەندۈرۈش ئادرېسى","cssClass":"ئۇسلۇب خىلىنىڭ ئاتى","advisoryTitle":"ماۋزۇ","cssStyle":"قۇر ئىچىدىكى ئۇسلۇبى","ok":"جەزملە","cancel":"ۋاز كەچ","close":"تاقا","preview":"ئالدىن كۆزەت","resize":"چوڭلۇقىنى ئۆزگەرت","generalTab":"ئادەتتىكى","advancedTab":"ئالىي","validateNumberFailed":"سان پىچىمىدا كىرگۈزۈش زۆرۈر","confirmNewPage":"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، يېڭى پۈتۈك قۇرامسىز؟","confirmCancel":"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟","options":"تاللانما","target":"نىشان كۆزنەك","targetNew":"يېڭى كۆزنەك (_blank)","targetTop":"پۈتۈن بەت (_top)","targetSelf":"مەزكۇر كۆزنەك (_self)","targetParent":"ئاتا كۆزنەك (_parent)","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","styles":"ئۇسلۇبلار","cssClasses":"ئۇسلۇب خىللىرى","width":"كەڭلىك","height":"ئېگىزلىك","align":"توغرىلىنىشى","left":"سول","right":"ئوڭ","center":"ئوتتۇرا","justify":"ئىككى تەرەپتىن توغرىلا","alignLeft":"سولغا توغرىلا","alignRight":"ئوڭغا توغرىلا","alignCenter":"Align Center","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"يوق","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidLength":"بەلگىلەنگەن قىممەت \"1%\" سۆز بۆلىكىدىكى ئېنىقسىز ماتىريال ياكى مۇسبەت سانلار (2%).","invalidCssLength":"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)","invalidHtmlLength":"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)","invalidInlineStyle":"ئىچكى باغلانما ئۇسلۇبى چوقۇم چېكىتلىك پەش بىلەن ئايرىلغان بىر ياكى كۆپ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم","cssLengthTooltip":"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)","unavailable":"%1<span class=\\\\\"cke_accessibility\\\\\">، ئىشلەتكىلى بولمايدۇ</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"ئۆچۈر","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"تېزلەتمە كونۇپكا","optionDefault":"سۈكۈتتىكى"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/uk.js b/web/core/assets/vendor/ckeditor/lang/uk.js index b25b31ce9675d4eea5290383282aa3046df0b120..cd5d21f753fb647e77b2b79cb739c57328817673 100644 --- a/web/core/assets/vendor/ckeditor/lang/uk.js +++ b/web/core/assets/vendor/ckeditor/lang/uk.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['uk']={"widget":{"move":"Клікніть і потягніть для переміщення","label":"%1 віджет"},"undo":{"redo":"Повторити","undo":"Повернути"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"table":{"border":"Розмір рамки","caption":"Заголовок таблиці","cell":{"menu":"Комірки","insertBefore":"Вставити комірку перед","insertAfter":"Вставити комірку після","deleteCell":"Видалити комірки","merge":"Об'єднати комірки","mergeRight":"Об'єднати справа","mergeDown":"Об'єднати донизу","splitHorizontal":"Розділити комірку по горизонталі","splitVertical":"Розділити комірку по вертикалі","title":"Властивості комірки","cellType":"Тип комірки","rowSpan":"Об'єднання рядків","colSpan":"Об'єднання стовпців","wordWrap":"Автоперенесення тексту","hAlign":"Гориз. вирівнювання","vAlign":"Верт. вирівнювання","alignBaseline":"По базовій лінії","bgColor":"Колір фону","borderColor":"Колір рамки","data":"Дані","header":"Заголовок","yes":"Так","no":"Ні","invalidWidth":"Ширина комірки повинна бути цілим числом.","invalidHeight":"Висота комірки повинна бути цілим числом.","invalidRowSpan":"Кількість об'єднуваних рядків повинна бути цілим числом.","invalidColSpan":"Кількість об'єднуваних стовбців повинна бути цілим числом.","chooseColor":"Обрати"},"cellPad":"Внутр. відступ","cellSpace":"Проміжок","column":{"menu":"Стовбці","insertBefore":"Вставити стовбець перед","insertAfter":"Вставити стовбець після","deleteColumn":"Видалити стовбці"},"columns":"Стовбці","deleteTable":"Видалити таблицю","headers":"Заголовки стовбців/рядків","headersBoth":"Стовбці і рядки","headersColumn":"Стовбці","headersNone":"Без заголовків","headersRow":"Рядки","heightUnit":"height unit","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"Одиниці вимір."},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"sourcedialog":{"toolbar":"Джерело","title":"Джерело"},"sourcearea":{"toolbar":"Джерело"},"showblocks":{"toolbar":"Показувати блоки"},"removeformat":{"toolbar":"Видалити форматування"},"pastetext":{"button":"Вставити тільки текст","pasteNotification":"Натисніть %1, щоб вставити. Ваш браузер не підтримує вставку за допомогою кнопки панелі інструментів або пункту контекстного меню.","title":"Вставити тільки текст"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"notification":{"closed":"Сповіщення закрито."},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"magicline":{"title":"Вставити абзац"},"list":{"bulletedlist":"Маркірований список","numberedlist":"Нумерований список"},"language":{"button":"Установити мову","remove":"Вилучити мову"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"image2":{"alt":"Альтернативний текст","btnUpload":"Надіслати на сервер","captioned":"Підписане зображення","captionPlaceholder":"Заголовок","infoTab":"Інформація про зображення","lockRatio":"Зберегти пропорції","menu":"Властивості зображення","pathName":"Зображення","pathNameCaption":"заголовок","resetSize":"Очистити поля розмірів","resizer":"Клікніть та потягніть для зміни розмірів","title":"Властивості зображення","uploadTab":"Надіслати","urlMissing":"Вкажіть URL зображення.","altMissing":"Альтернативний текст відсутній."},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"format":{"label":"Форматування","panelTitle":"Форматування параграфа","tag_address":"Адреса","tag_div":"Нормальний (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Нормальний","tag_pre":"Форматований"},"filetools":{"loadError":"Виникла помилка під час читання файлу","networkError":"Під час завантаження файлу виникла помилка мережі.","httpError404":"Під час завантаження файлу виникла помилка HTTP (404: Файл не знайдено).","httpError403":"Під час завантаження файлу виникла помилка HTTP (403: Доступ заборонено).","httpError":"Під час завантаження файлу виникла помилка (статус помилки: %1).","noUrlError":"URL завантаження не визначений.","responseError":"Невірна відповідь сервера."},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опції контекстного меню"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteNotification":"Натисніть %1, щоб вставити. Ваш браузер не підтримує вставку за допомогою кнопки панелі інструментів або пункту контекстного меню.","pasteArea":"Область вставки","pasteMsg":"Вставте вміст у область нижче та натисніть OK."},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"about":{"copy":"Copyright © $1. Всі права застережено.","dlgTitle":"Про CKEditor 4","moreInfo":"Щодо інформації з ліцензування завітайте на наш сайт:"},"editor":"Текстовий редактор","editorPanel":"Панель розширеного текстового редактора","common":{"editorHelp":"натисніть ALT 0 для довідки","browseServer":"Огляд Сервера","url":"URL","protocol":"Протокол","upload":"Надіслати","uploadSubmit":"Надіслати на сервер","image":"Зображення","flash":"Flash","form":"Форма","checkbox":"Галочка","radio":"Кнопка вибору","textField":"Текстове поле","textarea":"Текстова область","hiddenField":"Приховане поле","button":"Кнопка","select":"Список","imageButton":"Кнопка із зображенням","notSet":"<не визначено>","id":"Ідентифікатор","name":"Ім'я","langDir":"Напрямок мови","langDirLtr":"Зліва направо (LTR)","langDirRtl":"Справа наліво (RTL)","langCode":"Код мови","longDescr":"Довгий опис URL","cssClass":"Клас CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль CSS","ok":"ОК","cancel":"Скасувати","close":"Закрити","preview":"Попередній перегляд","resize":"Потягніть для зміни розмірів","generalTab":"Основне","advancedTab":"Додаткове","validateNumberFailed":"Значення не є цілим числом.","confirmNewPage":"Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?","confirmCancel":"Деякі опції змінено. Закрити вікно без збереження змін?","options":"Опції","target":"Ціль","targetNew":"Нове вікно (_blank)","targetTop":"Поточне вікно (_top)","targetSelf":"Поточний фрейм/вікно (_self)","targetParent":"Батьківський фрейм/вікно (_parent)","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","styles":"Стиль CSS","cssClasses":"Клас CSS","width":"Ширина","height":"Висота","align":"Вирівнювання","left":"По лівому краю","right":"По правому краю","center":"По центру","justify":"По ширині","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","alignNone":"Нема","invalidValue":"Невірне значення.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidLength":"Вказане значення для поля \"%1\" має бути позитивним числом без або з коректним символом одиниці виміру (%2).","invalidCssLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt або pc).","invalidHtmlLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру HTML блоку (px або %).","invalidInlineStyle":"Значення, вказане для вбудованого стилю повинне складатися з одного чи кількох кортежів у форматі \"ім'я : значення\", розділених крапкою з комою.","cssLengthTooltip":"Введіть номер значення в пікселях або число з дійсною одиниці CSS (px, %, in, cm, mm, em, ex, pt або pc).","unavailable":"%1<span class=\"cke_accessibility\">, не доступне</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробіл","35":"End","36":"Home","46":"Видалити","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Сполучення клавіш","optionDefault":"Типово"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/vi.js b/web/core/assets/vendor/ckeditor/lang/vi.js index 56473731e0d1592f9d7f38b428c0d719484d7340..0257adb5aa80f59848e4fe27f086dd895d64d544 100644 --- a/web/core/assets/vendor/ckeditor/lang/vi.js +++ b/web/core/assets/vendor/ckeditor/lang/vi.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.lang['vi']={"widget":{"move":"Nhấp chuột và kéo để di chuyển","label":"%1 widget"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"toolbar":{"toolbarCollapse":"Thu gọn thanh công cụ","toolbarExpand":"Mở rộng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sửa","forms":"Bảng biểu","basicstyles":"Kiểu cơ bản","paragraph":"Đoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"table":{"border":"Kích thước đường viền","caption":"Đầu đề","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trước","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dưới","splitHorizontal":"Phân tách ô theo chiều ngang","splitVertical":"Phân tách ô theo chiều dọc","title":"Thuộc tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cột","wordWrap":"Chữ liền hàng","hAlign":"Canh lề ngang","vAlign":"Canh lề dọc","alignBaseline":"Đường cơ sở","bgColor":"Màu nền","borderColor":"Màu viền","data":"Dữ liệu","header":"Đầu đề","yes":"Có","no":"Không","invalidWidth":"Chiều rộng của ô phải là một số nguyên.","invalidHeight":"Chiều cao của ô phải là một số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là một số nguyên.","invalidColSpan":"Số cột kết hợp phải là một số nguyên.","chooseColor":"Chọn màu"},"cellPad":"Khoảng đệm giữ ô và nội dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cột","insertBefore":"Chèn cột phía trước","insertAfter":"Chèn cột phía sau","deleteColumn":"Xoá cột"},"columns":"Số cột","deleteTable":"Xóa bảng","headers":"Đầu đề","headersBoth":"Cả hai","headersColumn":"Cột đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","heightUnit":"height unit","invalidBorder":"Kích cỡ của đường biên phải là một số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và nội dung phải là một số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là một số nguyên.","invalidCols":"Số lượng cột phải là một số lớn hơn 0.","invalidHeight":"Chiều cao của bảng phải là một số nguyên.","invalidRows":"Số lượng hàng phải là một số lớn hơn 0.","invalidWidth":"Chiều rộng của bảng phải là một số nguyên.","menu":"Thuộc tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trước","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuộc tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Điểm ảnh (px)","widthUnit":"Đơn vị"},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trực tiếp","panelTitle3":"Kiểu đối tượng"},"specialchar":{"options":"Tùy chọn các ký tự đặc biệt","title":"Hãy chọn ký tự đặc biệt","toolbar":"Chèn ký tự đặc biệt"},"sourcedialog":{"toolbar":"Mã HTML","title":"Mã HTML"},"sourcearea":{"toolbar":"Mã HTML"},"showblocks":{"toolbar":"Hiển thị các khối"},"removeformat":{"toolbar":"Xoá định dạng"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Dán theo định dạng văn bản thuần"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?","error":"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ","title":"Dán với định dạng Word","toolbar":"Dán với định dạng Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"magicline":{"title":"Chèn đoạn vào đây"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"language":{"button":"Thiết lập ngôn ngữ","remove":"Loại bỏ ngôn ngữ"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"image2":{"alt":"Chú thích ảnh","btnUpload":"Tải lên máy chủ","captioned":"Ảnh có chú thích","captionPlaceholder":"Nhãn","infoTab":"Thông tin của ảnh","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","pathName":"ảnh","pathNameCaption":"chú thích","resetSize":"Kích thước gốc","resizer":"Kéo rê để thay đổi kích cỡ","title":"Thuộc tính của ảnh","uploadTab":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"format":{"label":"Định dạng","panelTitle":"Định dạng","tag_address":"Address","tag_div":"Bình thường (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thường (P)","tag_pre":"Đã thiết lập"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Khu vực dán","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Khối trích dẫn"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"about":{"copy":"Bản quyền © $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor 4","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu ","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lớp CSS","width":"Chiều rộng","height":"Chiều cao","align":"Vị trí","left":"Trái","right":"Phải","center":"Giữa","justify":"Sắp chữ","alignLeft":"Canh trái","alignRight":"Canh phải","alignCenter":"Align Center","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>","keyboard":{"8":"Phím Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Xóa","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}}; \ No newline at end of file +CKEDITOR.lang['vi']={"widget":{"move":"Nhấp chuột và kéo để di chuyển","label":"%1 widget"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"toolbar":{"toolbarCollapse":"Thu gọn thanh công cụ","toolbarExpand":"Mở rộng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sửa","forms":"Bảng biểu","basicstyles":"Kiểu cơ bản","paragraph":"Đoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"table":{"border":"Kích thước đường viền","caption":"Đầu đề","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trước","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dưới","splitHorizontal":"Phân tách ô theo chiều ngang","splitVertical":"Phân tách ô theo chiều dọc","title":"Thuộc tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cột","wordWrap":"Chữ liền hàng","hAlign":"Canh lề ngang","vAlign":"Canh lề dọc","alignBaseline":"Đường cơ sở","bgColor":"Màu nền","borderColor":"Màu viền","data":"Dữ liệu","header":"Đầu đề","yes":"Có","no":"Không","invalidWidth":"Chiều rộng của ô phải là một số nguyên.","invalidHeight":"Chiều cao của ô phải là một số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là một số nguyên.","invalidColSpan":"Số cột kết hợp phải là một số nguyên.","chooseColor":"Chọn màu"},"cellPad":"Khoảng đệm giữ ô và nội dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cột","insertBefore":"Chèn cột phía trước","insertAfter":"Chèn cột phía sau","deleteColumn":"Xoá cột"},"columns":"Số cột","deleteTable":"Xóa bảng","headers":"Đầu đề","headersBoth":"Cả hai","headersColumn":"Cột đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","heightUnit":"height unit","invalidBorder":"Kích cỡ của đường biên phải là một số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và nội dung phải là một số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là một số nguyên.","invalidCols":"Số lượng cột phải là một số lớn hơn 0.","invalidHeight":"Chiều cao của bảng phải là một số nguyên.","invalidRows":"Số lượng hàng phải là một số lớn hơn 0.","invalidWidth":"Chiều rộng của bảng phải là một số nguyên.","menu":"Thuộc tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trước","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuộc tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Điểm ảnh (px)","widthUnit":"Đơn vị"},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trực tiếp","panelTitle3":"Kiểu đối tượng"},"specialchar":{"options":"Tùy chọn các ký tự đặc biệt","title":"Hãy chọn ký tự đặc biệt","toolbar":"Chèn ký tự đặc biệt"},"sourcedialog":{"toolbar":"Mã HTML","title":"Mã HTML"},"sourcearea":{"toolbar":"Mã HTML"},"showblocks":{"toolbar":"Hiển thị các khối"},"removeformat":{"toolbar":"Xoá định dạng"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Dán theo định dạng văn bản thuần"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?","error":"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ","title":"Dán với định dạng Word","toolbar":"Dán với định dạng Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"magicline":{"title":"Chèn đoạn vào đây"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"language":{"button":"Thiết lập ngôn ngữ","remove":"Loại bỏ ngôn ngữ"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"image2":{"alt":"Chú thích ảnh","btnUpload":"Tải lên máy chủ","captioned":"Ảnh có chú thích","captionPlaceholder":"Nhãn","infoTab":"Thông tin của ảnh","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","pathName":"ảnh","pathNameCaption":"chú thích","resetSize":"Kích thước gốc","resizer":"Kéo rê để thay đổi kích cỡ","title":"Thuộc tính của ảnh","uploadTab":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"format":{"label":"Định dạng","panelTitle":"Định dạng","tag_address":"Address","tag_div":"Bình thường (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thường (P)","tag_pre":"Đã thiết lập"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Khu vực dán","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Khối trích dẫn"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"about":{"copy":"Bản quyền © $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor 4","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu ","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lớp CSS","width":"Chiều rộng","height":"Chiều cao","align":"Vị trí","left":"Trái","right":"Phải","center":"Giữa","justify":"Sắp chữ","alignLeft":"Canh trái","alignRight":"Canh phải","alignCenter":"Canh giữa","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidLength":"Giá trị cho trường \"%1\" phải là một số dương có hoặc không có đơn vị đo lường hợp lệ (%2)","invalidCssLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>","keyboard":{"8":"Phím Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Cách","35":"End","36":"Home","46":"Xóa","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Phím tắt","optionDefault":"Mặc định"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/zh-cn.js b/web/core/assets/vendor/ckeditor/lang/zh-cn.js index 93fea24029648dd76768c6cb5804eb636d2ab7cb..5eb47269162aa716cc120c57aadd8e95e5a11f52 100644 --- a/web/core/assets/vendor/ckeditor/lang/zh-cn.js +++ b/web/core/assets/vendor/ckeditor/lang/zh-cn.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['zh-cn']={"widget":{"move":"点击并拖拽以移动","label":"%1 小部件"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","heightUnit":"height unit","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcedialog":{"toolbar":"源码","title":"源码"},"sourcearea":{"toolbar":"源码"},"showblocks":{"toolbar":"显示区块"},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","pasteNotification":"您的浏览器不支持通过工具栏或右键菜单进行粘贴,请按 %1 进行粘贴。","title":"粘贴为无格式文本"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"notification":{"closed":"通知已关闭"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"language":{"button":"设置语言","remove":"移除语言"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image2":{"alt":"替换文本","btnUpload":"上传到服务器","captioned":"带标题图像","captionPlaceholder":"标题","infoTab":"图像信息","lockRatio":"锁定比例","menu":"图像属性","pathName":"图像","pathNameCaption":"标题","resetSize":"原始尺寸","resizer":"点击并拖拽以改变尺寸","title":"图像属性","uploadTab":"上传","urlMissing":"缺少图像源文件地址","altMissing":"缺少替换文本"},"horizontalrule":{"toolbar":"插入水平线"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"filetools":{"loadError":"读取文件时发生错误","networkError":"上传文件时发生网络错误","httpError404":"上传文件时发生 HTTP 错误(404:无法找到文件)","httpError403":"上传文件时发生 HTTP 错误(403:禁止访问)","httpError":"上传文件时发生 HTTP 错误(错误代码:%1)","noUrlError":"上传的 URL 未定义","responseError":"不正确的服务器响应"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteNotification":"您的浏览器不支持通过工具栏或右键菜单进行粘贴,请按 %1 进行粘贴。","pasteArea":"粘贴区域","pasteMsg":"将您的内容粘贴到下方区域,然后按确定。"},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 © $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor 4","moreInfo":"相关授权许可信息请访问我们的网站:"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像按钮","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明 URL","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变大小","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存,是否确认新建文档?","confirmCancel":"部分修改尚未保存,是否确认关闭对话框?","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","left":"左对齐","right":"右对齐","center":"居中","justify":"两端对齐","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"无","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidLength":"为 \"%1\" 字段设置的值必须是一个正数或者没有一个有效的度量单位 (%2)。","invalidCssLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 HTML 长度单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。","cssLengthTooltip":"输入一个表示像素值的数字,或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,不可用</span>","keyboard":{"8":"退格键","13":"回车键","16":"Shift","17":"Ctrl","18":"Alt","32":"空格键","35":"行尾键","36":"行首键","46":"删除键","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"快捷键","optionDefault":"默认"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/lang/zh.js b/web/core/assets/vendor/ckeditor/lang/zh.js index a44d41b325e0acca5f6f8fac0d46b2a5ff8bb40b..1c1f68650c7b37adae18eb89a109dcf1e002f0e8 100644 --- a/web/core/assets/vendor/ckeditor/lang/zh.js +++ b/web/core/assets/vendor/ckeditor/lang/zh.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.lang['zh']={"widget":{"move":"拖曳以移動","label":"%1 小工具"},"undo":{"redo":"取消復原","undo":"復原"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯選項","forms":"格式","basicstyles":"基本樣式","paragraph":"段落","links":"連結","insert":"插入","styles":"樣式","colors":"顏色","tools":"工具"},"toolbars":"編輯器工具列"},"table":{"border":"框線大小","caption":"標題","cell":{"menu":"儲存格","insertBefore":"前方插入儲存格","insertAfter":"後方插入儲存格","deleteCell":"刪除儲存格","merge":"合併儲存格","mergeRight":"向右合併","mergeDown":"向下合併","splitHorizontal":"水平分割儲存格","splitVertical":"垂直分割儲存格","title":"儲存格屬性","cellType":"儲存格類型","rowSpan":"列全長","colSpan":"行全長","wordWrap":"自動斷行","hAlign":"水平對齊","vAlign":"垂直對齊","alignBaseline":"基準線","bgColor":"背景顏色","borderColor":"框線顏色","data":"資料","header":"頁首","yes":"是","no":"否","invalidWidth":"儲存格寬度必須為數字。","invalidHeight":"儲存格高度必須為數字。","invalidRowSpan":"列全長必須是整數。","invalidColSpan":"行全長必須是整數。","chooseColor":"選擇"},"cellPad":"儲存格邊距","cellSpace":"儲存格間距","column":{"menu":"行","insertBefore":"左方插入行","insertAfter":"右方插入行","deleteColumn":"刪除行"},"columns":"行","deleteTable":"刪除表格","headers":"頁首","headersBoth":"同時","headersColumn":"第一行","headersNone":"無","headersRow":"第一列","heightUnit":"height unit","invalidBorder":"框線大小必須是整數。","invalidCellPadding":"儲存格邊距必須為正數。","invalidCellSpacing":"儲存格間距必須為正數。","invalidCols":"行數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"列數須為大於 0 的正整數。","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"列","insertBefore":"上方插入列","insertAfter":"下方插入列","deleteRow":"刪除列"},"rows":"列","summary":"總結","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"寬度單位"},"stylescombo":{"label":"樣式","panelTitle":"格式化樣式","panelTitle1":"區塊樣式","panelTitle2":"內嵌樣式","panelTitle3":"物件樣式"},"specialchar":{"options":"特殊字元選項","title":"選取特殊字元","toolbar":"插入特殊字元"},"sourcedialog":{"toolbar":"原始碼","title":"原始碼"},"sourcearea":{"toolbar":"原始碼"},"showblocks":{"toolbar":"顯示區塊"},"removeformat":{"toolbar":"移除格式"},"pastetext":{"button":"貼成純文字","pasteNotification":"請按下「%1」貼上。您的瀏覽器不支援工具列按鈕或是內容功能表選項。 ","title":"貼成純文字"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"由於發生內部錯誤,無法清除清除 Word 的格式。","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"notification":{"closed":"通知已關閉。"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"在此插入段落"},"list":{"bulletedlist":"插入/移除項目符號清單","numberedlist":"插入/移除編號清單清單"},"language":{"button":"設定語言","remove":"移除語言"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"image2":{"alt":"替代文字","btnUpload":"傳送至伺服器","captioned":"已加標題之圖片","captionPlaceholder":"標題","infoTab":"影像資訊","lockRatio":"固定比例","menu":"影像屬性","pathName":"圖片","pathNameCaption":"標題","resetSize":"重設大小","resizer":"拖曳以改變大小","title":"影像屬性","uploadTab":"上傳","urlMissing":"遺失圖片來源之 URL ","altMissing":"替代文字遺失。"},"horizontalrule":{"toolbar":"插入水平線"},"format":{"label":"格式","panelTitle":"段落格式","tag_address":"地址","tag_div":"標準 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"標準","tag_pre":"格式設定"},"filetools":{"loadError":"在讀取檔案時發生錯誤。","networkError":"在上傳檔案時發生網路錯誤。","httpError404":"在上傳檔案時發生 HTTP 錯誤(404:檔案找不到)。","httpError403":"在上傳檔案時發生 HTTP 錯誤(403:禁止)。","httpError":"在上傳檔案時發生 HTTP 錯誤(錯誤狀態:%1)。","noUrlError":"上傳的 URL 未被定義。","responseError":"不正確的伺服器回應。"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"contextmenu":{"options":"內容功能表選項"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteNotification":"請按下「%1」貼上。您的瀏覽器不支援工具列按鈕或是內容功能表選項。","pasteArea":"貼上區","pasteMsg":"請將您的內容貼於下方區域中並按下「OK」。"},"blockquote":{"toolbar":"引用段落"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"關於 CKEditor 4","moreInfo":"關於授權資訊,請參閱我們的網站:"},"editor":"RTF 編輯器","editorPanel":"RTF 編輯器面板","common":{"editorHelp":"按下 ALT 0 取得說明。","browseServer":"瀏覽伺服器","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"傳送至伺服器","image":"圖像","flash":"Flash","form":"表格","checkbox":"核取方塊","radio":"選項按鈕","textField":"文字欄位","textarea":"文字區域","hiddenField":"隱藏欄位","button":"按鈕","select":"選取欄位","imageButton":"影像按鈕","notSet":"<未設定>","id":"ID","name":"名稱","langDir":"語言方向","langDirLtr":"由左至右 (LTR)","langDirRtl":"由右至左 (RTL)","langCode":"語言代碼","longDescr":"完整描述 URL","cssClass":"樣式表類別","advisoryTitle":"標題","cssStyle":"樣式","ok":"確定","cancel":"取消","close":"關閉","preview":"預覽","resize":"調整大小","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"此值不是數值。","confirmNewPage":"現存的修改尚未儲存,要開新檔案?","confirmCancel":"部份選項尚未儲存,要關閉對話框?","options":"選項","target":"目標","targetNew":"開新視窗 (_blank)","targetTop":"最上層視窗 (_top)","targetSelf":"相同視窗 (_self)","targetParent":"父視窗 (_parent)","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","styles":"樣式","cssClasses":"樣式表類別","width":"寬度","height":"高度","align":"對齊方式","left":"靠左對齊","right":"靠右對齊","center":"置中對齊","justify":"左右對齊","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中對齊","alignTop":"頂端","alignMiddle":"中間對齊","alignBottom":"底端","alignNone":"無","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidLength":"為「%1」欄位指定的值必須為正值,可包含或不包含測量單位(%2)。","invalidCssLength":"「%1」的值應為正數,並可包含有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","invalidHtmlLength":"「%1」的值應為正數,並可包含有效的 HTML 單位 (px 或 %)。","invalidInlineStyle":"行內樣式的值應包含一個以上的變數值組,其格式如「名稱:值」,並以分號區隔之。","cssLengthTooltip":"請輸入數值,單位是像素或有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,無法使用</span>","keyboard":{"8":"退格鍵","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"空白鍵","35":"End","36":"Home","46":"刪除","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command 鍵"},"keyboardShortcut":"鍵盤快捷鍵","optionDefault":"預設"}}; \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js index d39b7e7b83a255416c77d1ae2d9b45556707f3e7..3d14d13a7e4c7aa12c2e60fe9d2722490545dfde 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add("a11yHelp",function(f){function m(a){for(var b,c,h=[],d=0;d<g.length;d++)c=g[d],b=a/g[d],1<b&&2>=b&&(a-=c,h.push(e[c]));h.push(e[a]||String.fromCharCode(a));return h.join("+")}function t(a,b){var c=f.getCommandKeystroke(b,!0);return c.length?CKEDITOR.tools.array.map(c,m).join(" / "):a}var a=f.lang.a11yhelp,b=f.lang.common.keyboard,p=CKEDITOR.tools.getNextId(),q=/\$\{(.*?)\}/g,g=[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL],e={8:b[8],9:a.tab,13:b[13],16:b[16],17:b[17],18:b[18],19:a.pause, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt index 27b8bd86413778011253e613988faa2314c99f69..5de2ba0bf5e714bd51c0aee0001e18790e10ff79 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt @@ -1,4 +1,4 @@ -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license cs.js Found: 30 Missing: 0 diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js index ee973828e8bb274cb7bf19dafd96971e7bb5c3b7..5959df37922add0954f089d92dfa2f50200db96e 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","af",{title:"Toeganglikheid instruksies",contents:"Hulp inhoud. Druk ESC om toe te maak.",legend:[{name:"Algemeen",items:[{name:"Bewerker balk",legend:"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig."},{name:"Bewerker dialoog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js index eb4c09d3ec6a4fa80a2e8938ab17eea6c342f6a6..db794bed922b838d8f5eb35f16880a7bf4fec409 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/az.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/az.js index 335b5c73f54ac8b3db63d7ffe525862eaf4258f1..52124569946492b784ea60bdd15f67f43ce1bc0f 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/az.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/az.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","az",{title:"Əlillərə dəstək üzrə təlimat",contents:"Kömək. Pəncərəni bağlamaq üçün ESC basın.",legend:[{name:"Əsas",items:[{name:"Düzəliş edənin alətlər çubuğu",legend:"Panelə keçmək üçün ${toolbarFocus} basın. Növbəti panelə TAB, əvvəlki panelə isə SHIFT+TAB düyməsi vasitəsi ilə keçə bilərsiz. Paneldəki düymələr arasında sol və sağ ox düyməsi ilə keçid edə bilərsiz. Seçilmiş düyməsi SPACE və ya ENTER ilə işlədə bilərsiniz."},{name:"Redaktorun pəncərəsi",legend:"Pəncərə içində növbəti element seçmək üçün TAB düyməni basın, əvvəlki isə - SHIFT+TAB. Təsdiq edilməsi üçün ENTER, imtina edilməsi isə ESC diymələri istifadə edin. Pəncərədə bir neçə vərəq olanda olnarın siyahı ALT+F10 ilə aça bilərsiz. Vərəqlərin siyahı fokus altında olanda ox düymələr vasitəsi ilə onların arasında keçid edə bilərsiz."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js index 6fb8ee8a0dababbe56ca827f92a51afde1457b9c..d197b482c8df6e181381ac30a58e6228483ad3e1 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Инструкции за достъпност",contents:"Съдържание на помощта. За да затворите този диалогов прозорец, натиснете ESC.",legend:[{name:"Общо",items:[{name:"Лента с инструменти за редактора",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Диалог на редактора", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js index 187d46e1d28f4193e31b434ac2171422af2933c2..6ff7e703da56290e396e7ba6107b2ea84fea6187 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js index d15ed6fce7e8fb833f722f769aad90dafa8b098e..982fb327588cd71aba11bc830bc62d1f0f9cbb28 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js index df0d3ebb1c74a95335ec4c92af235de80bd71ca4..4b3b5155d44cf80ef051098a29a52a08b68242c3 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js index 642e08e8754f5980750e5c1760b8296e089819ea..34bd7a73070e3aaa38c110bce9ea31a6ef3ca77c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen."},{name:"Editor dialogboks", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js index 165a0dca803229692b3036ed2fc65f56e2cd779d..b38d51e713f5597348614140713a44807e0b0374 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","de-ch",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js index a1f1543f618f4e556de6b755cc879e6c7fc6c9b6..085e02cd5194ab75f3198f58e86ec6ccff7930fd 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js index c22a528ad04fb28baa1b9e23c1f81104c625648b..cd5b982378c0b1b033811ee5ea8db24d67c7faf3 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-au.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-au.js index 20fafcb9021cfe0995f77eb9ddedbe9e9f1c147b..d3086c50efd856bc6c8bc41279d5a1e18d75681c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-au.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-au.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","en-au",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js index ace4638f09c67601d0230526618db420ace4e8fc..968c5d2100ae0cacb0a48a65dbccf7d9cc60b2b5 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js index 1fd7c9ccb017122476ce71e4844f873f538eb924..4c48e4f12f2a4f31296ae3b4db40632d1a0495f0 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js index c8b708ceea29a7375e7ca773cfa7c4666da25331..6381e5fa237396c0df672ccaefb3c48064a71649 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es-mx.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es-mx.js index 6cdcffb2f4b19ef501b06591382fe5700cd3c8ab..c633cea7085775c46476c385afd9a587ef8f44a0 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es-mx.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es-mx.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","es-mx",{title:"Instrucciones de accesibilidad",contents:"Contenidos de ayuda. Para cerrar este cuadro de diálogo presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:"Presione ${toolbarFocus} para navegar a la barra de herramientas. Desplácese al grupo de barras de herramientas siguiente y anterior con SHIFT + TAB. Desplácese al botón siguiente y anterior de la barra de herramientas con FLECHA DERECHA o FLECHA IZQUIERDA. Presione SPACE o ENTER para activar el botón de la barra de herramientas."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js index cfe6b76c5df74982d333ec2987c300e9670223d1..49cc01115beee3bfd25cebd81674c876f5c46df8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js index dd9f815eae1b3b2ee9d12b33cf1da8a6bdbb2fb3..696ef58a26765845e0b6d1e33d62e11c5bf7889c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Hõlbustuste kasutamise juhised",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Redaktori tööriistariba",legend:"Tööriistaribale navigeerimiseks vajuta ${toolbarFocus}. Järgmisele või eelmisele tööriistagrupile liikumiseks vajuta TAB või SHIFT+TAB. Järgmisele või eelmisele tööriistaribale liikumiseks vajuta PAREMALE NOOLT või VASAKULE NOOLT. Vajuta TÜHIKUT või ENTERIT, et tööriistariba nupp aktiveerida."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js index 46b8873ee3d21f1c05df264ded0bdbbd9c089d97..19b44d2956c60c4c1a087b8ec6c300b4e83fd830 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","eu",{title:"Erabilerraztasunaren argibideak",contents:"Laguntzaren edukiak. Elkarrizketa-koadro hau ixteko sakatu ESC.",legend:[{name:"Orokorra",items:[{name:"Editorearen tresna-barra",legend:"Sakatu ${toolbarFocus} tresna-barrara nabigatzeko. Tresna-barrako aurreko eta hurrengo taldera joateko erabili TAB eta MAIUS+TAB. Tresna-barrako aurreko eta hurrengo botoira joateko erabili ESKUIN-GEZIA eta EZKER-GEZIA. Sakatu ZURIUNEA edo SARTU tresna-barrako botoia aktibatzeko."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js index 0f39999ca4efa138d4abea5bd1f9509474bfebd3..ad7b18aa5982e7ceb4ebc9363d0433faedba1555 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعملهای دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاورهای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهتنمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js index 65966998ea13ba998323a906d0be1631721bdfbb..1be96c1d0c0dad1a0d839de44647bd2ec01d28e2 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js index 009e6aa662b6744cb37cf8d0633503146f475343..f9faa77634362790f2516a4728ce33d1ef5a4c9a 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","fo",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js index c09bed43552e0065e3726a2a4231f8af3d86f61d..f2d22df33a77082b35dbc87e4d2863ccbe7b86d5 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js index 68721f68bbd8d0e759d874ecaeead4afe44ebc7c..bf79da337aaf58c901c446562c516576a77c4c66 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur la touche Échap.",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers le groupe suivant ou précédent de la barre d'outils avec les touches Tab et Maj+Tab. Se déplacer vers le bouton suivant ou précédent de la barre d'outils avec les touches Flèche droite et Flèche gauche. Appuyer sur la barre d'espace ou la touche Entrée pour activer le bouton de barre d'outils."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js index 50f032f7660cbbea4098c7ad770d61101ec4bb57..7837dc68b78b1a71bb6eb939a79658b0a9037414 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js index 8141ea755d48e8660fc765984ec299fec8cbcdd6..31faf6972bdf87c0e0e25a0f619555b565f4c4ab 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js index 7caa8a1a0b96ea80a722d056e19eb08ef8c31903..e1b687e1b26d64368cd99c0657d0ad538e87a934 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js index c9888672bb2c82ae49633ab4a25bbe25db427d4f..bb7d8efc1cf1fe22110bb81c046c5b24b7cbfcc0 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js index 51672d2a0904ce5358633148cfe13dc39a6ddf98..c1afebb7c1d841a636a9c707edf36f7f97c713f8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js index 0505376534b57f766d4c7ef92fb74aeed3eda3c1..d51df49254b87b6812b6c907bf2cef0f7019c1f2 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js index b19c536cf0672e11c7e37878477c3ddc43a18a08..ef03faf2feff901bb8294aa0b6eedc07e2b434d7 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Instruksi Accessibility",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Toolbar Editor",legend:"Tekan ${toolbarFocus} untuk berpindah ke toolbar. Untuk berpindah ke group toolbar selanjutnya dan sebelumnya gunakan TAB dan SHIFT+TAB. Untuk berpindah ke tombol toolbar selanjutnya dan sebelumnya gunakan RIGHT ARROW atau LEFT ARROW. Tekan SPASI atau ENTER untuk mengaktifkan tombol toolbar."},{name:"Dialog Editor", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js index 9485ba7aa362dbf7d55fc47685b0cbb9a11874e8..4655140336771b7693129976a01d71480ff0b9d8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js index e1a49d7367de682d65c3ec4acb1df14eddf9fad5..761acfd4447ea7a59a1187bf6f6eee57a4507661 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js index e2c6058097c1da9d78d0ac93df3a2d9ee0cbc1b2..7a284ef5424b1329255dc0aafc29f8d3f1829cdf 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកាជំនួយ។ ដើម្បីបិទផ្ទាំងនេះ សូមចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារឧបករណ៍កម្មវិធីនិពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំងកម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js index b4a376adf19dff2f023a825a663808a114aa5186..108c05576a01e58150de21b4bbdb40eb770cd06d 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"접근성 설명",contents:"도움말. 이 창을 닫으시려면 ESC 를 누르세요.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요."},{name:"편집기 다이얼로그",legend:"TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js index d3e9ede3ea07204f50a777e33eaec156b84e2f02..4eb90aa5743c05ca79c0bb8da44e2d5a3ac97b49 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js index b92bb162052775efad43b477ed7179425d116162..67a08df68e9c4e68d8101473e6ad490624873d05 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js index 7d6c88a5128547ba300fb5ffeea7152d792e097b..b26f6f95c4735a05aa4a93fc9c786a4697c5a74f 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js index 86e0e7c0cbaedc29b94bfc4cd667f8af5dbc72f3..26721a49a9a2474a1cf7bdab1c95e707fefae68c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалог притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за уредувачот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js index c5fe6f6e63b7ce560387b96f887c8acb57f7cf23..57d62a7714613ac2de13509b09e14fa607b2936f 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js index c79e4b74ca21fa896cfa061d7fe543eec0f89cbb..d2d2d00b12fbdb287b34748e3f49dc21f25db94a 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js index 1af39f767ae954aa24b0e7c42fad87bbe251c177..f18c763f9fb79a4404a631683f21f70f3f71fd32 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js index 0cde15c70c6fa8004d8d9406d3a7c3587ee4ec89..c65bd17c771a877670d32a89b64b0d40f8749e32 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js index 956c507d2a56b9f31162c134cb7754dc5a2c1579..3129e18a5ea58445bdf6eb4ff9b97ba258d80d80 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","oc",{title:"Instruccions d'accessibilitat",contents:"Contengut de l'ajuda. Per tampar aquesta fenèstra, quichatz sus la tòca Escap.",legend:[{name:"General",items:[{name:"Barra d'aisinas de l'editor",legend:"Quichar sus ${toolbarFocus} per accedir a la barra d'aisinas. Se desplaçar cap al groupe seguent o precedent de la barra d'aisinas amb las tòcas Tab e Maj+Tab. Se desplaçar cap al boton seguent o precedent de la barra d'aisinas amb las tòcas Sageta dreita e Sageta esquèrra. Quichar sus la barra d'espaci o la tòca Entrada per activer lo boton de barra d'aisinas."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js index 6854822e3d873d21da5f9d1dd963206d65eb956f..6a0a01c9d6e0505c3c7ec360148dd0cfa31d92f3 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js index 70b5be38c130df9ef0643d08a86c91383e09493c..2071d9232745263f2742e0bd646db59224572bf8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js index b7016dae35e2e1399f7abba732c86da16b0e6826..e66629e866794ac245afc9feb7e8630528af9043 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de acessibilidade",contents:"Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de ferramentas do editor",legend:"Clique em ${toolbarFocus} para navegar na barra de ferramentas. Para navegar entre o grupo da barra de ferramentas anterior e seguinte use TAB e SHIFT+TAB. Para navegar entre o botão da barra de ferramentas seguinte e anterior use a SETA DIREITA ou SETA ESQUERDA. Carregue em ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js index 3df928b7630004b94da6ef487afc85d978e4950e..cbdcf041a3a21ddcf36ba65fb9e4e21c0f31cbf4 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni Accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editor bară de instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga pe de instrumente. Pentru deplasarea la următorul sau anteriorul grup de instrumente se folosesc tastele TAB și SHIFT+TAB. Pentru deplasare pe urmatorul sau anteriorul instrument se folosesc tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Tasta SPAȚIU sau ENTER activează instrumentul."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js index 3b3ac14f58ec909eb38d6990ff70973c1edc0769..26a0c7c5716e22b5df20702a891ad0130c6e5ad5 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:'Внутри диалога, нажмите TAB чтобы перейти к следующему элементу диалога, нажмите SHIFT+TAB чтобы перейти к предыдущему элементу диалога, нажмите ENTER чтобы отправить диалог, нажмите ESC чтобы отменить диалог. Когда диалоговое окно имеет несколько вкладок, получить доступ к панели вкладок как части диалога можно нажатием или сочетания ALT+F10 или TAB, при этом активные элементы диалога будут перебираться с учетом порядка табуляции. При активной панели вкладок, переход к следующей или предыдущей вкладке осуществляется нажатием стрелки "ВПРАВО" или стрелки "ВЛЕВО" соответственно.'}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js index a34f84d369981e949274b58084e0a46e75413677..e66dd03dcf3307aac9e7a35c2db4136cef2dffba 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js index 053a8a43fb6589f41aaf05fcd10405947864e2c0..a38ba0d75bd9f75235502d93f6a1aa0a7bff0324 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js index ec28e42c0cc7ee24f583f2d5f40391b54d6155bc..82828f448884aca23bd89c75fe8c1a489e374b47 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila za dostopnost",contents:"Vsebina pomoči. Če želite zapreti pogovorno okno, pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Orodna vrstica urejevalnika",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js index d761d5392a591f51d74440247de7052560377f40..e2f27e6fce9d4af0fb92d7b2ae45598a696fc9b3 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Shtyp ${toolbarFocus} për të shfletuar kokështrirjen. Kalo tek grupi paraprak ose pasues i shiritit përmes kombinacionit TAB dhe SHIFT+TAB, në tastierë. Kalo tek pulla paraprake ose pasuese e kokështrirjes përmes SHIGJETË DJATHTAS ose SHIGJETËS MAJTAS, në tastierë. Shtyp HAPËSIRË ose ENTER Move to the next and previous toolbar button with RIGHT ARROW për të aktivizuar pullën e kokështrirjes."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js index 142801f8fa7f8d84ad72b37d0b5c8f6cce4f63ce..411c4e8b2e372fa59556e605c093bc571e880aab 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Uputstva za pomoć",contents:"Sadržaji za pomoć. Da bi ste zatvorili diјalog pritisnite ESC.",legend:[{name:"Opšte",items:[{name:"Alatke za uređivanje",legend:"Pritisnite ${toolbarFocus} da bi označili alatke. Do sledeće i prethodne grupe alatki možete doći sa tasterom TAB i SHIFT+TAB. Do tastera sledeće i predthodne grupe alatki možete doći sa tasterima STRELICA LEVO i STRELICA DESNO. Pritisnite SPACE ili ENTER da bi aktivirali taster alatki."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js index b95dbe05e370cf6a75571ab461f9dde10af2978b..88fd472b01b4614c2dd8d53a043dd4eb8ba0e9f2 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Упутства за помоћ",contents:"Садржаји за помоћ. Да би сте затворили дијалог притисните ЕСЦ",legend:[{name:"Опште",items:[{name:"Алатке за преуређиванје",legend:"Притисните ${toolbarFocus} да би означили алатке. До следеће и претходне групе алатки можете дићи тастером TAB и SHIFT+TAB. До тастера следеће и претходне групе алатки можете доћи са тастерима СТРЕЛИЦА ЛЕВО и СТРЕЛИЦА ДЕСНО. Притисните СПАЦЕ и ЕНТЕР да би активирали тастер алатки."},{name:"Уређивач дијалога", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js index 5308ff0b72370c40b19e0b06ecb72e4b290a073a..9b5fcaece2d1ee997bc7ff9cb4a0ec9fc8257023 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js index ed9bf0468553e428bbd836d324f3ec4f8b27638e..df94b0522abf9ad0ee1fff9f51639c75de5fbde5 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js index d1621bab815142f018a0505fb8fb7d8ed1713a58..e88a0af503fee39af2796b787f8f16f0078fd057 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js index 2609051299435b75bf75c68a934ee278578f708b..aa2ee3279887bcda93cf85c2c3b2c05ad7a9fca6 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js index ff8e5c50dae04b19531334ef8e1449ca8f63bfd0..0eee13aa78948b30b0d29c3db83b791c4e272f9e 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT+TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT+F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛SHIFT+ TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js index 6fe4513ecfd6c4334f90a7bc858d7ee7d9b3ab81..98e3adaaf2a0b48ba7eb43ccc76dd3149303b68c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів."},{name:"Діалог Редактора", diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js index 2b83e6bd29a5814a5fbfe8133b8e738e7c1f556a..d73a2ab7a7f1adf9a4462832ac2a1c42326d7a8b 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js index 3f5ad01570e4586363a0918fb6f3bf2469a9f088..dec691f6e000b0f023f8ee6a48eb03f2c4f4943a 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 切换到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,按 TAB 键移动到下一个字段,按 SHIFT + TAB 组合键移动到上一个字段,按 ENTER 键提交对话框,按 ESC 键取消对话框。对于有多选项卡的对话框,可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表,当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js index f6d6f6dd811457e4796c361f92e5be350b8dfac2..48b81dcfa1d09609ecc0d223248e5b3c7c12159b 100644 --- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中,按下 TAB 鍵以導覽到下一個對話框元素,按下 SHIFT+TAB 以移動到上一個對話框元素,按下 ENTER 以遞交對話框,按下 ESC 以取消對話框。當對話框有多個分頁時,可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時,分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。"},{name:"編輯器內容功能表",legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"}, diff --git a/web/core/assets/vendor/ckeditor/plugins/about/dialogs/about.js b/web/core/assets/vendor/ckeditor/plugins/about/dialogs/about.js index 5cad67433220e0a171d34a0a1c45487a3ef8215c..c0072ff0733025ff99bc4e6cdcb4ab5b477c0276 100644 --- a/web/core/assets/vendor/ckeditor/plugins/about/dialogs/about.js +++ b/web/core/assets/vendor/ckeditor/plugins/about/dialogs/about.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add("about",function(a){a=a.lang.about;var b=CKEDITOR.getUrl(CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png");return{title:a.dlgTitle,minWidth:390,minHeight:210,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'\x3cstyle type\x3d"text/css"\x3e.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+ diff --git a/web/core/assets/vendor/ckeditor/plugins/clipboard/dialogs/paste.js b/web/core/assets/vendor/ckeditor/plugins/clipboard/dialogs/paste.js index 2df5d95278a5d28a63cfc8ce3b1dd2fb832e6b7c..43cd1ca22fe0ef1a3260b70513c800e9f0c66bf8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/clipboard/dialogs/paste.js +++ b/web/core/assets/vendor/ckeditor/plugins/clipboard/dialogs/paste.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add("paste",function(c){function k(a){var b=new CKEDITOR.dom.document(a.document),g=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();g.setAttribute("contenteditable",!0);g.on(e.mainPasteEvent,function(a){a=e.initPasteDataTransfer(a);f?a!=f&&(f=e.initPasteDataTransfer()):f=a});if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){a=a.data;var b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+ diff --git a/web/core/assets/vendor/ckeditor/plugins/dialog/dialogDefinition.js b/web/core/assets/vendor/ckeditor/plugins/dialog/dialogDefinition.js index d8ac273fc0362e629cb7b3e512aad604c30f5733..6c2b0d628973367a34800d21b032bb707beac446 100644 --- a/web/core/assets/vendor/ckeditor/plugins/dialog/dialogDefinition.js +++ b/web/core/assets/vendor/ckeditor/plugins/dialog/dialogDefinition.js @@ -1,4 +1,4 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ diff --git a/web/core/assets/vendor/ckeditor/plugins/image2/dialogs/image2.js b/web/core/assets/vendor/ckeditor/plugins/image2/dialogs/image2.js index d06aa290869e23301b74ee8242048388d2fe9ebe..40884ce5bca58ccd25eea2b3dafaba5150664ede 100644 --- a/web/core/assets/vendor/ckeditor/plugins/image2/dialogs/image2.js +++ b/web/core/assets/vendor/ckeditor/plugins/image2/dialogs/image2.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add("image2",function(f){function C(){var a=this.getValue().match(D);(a=!(!a||0===parseInt(a[1],10)))||alert(c.invalidLength.replace("%1",c[this.id]).replace("%2","px"));return a}function N(){function a(a,c){q.push(b.once(a,function(a){for(var b;b=q.pop();)b.removeListener();c(a)}))}var b=r.createElement("img"),q=[];return function(q,c,e){a("load",function(){var a=E(b);c.call(e,b,a.width,a.height)});a("error",function(){c(null)});a("abort",function(){c(null)});b.setAttribute("src", diff --git a/web/core/assets/vendor/ckeditor/plugins/pastefromgdocs/filter/default.js b/web/core/assets/vendor/ckeditor/plugins/pastefromgdocs/filter/default.js index df93fdb2666f573f423c11ba6dff341f882144f8..eab7cd6e912ac7b57fab9f24fd8c35d9a2346b69 100644 --- a/web/core/assets/vendor/ckeditor/plugins/pastefromgdocs/filter/default.js +++ b/web/core/assets/vendor/ckeditor/plugins/pastefromgdocs/filter/default.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ (function(){function g(b){return""===b?!1:b}function h(b){if(!/(o|u)l/i.test(b.parent.name))return b;d.elements.replaceWithChildren(b);return!1}function k(b){function d(a,f){var b,c;if(a&&"tr"===a.name){b=a.children;for(c=0;c<f.length&&b[c];c++)b[c].attributes.width=f[c];d(a.next,f)}}var c=b.parent;b=function(a){return CKEDITOR.tools.array.map(a,function(a){return Number(a.attributes.width)})}(b.children);var a=function(a){return CKEDITOR.tools.array.reduce(a,function(a,b){return a+b},0)}(b);c.attributes.width= diff --git a/web/core/assets/vendor/ckeditor/plugins/pastefromlibreoffice/filter/default.js b/web/core/assets/vendor/ckeditor/plugins/pastefromlibreoffice/filter/default.js new file mode 100644 index 0000000000000000000000000000000000000000..5f2aff40fad3f9d2c508d410cc2979cab76c746f --- /dev/null +++ b/web/core/assets/vendor/ckeditor/plugins/pastefromlibreoffice/filter/default.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +(function(){function k(b,c){if(!(b.previous&&g(b.previous)&&b.getFirst().children.length&&1===b.children.length&&g(b.getFirst().getFirst())))return!1;for(var d=l(b.previous),a=0,f=d,r=q();f=f.getAscendant(r);)a++;return(a=m(b,a))?(d.add(a),a.filterChildren(c),!0):!1}function l(b){var c=b.children[b.children.length-1];return g(c)||"li"===c.name?l(c):b}function q(){var b=!1;return function(c){return b?!1:g(c)||"li"===c.name?g(c):(b=!0,!1)}}function m(b,c){return c?m(b.getFirst().getFirst(),--c):b}function g(b){return"ol"=== +b.name||"ul"===b.name}function h(){return!1}var n=CKEDITOR.plugins.pastetools,p=n.filters.common,e=p.styles;CKEDITOR.plugins.pastetools.filters.libreoffice={rules:function(b,c,d){return{root:function(a){a.filterChildren(d)},comment:function(){return!1},elementNames:[[/^head$/i,""],[/^meta$/i,""],[/^strike$/i,"s"]],elements:{"!doctype":function(a){a.replaceWithChildren()},span:function(a){a.attributes.style&&(a.attributes.style=e.normalizedStyles(a,c),e.createStyleStack(a,d,c));CKEDITOR.tools.object.entries(a.attributes).length|| +a.replaceWithChildren()},p:function(a){var f=CKEDITOR.tools.parseCssText(a.attributes.style);if(c.plugins.pagebreak&&("always"===f["page-break-before"]||"page"===f["break-before"])){var b=CKEDITOR.plugins.pagebreak.createElement(c),b=CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0];b.insertBefore(a)}a.attributes.style=CKEDITOR.tools.writeCssText(f);a.filterChildren(d);e.createStyleStack(a,d,c)},div:function(a){e.createStyleStack(a,d,c)},a:function(a){if(a.attributes.style){var c= +a.attributes;a=CKEDITOR.tools.parseCssText(a.attributes.style);"#000080"===a.color&&delete a.color;"underline"===a["text-decoration"]&&delete a["text-decoration"];a=CKEDITOR.tools.writeCssText(a);c.style=a}},h1:function(a){e.createStyleStack(a,d,c)},h2:function(a){e.createStyleStack(a,d,c)},h3:function(a){e.createStyleStack(a,d,c)},h4:function(a){e.createStyleStack(a,d,c)},h5:function(a){e.createStyleStack(a,d,c)},h6:function(a){e.createStyleStack(a,d,c)},pre:function(a){e.createStyleStack(a,d,c)}, +font:function(a){var c;c="a"===a.parent.name&&"#000080"===a.attributes.color?!0:1!==a.parent.children.length||"sup"!==a.parent.name&&"sub"!==a.parent.name||"2"!==a.attributes.size?!1:!0;c&&a.replaceWithChildren();c=CKEDITOR.tools.parseCssText(a.attributes.style);var b=a.getFirst();a.attributes.size&&b&&b.type===CKEDITOR.NODE_ELEMENT&&/font-size/.test(b.attributes.style)&&a.replaceWithChildren();c["font-size"]&&(delete a.attributes.size,a.name="span",b&&b.type===CKEDITOR.NODE_ELEMENT&&b.attributes.size&& +b.replaceWithChildren())},ul:function(a){if(k(a,d))return!1},ol:function(a){if(k(a,d))return!1},img:function(a){if(!a.attributes.src)return!1},table:function(a){var c=a.attributes;a=a.attributes.style;var b=CKEDITOR.tools.parseCssText(a);b["border-collapse"]||(b["border-collapse"]="collapse",a=CKEDITOR.tools.writeCssText(b));c.style=a}},attributes:{style:function(a,b){return e.normalizedStyles(b,c)||!1},align:function(a,b){if("img"!==b.name){var c=CKEDITOR.tools.parseCssText(b.attributes.style);c["text-align"]= +b.attributes.align;b.attributes.style=CKEDITOR.tools.writeCssText(c);return!1}},cellspacing:h,cellpadding:h,border:h}}}};CKEDITOR.pasteFilters.libreoffice=n.createFilter({rules:[p.rules,CKEDITOR.plugins.pastetools.filters.libreoffice.rules]})})(); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/plugins/pastefromword/filter/default.js b/web/core/assets/vendor/ckeditor/plugins/pastefromword/filter/default.js index 70a73529c2ed38cd94b5e0d85614448d43716d9f..f3b9c99128ff5bc1b9c5e47c5ea3bf78c8be40e8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/pastefromword/filter/default.js +++ b/web/core/assets/vendor/ckeditor/plugins/pastefromword/filter/default.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ (function(){function r(){return!1}var n=CKEDITOR.tools,B=CKEDITOR.plugins.pastetools,t=B.filters.common,k=t.styles,C=t.createAttributeStack,z=t.lists.getElementIndentation,D=["o:p","xml","script","meta","link"],E="v:arc v:curve v:line v:oval v:polyline v:rect v:roundrect v:group".split(" "),A={},y=0,q={},g,p;CKEDITOR.plugins.pastetools.filters.word=q;CKEDITOR.plugins.pastefromword=q;q.rules=function(b,a,c){function e(d){(d.attributes["o:gfxdata"]||"v:group"===d.parent.name)&&l.push(d.attributes.id)} @@ -8,36 +8,36 @@ A[a]=d}d.attributes.name&&A[d.attributes.name]&&(d=A[d.attributes.name],d.attrib d.attributes.alt.match(/^https?:\/\//)&&(d.attributes.src=d.attributes.alt);d=d.attributes["v:shapes"]?d.attributes["v:shapes"].split(" "):[];a=CKEDITOR.tools.array.every(d,function(a){return-1<l.indexOf(a)});if(d.length&&a)return!1},p:function(d){d.filterChildren(c);if(d.attributes.style&&d.attributes.style.match(/display:\s*none/i))return!1;if(g.thisIsAListItem(a,d))p.isEdgeListItem(a,d)&&p.cleanupEdgeListItem(d),g.convertToFakeListItem(a,d),n.array.reduce(d.children,function(a,d){"p"===d.name&& (0<a&&(new CKEDITOR.htmlParser.element("br")).insertBefore(d),d.replaceWithChildren(),a+=1);return a},0);else{var b=d.getAscendant(function(a){return"ul"==a.name||"ol"==a.name}),e=n.parseCssText(d.attributes.style);b&&!b.attributes["cke-list-level"]&&e["mso-list"]&&e["mso-list"].match(/level/)&&(b.attributes["cke-list-level"]=e["mso-list"].match(/level(\d+)/)[1]);a.config.enterMode==CKEDITOR.ENTER_BR&&(delete d.name,d.add(new CKEDITOR.htmlParser.element("br")))}k.createStyleStack(d,c,a)},pre:function(d){g.thisIsAListItem(a, d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},h1:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},h2:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},h3:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},h4:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},h5:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a, -d);k.createStyleStack(d,c,a)},h6:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},font:function(d){if(d.getHtml().match(/^\s*$/))return(new CKEDITOR.htmlParser.text(" ")).insertAfter(d),!1;a&&!0===a.config.pasteFromWordRemoveFontStyles&&d.attributes.size&&delete d.attributes.size;CKEDITOR.dtd.tr[d.parent.name]&&CKEDITOR.tools.arrayCompare(CKEDITOR.tools.object.keys(d.attributes),["class","style"])?k.createStyleStack(d,c,a):C(d,c)},ul:function(a){if(f)return"li"== -a.parent.name&&0===n.indexOf(a.parent.children,a)&&k.setStyle(a.parent,"list-style-type","none"),g.dissolveList(a),!1},li:function(d){p.correctLevelShift(d);f&&(d.attributes.style=k.normalizedStyles(d,a),k.pushStylesLower(d))},ol:function(a){if(f)return"li"==a.parent.name&&0===n.indexOf(a.parent.children,a)&&k.setStyle(a.parent,"list-style-type","none"),g.dissolveList(a),!1},span:function(b){b.filterChildren(c);b.attributes.style=k.normalizedStyles(b,a);if(!b.attributes.style||b.attributes.style.match(/^mso\-bookmark:OLE_LINK\d+$/)|| -b.getHtml().match(/^(\s| )+$/))return t.elements.replaceWithChildren(b),!1;b.attributes.style.match(/FONT-FAMILY:\s*Symbol/i)&&b.forEach(function(a){a.value=a.value.replace(/ /g,"")},CKEDITOR.NODE_TEXT,!0);k.createStyleStack(b,c,a)},"v:imagedata":r,"v:shape":function(a){var b=!1;if(null===a.getFirst("v:imagedata"))e(a);else{a.parent.find(function(c){"img"==c.name&&c.attributes&&c.attributes["v:shapes"]==a.attributes.id&&(b=!0)},!0);if(b)return!1;var f="";"v:group"===a.parent.name?e(a):(a.forEach(function(a){a.attributes&& -a.attributes.src&&(f=a.attributes.src)},CKEDITOR.NODE_ELEMENT,!0),a.filterChildren(c),a.name="img",a.attributes.src=a.attributes.src||f,delete a.attributes.type)}},style:function(){return!1},object:function(a){return!(!a.attributes||!a.attributes.data)},br:function(b){if(a.plugins.pagebreak&&(b=n.parseCssText(b.attributes.style,!0),"always"===b["page-break-before"]||"page"===b["break-before"]))return b=CKEDITOR.plugins.pagebreak.createElement(a),CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]}}, -attributes:{style:function(b,c){return k.normalizedStyles(c,a)||!1},"class":function(a){a=a.replace(/(el\d+)|(font\d+)|msonormal|msolistparagraph\w*/ig,"");return""===a?!1:a},cellspacing:r,cellpadding:r,border:r,"v:shapes":r,"o:spid":r},comment:function(a){a.match(/\[if.* supportFields.*\]/)&&y++;"[endif]"==a&&(y=0<y?y-1:0);return!1},text:function(a,b){if(y)return"";var c=b.parent&&b.parent.parent;return c&&c.attributes&&c.attributes.style&&c.attributes.style.match(/mso-list:\s*ignore/i)?a.replace(/ /g, -" "):a}};n.array.forEach(E,function(a){w.elements[a]=e});return w};q.lists={thisIsAListItem:function(b,a){return p.isEdgeListItem(b,a)||a.attributes.style&&a.attributes.style.match(/mso\-list:\s?l\d/)&&"li"!==a.parent.name||a.attributes["cke-dissolved"]||a.getHtml().match(/<!\-\-\[if !supportLists]\-\->/)?!0:!1},convertToFakeListItem:function(b,a){p.isDegenerateListItem(b,a)&&p.assignListLevels(b,a);this.getListItemInfo(a);if(!a.attributes["cke-dissolved"]){var c;a.forEach(function(a){!c&&"img"== -a.name&&a.attributes["cke-ignored"]&&"*"==a.attributes.alt&&(c="·",a.remove())},CKEDITOR.NODE_ELEMENT);a.forEach(function(a){c||a.value.match(/^ /)||(c=a.value)},CKEDITOR.NODE_TEXT);if("undefined"==typeof c)return;a.attributes["cke-symbol"]=c.replace(/(?: | ).*$/,"");g.removeSymbolText(a)}var e=a.attributes&&n.parseCssText(a.attributes.style);if(e["margin-left"]){var f=e["margin-left"],l=a.attributes["cke-list-level"];(f=Math.max(CKEDITOR.tools.convertToPx(f)-40*l,0))?e["margin-left"]=f+"px": -delete e["margin-left"];a.attributes.style=CKEDITOR.tools.writeCssText(e)}a.name="cke:li"},convertToRealListItems:function(b){var a=[];b.forEach(function(b){"cke:li"==b.name&&(b.name="li",a.push(b))},CKEDITOR.NODE_ELEMENT,!1);return a},removeSymbolText:function(b){var a=b.attributes["cke-symbol"],c=b.findOne(function(b){return b.value&&-1<b.value.indexOf(a)},!0),e;c&&(c.value=c.value.replace(a,""),e=c.parent,e.getHtml().match(/^(\s| )*$/)&&e!==b?e.remove():c.value||c.remove())},setListSymbol:function(b, -a,c){c=c||1;var e=n.parseCssText(b.attributes.style);if("ol"==b.name){if(b.attributes.type||e["list-style-type"])return;var f={"[ivx]":"lower-roman","[IVX]":"upper-roman","[a-z]":"lower-alpha","[A-Z]":"upper-alpha","\\d":"decimal"},l;for(l in f)if(g.getSubsectionSymbol(a).match(new RegExp(l))){e["list-style-type"]=f[l];break}b.attributes["cke-list-style-type"]=e["list-style-type"]}else f={"·":"disc",o:"circle","§":"square"},!e["list-style-type"]&&f[a]&&(e["list-style-type"]=f[a]);g.setListSymbol.removeRedundancies(e, -c);(b.attributes.style=CKEDITOR.tools.writeCssText(e))||delete b.attributes.style},setListStart:function(b){for(var a=[],c=0,e=0;e<b.children.length;e++)a.push(b.children[e].attributes["cke-symbol"]||"");a[0]||c++;switch(b.attributes["cke-list-style-type"]){case "lower-roman":case "upper-roman":b.attributes.start=g.toArabic(g.getSubsectionSymbol(a[c]))-c;break;case "lower-alpha":case "upper-alpha":b.attributes.start=g.getSubsectionSymbol(a[c]).replace(/\W/g,"").toLowerCase().charCodeAt(0)-96-c;break; -case "decimal":b.attributes.start=parseInt(g.getSubsectionSymbol(a[c]),10)-c||1}"1"==b.attributes.start&&delete b.attributes.start;delete b.attributes["cke-list-style-type"]},numbering:{toNumber:function(b,a){function c(a){a=a.toUpperCase();for(var b=1,c=1;0<a.length;c*=26)b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(a.charAt(a.length-1))*c,a=a.substr(0,a.length-1);return b}function e(a){var b=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4, -"IV"],[1,"I"]];a=a.toUpperCase();for(var c=b.length,d=0,e=0;e<c;++e)for(var g=b[e],u=g[1].length;a.substr(0,u)==g[1];a=a.substr(u))d+=g[0];return d}return"decimal"==a?Number(b):"upper-roman"==a||"lower-roman"==a?e(b.toUpperCase()):"lower-alpha"==a||"upper-alpha"==a?c(b):1},getStyle:function(b){b=b.slice(0,1);var a={i:"lower-roman",v:"lower-roman",x:"lower-roman",l:"lower-roman",m:"lower-roman",I:"upper-roman",V:"upper-roman",X:"upper-roman",L:"upper-roman",M:"upper-roman"}[b];a||(a="decimal",b.match(/[a-z]/)&& -(a="lower-alpha"),b.match(/[A-Z]/)&&(a="upper-alpha"));return a}},getSubsectionSymbol:function(b){return(b.match(/([\da-zA-Z]+).?$/)||["placeholder","1"])[1]},setListDir:function(b){var a=0,c=0;b.forEach(function(b){"li"==b.name&&("rtl"==(b.attributes.dir||b.attributes.DIR||"").toLowerCase()?c++:a++)},CKEDITOR.ELEMENT_NODE);c>a&&(b.attributes.dir="rtl")},createList:function(b){return(b.attributes["cke-symbol"].match(/([\da-np-zA-NP-Z]).?/)||[])[1]?new CKEDITOR.htmlParser.element("ol"):new CKEDITOR.htmlParser.element("ul")}, -createLists:function(b){function a(a){return CKEDITOR.tools.array.reduce(a,function(a,b){if(b.attributes&&b.attributes.style)var c=CKEDITOR.tools.parseCssText(b.attributes.style)["margin-left"];return c?a+parseInt(c,10):a},0)}var c,e,f,l=g.convertToRealListItems(b);if(0===l.length)return[];var k=g.groupLists(l);for(b=0;b<k.length;b++){var d=k[b],h=d[0];for(f=0;f<d.length;f++)if(1==d[f].attributes["cke-list-level"]){h=d[f];break}var h=[g.createList(h)],m=h[0],u=[h[0]];m.insertBefore(d[0]);for(f=0;f< -d.length;f++){c=d[f];for(e=c.attributes["cke-list-level"];e>h.length;){var v=g.createList(c),x=m.children;0<x.length?x[x.length-1].add(v):(x=new CKEDITOR.htmlParser.element("li",{style:"list-style-type:none"}),x.add(v),m.add(x));h.push(v);u.push(v);m=v;e==h.length&&g.setListSymbol(v,c.attributes["cke-symbol"],e)}for(;e<h.length;)h.pop(),m=h[h.length-1],e==h.length&&g.setListSymbol(m,c.attributes["cke-symbol"],e);c.remove();m.add(c)}h[0].children.length&&(f=h[0].children[0].attributes["cke-symbol"], -!f&&1<h[0].children.length&&(f=h[0].children[1].attributes["cke-symbol"]),f&&g.setListSymbol(h[0],f));for(f=0;f<u.length;f++)g.setListStart(u[f]);for(f=0;f<d.length;f++)this.determineListItemValue(d[f])}CKEDITOR.tools.array.forEach(l,function(b){for(var c=[],d=b.parent;d;)"li"===d.name&&c.push(d),d=d.parent;var c=a(c),e;c&&(b.attributes=b.attributes||{},d=CKEDITOR.tools.parseCssText(b.attributes.style),e=d["margin-left"]||0,(e=Math.max(parseInt(e,10)-c,0))?d["margin-left"]=e+"px":delete d["margin-left"], -b.attributes.style=CKEDITOR.tools.writeCssText(d))});return l},cleanup:function(b){var a=["cke-list-level","cke-symbol","cke-list-id","cke-indentation","cke-dissolved"],c,e;for(c=0;c<b.length;c++)for(e=0;e<a.length;e++)delete b[c].attributes[a[e]]},determineListItemValue:function(b){if("ol"===b.parent.name){var a=this.calculateValue(b),c=b.attributes["cke-symbol"].match(/[a-z0-9]+/gi),e;c&&(c=c[c.length-1],e=b.parent.attributes["cke-list-style-type"]||this.numbering.getStyle(c),c=this.numbering.toNumber(c, -e),c!==a&&(b.attributes.value=c))}},calculateValue:function(b){if(!b.parent)return 1;var a=b.parent;b=b.getIndex();var c=null,e,f,g;for(g=b;0<=g&&null===c;g--)f=a.children[g],f.attributes&&void 0!==f.attributes.value&&(e=g,c=parseInt(f.attributes.value,10));null===c&&(c=void 0!==a.attributes.start?parseInt(a.attributes.start,10):1,e=0);return c+(b-e)},dissolveList:function(b){function a(b){return 50<=b?"l"+a(b-50):40<=b?"xl"+a(b-40):10<=b?"x"+a(b-10):9==b?"ix":5<=b?"v"+a(b-5):4==b?"iv":1<=b?"i"+a(b- -1):""}function c(a,b){function c(b,d){return b&&b.parent?a(b.parent)?c(b.parent,d+1):c(b.parent,d):d}return c(b,0)}var e=function(a){return function(b){return b.name==a}},f=function(a){return e("ul")(a)||e("ol")(a)},g=CKEDITOR.tools.array,w=[],d,h;b.forEach(function(a){w.push(a)},CKEDITOR.NODE_ELEMENT,!1);d=g.filter(w,e("li"));var m=g.filter(w,f);g.forEach(m,function(b){var d=b.attributes.type,h=parseInt(b.attributes.start,10)||1,m=c(f,b)+1;d||(d=n.parseCssText(b.attributes.style)["list-style-type"]); -g.forEach(g.filter(b.children,e("li")),function(c,e){var f;switch(d){case "disc":f="·";break;case "circle":f="o";break;case "square":f="§";break;case "1":case "decimal":f=h+e+".";break;case "a":case "lower-alpha":f=String.fromCharCode(97+h-1+e)+".";break;case "A":case "upper-alpha":f=String.fromCharCode(65+h-1+e)+".";break;case "i":case "lower-roman":f=a(h+e)+".";break;case "I":case "upper-roman":f=a(h+e).toUpperCase()+".";break;default:f="ul"==b.name?"·":h+e+"."}c.attributes["cke-symbol"]=f;c.attributes["cke-list-level"]= -m})});d=g.reduce(d,function(a,b){var c=b.children[0];if(c&&c.name&&c.attributes.style&&c.attributes.style.match(/mso-list:/i)){k.pushStylesLower(b,{"list-style-type":!0,display:!0});var d=n.parseCssText(c.attributes.style,!0);k.setStyle(b,"mso-list",d["mso-list"],!0);k.setStyle(c,"mso-list","");delete b["cke-list-level"];(c=d.display?"display":d.DISPLAY?"DISPLAY":"")&&k.setStyle(b,"display",d[c],!0)}if(1===b.children.length&&f(b.children[0]))return a;b.name="p";b.attributes["cke-dissolved"]=!0;a.push(b); -return a},[]);for(h=d.length-1;0<=h;h--)d[h].insertAfter(b);for(h=m.length-1;0<=h;h--)delete m[h].name},groupLists:function(b){var a,c,e=[[b[0]]],f=e[0];c=b[0];c.attributes["cke-indentation"]=c.attributes["cke-indentation"]||z(c);for(a=1;a<b.length;a++){c=b[a];var l=b[a-1];c.attributes["cke-indentation"]=c.attributes["cke-indentation"]||z(c);c.previous!==l&&(g.chopDiscontinuousLists(f,e),e.push(f=[]));f.push(c)}g.chopDiscontinuousLists(f,e);return e},chopDiscontinuousLists:function(b,a){for(var c= -{},e=[[]],f,l=0;l<b.length;l++){var k=c[b[l].attributes["cke-list-level"]],d=this.getListItemInfo(b[l]),h,m;k?(m=k.type.match(/alpha/)&&7==k.index?"alpha":m,m="o"==b[l].attributes["cke-symbol"]&&14==k.index?"alpha":m,h=g.getSymbolInfo(b[l].attributes["cke-symbol"],m),d=this.getListItemInfo(b[l]),(k.type!=h.type||f&&d.id!=f.id&&!this.isAListContinuation(b[l]))&&e.push([])):h=g.getSymbolInfo(b[l].attributes["cke-symbol"]);for(f=parseInt(b[l].attributes["cke-list-level"],10)+1;20>f;f++)c[f]&&delete c[f]; -c[b[l].attributes["cke-list-level"]]=h;e[e.length-1].push(b[l]);f=d}[].splice.apply(a,[].concat([n.indexOf(a,b),1],e))},isAListContinuation:function(b){var a=b;do if((a=a.previous)&&a.type===CKEDITOR.NODE_ELEMENT){if(void 0===a.attributes["cke-list-level"])break;if(a.attributes["cke-list-level"]===b.attributes["cke-list-level"])return a.attributes["cke-list-id"]===b.attributes["cke-list-id"]}while(a);return!1},toArabic:function(b){return b.match(/[ivxl]/i)?b.match(/^l/i)?50+g.toArabic(b.slice(1)): -b.match(/^lx/i)?40+g.toArabic(b.slice(1)):b.match(/^x/i)?10+g.toArabic(b.slice(1)):b.match(/^ix/i)?9+g.toArabic(b.slice(2)):b.match(/^v/i)?5+g.toArabic(b.slice(1)):b.match(/^iv/i)?4+g.toArabic(b.slice(2)):b.match(/^i/i)?1+g.toArabic(b.slice(1)):g.toArabic(b.slice(1)):0},getSymbolInfo:function(b,a){var c=b.toUpperCase()==b?"upper-":"lower-",e={"·":["disc",-1],o:["circle",-2],"§":["square",-3]};if(b in e||a&&a.match(/(disc|circle|square)/))return{index:e[b][1],type:e[b][0]};if(b.match(/\d/))return{index:b? -parseInt(g.getSubsectionSymbol(b),10):0,type:"decimal"};b=b.replace(/\W/g,"").toLowerCase();return!a&&b.match(/[ivxl]+/i)||a&&"alpha"!=a||"roman"==a?{index:g.toArabic(b),type:c+"roman"}:b.match(/[a-z]/i)?{index:b.charCodeAt(0)-97,type:c+"alpha"}:{index:-1,type:"disc"}},getListItemInfo:function(b){if(void 0!==b.attributes["cke-list-id"])return{id:b.attributes["cke-list-id"],level:b.attributes["cke-list-level"]};var a=n.parseCssText(b.attributes.style)["mso-list"],c={id:"0",level:"1"};a&&(a+=" ",c.level= -a.match(/level(.+?)\s+/)[1],c.id=a.match(/l(\d+?)\s+/)[1]);b.attributes["cke-list-level"]=void 0!==b.attributes["cke-list-level"]?b.attributes["cke-list-level"]:c.level;b.attributes["cke-list-id"]=c.id;return c}};g=q.lists;q.images={extractFromRtf:function(b){var a=[],c=/\{\\pict[\s\S]+?\\bliptag\-?\d+(\\blipupi\-?\d+)?(\{\\\*\\blipuid\s?[\da-fA-F]+)?[\s\}]*?/,e;b=b.match(new RegExp("(?:("+c.source+"))([\\da-fA-F\\s]+)\\}","g"));if(!b)return a;for(var f=0;f<b.length;f++)if(c.test(b[f])){if(-1!==b[f].indexOf("\\pngblip"))e= -"image/png";else if(-1!==b[f].indexOf("\\jpegblip"))e="image/jpeg";else continue;a.push({hex:e?b[f].replace(c,"").replace(/[^\da-fA-F]/g,""):null,type:e})}return a},extractTagsFromHtml:function(b){for(var a=/<img[^>]+src="([^"]+)[^>]+/g,c=[],e;e=a.exec(b);)c.push(e[1]);return c}};q.heuristics={isEdgeListItem:function(b,a){if(!CKEDITOR.env.edge||!b.config.pasteFromWord_heuristicsEdgeList)return!1;var c="";a.forEach&&a.forEach(function(a){c+=a.value},CKEDITOR.NODE_TEXT);return c.match(/^(?: | )*\(?[a-zA-Z0-9]+?[\.\)](?: | ){2,}/)? -!0:p.isDegenerateListItem(b,a)},cleanupEdgeListItem:function(b){var a=!1;b.forEach(function(b){a||(b.value=b.value.replace(/^(?: |[\s])+/,""),b.value.length&&(a=!0))},CKEDITOR.NODE_TEXT)},isDegenerateListItem:function(b,a){return!!a.attributes["cke-list-level"]||a.attributes.style&&!a.attributes.style.match(/mso\-list/)&&!!a.find(function(b){if(b.type==CKEDITOR.NODE_ELEMENT&&a.name.match(/h\d/i)&&b.getHtml().match(/^[a-zA-Z0-9]+?[\.\)]$/))return!0;var e=n.parseCssText(b.attributes&&b.attributes.style, -!0);if(!e)return!1;var f=e["font-family"]||"";return(e.font||e["font-size"]||"").match(/7pt/i)&&!!b.previous||f.match(/symbol/i)},!0).length},assignListLevels:function(b,a){if(!a.attributes||void 0===a.attributes["cke-list-level"]){for(var c=[z(a)],e=[a],f=[],g=CKEDITOR.tools.array,k=g.map;a.next&&a.next.attributes&&!a.next.attributes["cke-list-level"]&&p.isDegenerateListItem(b,a.next);)a=a.next,c.push(z(a)),e.push(a);var d=k(c,function(a,b){return 0===b?0:a-c[b-1]}),h=this.guessIndentationStep(g.filter(c, -function(a){return 0!==a})),f=k(c,function(a){return Math.round(a/h)});-1!==g.indexOf(f,0)&&(f=k(f,function(a){return a+1}));g.forEach(e,function(a,b){a.attributes["cke-list-level"]=f[b]});return{indents:c,levels:f,diffs:d}}},guessIndentationStep:function(b){return b.length?Math.min.apply(null,b):null},correctLevelShift:function(b){if(this.isShifted(b)){var a=CKEDITOR.tools.array.filter(b.children,function(a){return"ul"==a.name||"ol"==a.name}),c=CKEDITOR.tools.array.reduce(a,function(a,b){return(b.children&& -1==b.children.length&&p.isShifted(b.children[0])?[b]:b.children).concat(a)},[]);CKEDITOR.tools.array.forEach(a,function(a){a.remove()});CKEDITOR.tools.array.forEach(c,function(a){b.add(a)});delete b.name}},isShifted:function(b){return"li"!==b.name?!1:0===CKEDITOR.tools.array.filter(b.children,function(a){return a.name&&("ul"==a.name||"ol"==a.name||"p"==a.name&&0===a.children.length)?!1:!0}).length}};p=q.heuristics;g.setListSymbol.removeRedundancies=function(b,a){(1===a&&"disc"===b["list-style-type"]|| -"decimal"===b["list-style-type"])&&delete b["list-style-type"]};CKEDITOR.cleanWord=CKEDITOR.pasteFilters.word=B.createFilter({rules:[t.rules,q.rules],additionalTransforms:function(b){CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&(b=t.styles.inliner.inline(b).getBody().getHtml());return b.replace(/<!\[/g,"\x3c!--[").replace(/\]>/g,"]--\x3e")}});CKEDITOR.config.pasteFromWord_heuristicsEdgeList=!0})(); \ No newline at end of file +d);k.createStyleStack(d,c,a)},h6:function(d){g.thisIsAListItem(a,d)&&g.convertToFakeListItem(a,d);k.createStyleStack(d,c,a)},font:function(d){if(d.getHtml().match(/^\s*$/))return d.parent.type===CKEDITOR.NODE_ELEMENT&&(new CKEDITOR.htmlParser.text(" ")).insertAfter(d),!1;a&&!0===a.config.pasteFromWordRemoveFontStyles&&d.attributes.size&&delete d.attributes.size;CKEDITOR.dtd.tr[d.parent.name]&&CKEDITOR.tools.arrayCompare(CKEDITOR.tools.object.keys(d.attributes),["class","style"])?k.createStyleStack(d, +c,a):C(d,c)},ul:function(a){if(f)return"li"==a.parent.name&&0===n.indexOf(a.parent.children,a)&&k.setStyle(a.parent,"list-style-type","none"),g.dissolveList(a),!1},li:function(d){p.correctLevelShift(d);f&&(d.attributes.style=k.normalizedStyles(d,a),k.pushStylesLower(d))},ol:function(a){if(f)return"li"==a.parent.name&&0===n.indexOf(a.parent.children,a)&&k.setStyle(a.parent,"list-style-type","none"),g.dissolveList(a),!1},span:function(d){d.filterChildren(c);d.attributes.style=k.normalizedStyles(d,a); +if(!d.attributes.style||d.attributes.style.match(/^mso\-bookmark:OLE_LINK\d+$/)||d.getHtml().match(/^(\s| )+$/))return t.elements.replaceWithChildren(d),!1;d.attributes.style.match(/FONT-FAMILY:\s*Symbol/i)&&d.forEach(function(a){a.value=a.value.replace(/ /g,"")},CKEDITOR.NODE_TEXT,!0);k.createStyleStack(d,c,a)},"v:imagedata":r,"v:shape":function(a){var b=!1;if(null===a.getFirst("v:imagedata"))e(a);else{a.parent.find(function(c){"img"==c.name&&c.attributes&&c.attributes["v:shapes"]==a.attributes.id&& +(b=!0)},!0);if(b)return!1;var f="";"v:group"===a.parent.name?e(a):(a.forEach(function(a){a.attributes&&a.attributes.src&&(f=a.attributes.src)},CKEDITOR.NODE_ELEMENT,!0),a.filterChildren(c),a.name="img",a.attributes.src=a.attributes.src||f,delete a.attributes.type)}},style:function(){return!1},object:function(a){return!(!a.attributes||!a.attributes.data)},br:function(b){if(a.plugins.pagebreak&&(b=n.parseCssText(b.attributes.style,!0),"always"===b["page-break-before"]||"page"===b["break-before"]))return b= +CKEDITOR.plugins.pagebreak.createElement(a),CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]}},attributes:{style:function(b,c){return k.normalizedStyles(c,a)||!1},"class":function(a){a=a.replace(/(el\d+)|(font\d+)|msonormal|msolistparagraph\w*/ig,"");return""===a?!1:a},cellspacing:r,cellpadding:r,border:r,"v:shapes":r,"o:spid":r},comment:function(a){a.match(/\[if.* supportFields.*\]/)&&y++;"[endif]"==a&&(y=0<y?y-1:0);return!1},text:function(a,b){if(y)return"";var c=b.parent&&b.parent.parent; +return c&&c.attributes&&c.attributes.style&&c.attributes.style.match(/mso-list:\s*ignore/i)?a.replace(/ /g," "):a}};n.array.forEach(E,function(a){w.elements[a]=e});return w};q.lists={thisIsAListItem:function(b,a){return p.isEdgeListItem(b,a)||a.attributes.style&&a.attributes.style.match(/mso\-list:\s?l\d/)&&"li"!==a.parent.name||a.attributes["cke-dissolved"]||a.getHtml().match(/<!\-\-\[if !supportLists]\-\->/)?!0:!1},convertToFakeListItem:function(b,a){p.isDegenerateListItem(b,a)&&p.assignListLevels(b, +a);this.getListItemInfo(a);if(!a.attributes["cke-dissolved"]){var c;a.forEach(function(a){!c&&"img"==a.name&&a.attributes["cke-ignored"]&&"*"==a.attributes.alt&&(c="·",a.remove())},CKEDITOR.NODE_ELEMENT);a.forEach(function(a){c||a.value.match(/^ /)||(c=a.value)},CKEDITOR.NODE_TEXT);if("undefined"==typeof c)return;a.attributes["cke-symbol"]=c.replace(/(?: | ).*$/,"");g.removeSymbolText(a)}var e=a.attributes&&n.parseCssText(a.attributes.style);if(e["margin-left"]){var f=e["margin-left"],l=a.attributes["cke-list-level"]; +(f=Math.max(CKEDITOR.tools.convertToPx(f)-40*l,0))?e["margin-left"]=f+"px":delete e["margin-left"];a.attributes.style=CKEDITOR.tools.writeCssText(e)}a.name="cke:li"},convertToRealListItems:function(b){var a=[];b.forEach(function(b){"cke:li"==b.name&&(b.name="li",a.push(b))},CKEDITOR.NODE_ELEMENT,!1);return a},removeSymbolText:function(b){var a=b.attributes["cke-symbol"],c=b.findOne(function(b){return b.value&&-1<b.value.indexOf(a)},!0),e;c&&(c.value=c.value.replace(a,""),e=c.parent,e.getHtml().match(/^(\s| )*$/)&& +e!==b?e.remove():c.value||c.remove())},setListSymbol:function(b,a,c){c=c||1;var e=n.parseCssText(b.attributes.style);if("ol"==b.name){if(b.attributes.type||e["list-style-type"])return;var f={"[ivx]":"lower-roman","[IVX]":"upper-roman","[a-z]":"lower-alpha","[A-Z]":"upper-alpha","\\d":"decimal"},l;for(l in f)if(g.getSubsectionSymbol(a).match(new RegExp(l))){e["list-style-type"]=f[l];break}b.attributes["cke-list-style-type"]=e["list-style-type"]}else f={"·":"disc",o:"circle","§":"square"},!e["list-style-type"]&& +f[a]&&(e["list-style-type"]=f[a]);g.setListSymbol.removeRedundancies(e,c);(b.attributes.style=CKEDITOR.tools.writeCssText(e))||delete b.attributes.style},setListStart:function(b){for(var a=[],c=0,e=0;e<b.children.length;e++)a.push(b.children[e].attributes["cke-symbol"]||"");a[0]||c++;switch(b.attributes["cke-list-style-type"]){case "lower-roman":case "upper-roman":b.attributes.start=g.toArabic(g.getSubsectionSymbol(a[c]))-c;break;case "lower-alpha":case "upper-alpha":b.attributes.start=g.getSubsectionSymbol(a[c]).replace(/\W/g, +"").toLowerCase().charCodeAt(0)-96-c;break;case "decimal":b.attributes.start=parseInt(g.getSubsectionSymbol(a[c]),10)-c||1}"1"==b.attributes.start&&delete b.attributes.start;delete b.attributes["cke-list-style-type"]},numbering:{toNumber:function(b,a){function c(a){a=a.toUpperCase();for(var b=1,c=1;0<a.length;c*=26)b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(a.charAt(a.length-1))*c,a=a.substr(0,a.length-1);return b}function e(a){var b=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50, +"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]];a=a.toUpperCase();for(var c=b.length,d=0,e=0;e<c;++e)for(var g=b[e],u=g[1].length;a.substr(0,u)==g[1];a=a.substr(u))d+=g[0];return d}return"decimal"==a?Number(b):"upper-roman"==a||"lower-roman"==a?e(b.toUpperCase()):"lower-alpha"==a||"upper-alpha"==a?c(b):1},getStyle:function(b){b=b.slice(0,1);var a={i:"lower-roman",v:"lower-roman",x:"lower-roman",l:"lower-roman",m:"lower-roman",I:"upper-roman",V:"upper-roman",X:"upper-roman",L:"upper-roman", +M:"upper-roman"}[b];a||(a="decimal",b.match(/[a-z]/)&&(a="lower-alpha"),b.match(/[A-Z]/)&&(a="upper-alpha"));return a}},getSubsectionSymbol:function(b){return(b.match(/([\da-zA-Z]+).?$/)||["placeholder","1"])[1]},setListDir:function(b){var a=0,c=0;b.forEach(function(b){"li"==b.name&&("rtl"==(b.attributes.dir||b.attributes.DIR||"").toLowerCase()?c++:a++)},CKEDITOR.ELEMENT_NODE);c>a&&(b.attributes.dir="rtl")},createList:function(b){return(b.attributes["cke-symbol"].match(/([\da-np-zA-NP-Z]).?/)||[])[1]? +new CKEDITOR.htmlParser.element("ol"):new CKEDITOR.htmlParser.element("ul")},createLists:function(b){function a(a){return CKEDITOR.tools.array.reduce(a,function(a,b){if(b.attributes&&b.attributes.style)var c=CKEDITOR.tools.parseCssText(b.attributes.style)["margin-left"];return c?a+parseInt(c,10):a},0)}var c,e,f,l=g.convertToRealListItems(b);if(0===l.length)return[];var k=g.groupLists(l);for(b=0;b<k.length;b++){var d=k[b],h=d[0];for(f=0;f<d.length;f++)if(1==d[f].attributes["cke-list-level"]){h=d[f]; +break}var h=[g.createList(h)],m=h[0],u=[h[0]];m.insertBefore(d[0]);for(f=0;f<d.length;f++){c=d[f];for(e=c.attributes["cke-list-level"];e>h.length;){var v=g.createList(c),x=m.children;0<x.length?x[x.length-1].add(v):(x=new CKEDITOR.htmlParser.element("li",{style:"list-style-type:none"}),x.add(v),m.add(x));h.push(v);u.push(v);m=v;e==h.length&&g.setListSymbol(v,c.attributes["cke-symbol"],e)}for(;e<h.length;)h.pop(),m=h[h.length-1],e==h.length&&g.setListSymbol(m,c.attributes["cke-symbol"],e);c.remove(); +m.add(c)}h[0].children.length&&(f=h[0].children[0].attributes["cke-symbol"],!f&&1<h[0].children.length&&(f=h[0].children[1].attributes["cke-symbol"]),f&&g.setListSymbol(h[0],f));for(f=0;f<u.length;f++)g.setListStart(u[f]);for(f=0;f<d.length;f++)this.determineListItemValue(d[f])}CKEDITOR.tools.array.forEach(l,function(b){for(var c=[],d=b.parent;d;)"li"===d.name&&c.push(d),d=d.parent;var c=a(c),e;c&&(b.attributes=b.attributes||{},d=CKEDITOR.tools.parseCssText(b.attributes.style),e=d["margin-left"]|| +0,(e=Math.max(parseInt(e,10)-c,0))?d["margin-left"]=e+"px":delete d["margin-left"],b.attributes.style=CKEDITOR.tools.writeCssText(d))});return l},cleanup:function(b){var a=["cke-list-level","cke-symbol","cke-list-id","cke-indentation","cke-dissolved"],c,e;for(c=0;c<b.length;c++)for(e=0;e<a.length;e++)delete b[c].attributes[a[e]]},determineListItemValue:function(b){if("ol"===b.parent.name){var a=this.calculateValue(b),c=b.attributes["cke-symbol"].match(/[a-z0-9]+/gi),e;c&&(c=c[c.length-1],e=b.parent.attributes["cke-list-style-type"]|| +this.numbering.getStyle(c),c=this.numbering.toNumber(c,e),c!==a&&(b.attributes.value=c))}},calculateValue:function(b){if(!b.parent)return 1;var a=b.parent;b=b.getIndex();var c=null,e,f,g;for(g=b;0<=g&&null===c;g--)f=a.children[g],f.attributes&&void 0!==f.attributes.value&&(e=g,c=parseInt(f.attributes.value,10));null===c&&(c=void 0!==a.attributes.start?parseInt(a.attributes.start,10):1,e=0);return c+(b-e)},dissolveList:function(b){function a(b){return 50<=b?"l"+a(b-50):40<=b?"xl"+a(b-40):10<=b?"x"+ +a(b-10):9==b?"ix":5<=b?"v"+a(b-5):4==b?"iv":1<=b?"i"+a(b-1):""}function c(a,b){function c(b,d){return b&&b.parent?a(b.parent)?c(b.parent,d+1):c(b.parent,d):d}return c(b,0)}var e=function(a){return function(b){return b.name==a}},f=function(a){return e("ul")(a)||e("ol")(a)},g=CKEDITOR.tools.array,w=[],d,h;b.forEach(function(a){w.push(a)},CKEDITOR.NODE_ELEMENT,!1);d=g.filter(w,e("li"));var m=g.filter(w,f);g.forEach(m,function(b){var d=b.attributes.type,h=parseInt(b.attributes.start,10)||1,m=c(f,b)+1; +d||(d=n.parseCssText(b.attributes.style)["list-style-type"]);g.forEach(g.filter(b.children,e("li")),function(c,e){var f;switch(d){case "disc":f="·";break;case "circle":f="o";break;case "square":f="§";break;case "1":case "decimal":f=h+e+".";break;case "a":case "lower-alpha":f=String.fromCharCode(97+h-1+e)+".";break;case "A":case "upper-alpha":f=String.fromCharCode(65+h-1+e)+".";break;case "i":case "lower-roman":f=a(h+e)+".";break;case "I":case "upper-roman":f=a(h+e).toUpperCase()+".";break;default:f= +"ul"==b.name?"·":h+e+"."}c.attributes["cke-symbol"]=f;c.attributes["cke-list-level"]=m})});d=g.reduce(d,function(a,b){var c=b.children[0];if(c&&c.name&&c.attributes.style&&c.attributes.style.match(/mso-list:/i)){k.pushStylesLower(b,{"list-style-type":!0,display:!0});var d=n.parseCssText(c.attributes.style,!0);k.setStyle(b,"mso-list",d["mso-list"],!0);k.setStyle(c,"mso-list","");delete b["cke-list-level"];(c=d.display?"display":d.DISPLAY?"DISPLAY":"")&&k.setStyle(b,"display",d[c],!0)}if(1===b.children.length&& +f(b.children[0]))return a;b.name="p";b.attributes["cke-dissolved"]=!0;a.push(b);return a},[]);for(h=d.length-1;0<=h;h--)d[h].insertAfter(b);for(h=m.length-1;0<=h;h--)delete m[h].name},groupLists:function(b){var a,c,e=[[b[0]]],f=e[0];c=b[0];c.attributes["cke-indentation"]=c.attributes["cke-indentation"]||z(c);for(a=1;a<b.length;a++){c=b[a];var l=b[a-1];c.attributes["cke-indentation"]=c.attributes["cke-indentation"]||z(c);c.previous!==l&&(g.chopDiscontinuousLists(f,e),e.push(f=[]));f.push(c)}g.chopDiscontinuousLists(f, +e);return e},chopDiscontinuousLists:function(b,a){for(var c={},e=[[]],f,l=0;l<b.length;l++){var k=c[b[l].attributes["cke-list-level"]],d=this.getListItemInfo(b[l]),h,m;k?(m=k.type.match(/alpha/)&&7==k.index?"alpha":m,m="o"==b[l].attributes["cke-symbol"]&&14==k.index?"alpha":m,h=g.getSymbolInfo(b[l].attributes["cke-symbol"],m),d=this.getListItemInfo(b[l]),(k.type!=h.type||f&&d.id!=f.id&&!this.isAListContinuation(b[l]))&&e.push([])):h=g.getSymbolInfo(b[l].attributes["cke-symbol"]);for(f=parseInt(b[l].attributes["cke-list-level"], +10)+1;20>f;f++)c[f]&&delete c[f];c[b[l].attributes["cke-list-level"]]=h;e[e.length-1].push(b[l]);f=d}[].splice.apply(a,[].concat([n.indexOf(a,b),1],e))},isAListContinuation:function(b){var a=b;do if((a=a.previous)&&a.type===CKEDITOR.NODE_ELEMENT){if(void 0===a.attributes["cke-list-level"])break;if(a.attributes["cke-list-level"]===b.attributes["cke-list-level"])return a.attributes["cke-list-id"]===b.attributes["cke-list-id"]}while(a);return!1},toArabic:function(b){return b.match(/[ivxl]/i)?b.match(/^l/i)? +50+g.toArabic(b.slice(1)):b.match(/^lx/i)?40+g.toArabic(b.slice(1)):b.match(/^x/i)?10+g.toArabic(b.slice(1)):b.match(/^ix/i)?9+g.toArabic(b.slice(2)):b.match(/^v/i)?5+g.toArabic(b.slice(1)):b.match(/^iv/i)?4+g.toArabic(b.slice(2)):b.match(/^i/i)?1+g.toArabic(b.slice(1)):g.toArabic(b.slice(1)):0},getSymbolInfo:function(b,a){var c=b.toUpperCase()==b?"upper-":"lower-",e={"·":["disc",-1],o:["circle",-2],"§":["square",-3]};if(b in e||a&&a.match(/(disc|circle|square)/))return{index:e[b][1],type:e[b][0]}; +if(b.match(/\d/))return{index:b?parseInt(g.getSubsectionSymbol(b),10):0,type:"decimal"};b=b.replace(/\W/g,"").toLowerCase();return!a&&b.match(/[ivxl]+/i)||a&&"alpha"!=a||"roman"==a?{index:g.toArabic(b),type:c+"roman"}:b.match(/[a-z]/i)?{index:b.charCodeAt(0)-97,type:c+"alpha"}:{index:-1,type:"disc"}},getListItemInfo:function(b){if(void 0!==b.attributes["cke-list-id"])return{id:b.attributes["cke-list-id"],level:b.attributes["cke-list-level"]};var a=n.parseCssText(b.attributes.style)["mso-list"],c= +{id:"0",level:"1"};a&&(a+=" ",c.level=a.match(/level(.+?)\s+/)[1],c.id=a.match(/l(\d+?)\s+/)[1]);b.attributes["cke-list-level"]=void 0!==b.attributes["cke-list-level"]?b.attributes["cke-list-level"]:c.level;b.attributes["cke-list-id"]=c.id;return c}};g=q.lists;q.images={extractFromRtf:function(b){var a=[],c=/\{\\pict[\s\S]+?\\bliptag\-?\d+(\\blipupi\-?\d+)?(\{\\\*\\blipuid\s?[\da-fA-F]+)?[\s\}]*?/,e;b=b.match(new RegExp("(?:("+c.source+"))([\\da-fA-F\\s]+)\\}","g"));if(!b)return a;for(var f=0;f<b.length;f++)if(c.test(b[f])){if(-1!== +b[f].indexOf("\\pngblip"))e="image/png";else if(-1!==b[f].indexOf("\\jpegblip"))e="image/jpeg";else continue;a.push({hex:e?b[f].replace(c,"").replace(/[^\da-fA-F]/g,""):null,type:e})}return a},extractTagsFromHtml:function(b){for(var a=/<img[^>]+src="([^"]+)[^>]+/g,c=[],e;e=a.exec(b);)c.push(e[1]);return c}};q.heuristics={isEdgeListItem:function(b,a){if(!CKEDITOR.env.edge||!b.config.pasteFromWord_heuristicsEdgeList)return!1;var c="";a.forEach&&a.forEach(function(a){c+=a.value},CKEDITOR.NODE_TEXT); +return c.match(/^(?: | )*\(?[a-zA-Z0-9]+?[\.\)](?: | ){2,}/)?!0:p.isDegenerateListItem(b,a)},cleanupEdgeListItem:function(b){var a=!1;b.forEach(function(b){a||(b.value=b.value.replace(/^(?: |[\s])+/,""),b.value.length&&(a=!0))},CKEDITOR.NODE_TEXT)},isDegenerateListItem:function(b,a){return!!a.attributes["cke-list-level"]||a.attributes.style&&!a.attributes.style.match(/mso\-list/)&&!!a.find(function(b){if(b.type==CKEDITOR.NODE_ELEMENT&&a.name.match(/h\d/i)&&b.getHtml().match(/^[a-zA-Z0-9]+?[\.\)]$/))return!0; +var e=n.parseCssText(b.attributes&&b.attributes.style,!0);if(!e)return!1;var f=e["font-family"]||"";return(e.font||e["font-size"]||"").match(/7pt/i)&&!!b.previous||f.match(/symbol/i)},!0).length},assignListLevels:function(b,a){if(!a.attributes||void 0===a.attributes["cke-list-level"]){for(var c=[z(a)],e=[a],f=[],g=CKEDITOR.tools.array,k=g.map;a.next&&a.next.attributes&&!a.next.attributes["cke-list-level"]&&p.isDegenerateListItem(b,a.next);)a=a.next,c.push(z(a)),e.push(a);var d=k(c,function(a,b){return 0=== +b?0:a-c[b-1]}),h=this.guessIndentationStep(g.filter(c,function(a){return 0!==a})),f=k(c,function(a){return Math.round(a/h)});-1!==g.indexOf(f,0)&&(f=k(f,function(a){return a+1}));g.forEach(e,function(a,b){a.attributes["cke-list-level"]=f[b]});return{indents:c,levels:f,diffs:d}}},guessIndentationStep:function(b){return b.length?Math.min.apply(null,b):null},correctLevelShift:function(b){if(this.isShifted(b)){var a=CKEDITOR.tools.array.filter(b.children,function(a){return"ul"==a.name||"ol"==a.name}), +c=CKEDITOR.tools.array.reduce(a,function(a,b){return(b.children&&1==b.children.length&&p.isShifted(b.children[0])?[b]:b.children).concat(a)},[]);CKEDITOR.tools.array.forEach(a,function(a){a.remove()});CKEDITOR.tools.array.forEach(c,function(a){b.add(a)});delete b.name}},isShifted:function(b){return"li"!==b.name?!1:0===CKEDITOR.tools.array.filter(b.children,function(a){return a.name&&("ul"==a.name||"ol"==a.name||"p"==a.name&&0===a.children.length)?!1:!0}).length}};p=q.heuristics;g.setListSymbol.removeRedundancies= +function(b,a){(1===a&&"disc"===b["list-style-type"]||"decimal"===b["list-style-type"])&&delete b["list-style-type"]};CKEDITOR.cleanWord=CKEDITOR.pasteFilters.word=B.createFilter({rules:[t.rules,q.rules],additionalTransforms:function(b){CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&(b=t.styles.inliner.inline(b).getBody().getHtml());return b.replace(/<!\[/g,"\x3c!--[").replace(/\]>/g,"]--\x3e")}});CKEDITOR.config.pasteFromWord_heuristicsEdgeList=!0})(); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/common.js b/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/common.js index 97977d1e987e5fd34777992c22d729db15b0335e..c2e83385fd3374bae2cb53bb16a77d431d1cdd2b 100644 --- a/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/common.js +++ b/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/common.js @@ -1,19 +1,22 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -(function(){function p(a){var c=a.margin?"margin":a.MARGIN?"MARGIN":!1,d,k;if(c){k=CKEDITOR.tools.style.parse.margin(a[c]);for(d in k)a["margin-"+d]=k[d];delete a[c]}}var f,l=CKEDITOR.tools,n={};CKEDITOR.plugins.pastetools.filters.common=n;n.rules=function(a,c,d){return{elements:{table:function(a){a.filterChildren(d);var b=a.parent,c=b&&b.parent,e,h;if(b.name&&"div"===b.name&&b.attributes.align&&1===l.object.keys(b.attributes).length&&1===b.children.length){a.attributes.align=b.attributes.align;e= -b.children.splice(0);a.remove();for(h=e.length-1;0<=h;h--)c.add(e[h],b.getIndex());b.remove()}f.convertStyleToPx(a)},tr:function(a){a.attributes={}},td:function(a){var b=a.getAscendant("table"),b=l.parseCssText(b.attributes.style,!0),g=b.background;g&&f.setStyle(a,"background",g,!0);(b=b["background-color"])&&f.setStyle(a,"background-color",b,!0);var b=l.parseCssText(a.attributes.style,!0),g=b.border?CKEDITOR.tools.style.border.fromCssRule(b.border):{},g=l.style.border.splitCssValues(b,g),e=CKEDITOR.tools.clone(b), -h;for(h in e)0==h.indexOf("border")&&delete e[h];a.attributes.style=CKEDITOR.tools.writeCssText(e);b.background&&(h=CKEDITOR.tools.style.parse.background(b.background),h.color&&(f.setStyle(a,"background-color",h.color,!0),f.setStyle(a,"background","")));for(var m in g)h=b[m]?CKEDITOR.tools.style.border.fromCssRule(b[m]):g[m],"none"===h.style?f.setStyle(a,m,"none"):f.setStyle(a,m,h.toString());f.mapCommonStyles(a);f.convertStyleToPx(a);f.createStyleStack(a,d,c,/margin|text\-align|padding|list\-style\-type|width|height|border|white\-space|vertical\-align|background/i)}}}}; -n.styles={setStyle:function(a,c,d,k){var b=l.parseCssText(a.attributes.style);k&&b[c]||(""===d?delete b[c]:b[c]=d,a.attributes.style=CKEDITOR.tools.writeCssText(b))},convertStyleToPx:function(a){var c=a.attributes.style;c&&(a.attributes.style=c.replace(/\d+(\.\d+)?pt/g,function(a){return CKEDITOR.tools.convertToPx(a)+"px"}))},mapStyles:function(a,c){for(var d in c)if(a.attributes[d]){if("function"===typeof c[d])c[d](a.attributes[d]);else f.setStyle(a,c[d],a.attributes[d]);delete a.attributes[d]}}, -mapCommonStyles:function(a){return f.mapStyles(a,{vAlign:function(c){f.setStyle(a,"vertical-align",c)},width:function(c){f.setStyle(a,"width",c+"px")},height:function(c){f.setStyle(a,"height",c+"px")}})},normalizedStyles:function(a,c){var d="background-color:transparent border-image:none color:windowtext direction:ltr mso- visibility:visible div:border:none".split(" "),k="font-family font font-size color background-color line-height text-decoration".split(" "),b=function(){for(var a=[],b=0;b<arguments.length;b++)arguments[b]&& -a.push(arguments[b]);return-1!==l.indexOf(d,a.join(":"))},g=!0===CKEDITOR.plugins.pastetools.getConfigValue(c,"removeFontStyles"),e=l.parseCssText(a.attributes.style);"cke:li"==a.name&&(e["TEXT-INDENT"]&&e.MARGIN?(a.attributes["cke-indentation"]=n.lists.getElementIndentation(a),e.MARGIN=e.MARGIN.replace(/(([\w\.]+ ){3,3})[\d\.]+(\w+$)/,"$10$3")):delete e["TEXT-INDENT"],delete e["text-indent"]);for(var h=l.object.keys(e),m=0;m<h.length;m++){var f=h[m].toLowerCase(),r=e[h[m]],t=CKEDITOR.tools.indexOf; -(g&&-1!==t(k,f.toLowerCase())||b(null,f,r)||b(null,f.replace(/\-.*$/,"-"))||b(null,f)||b(a.name,f,r)||b(a.name,f.replace(/\-.*$/,"-"))||b(a.name,f)||b(r))&&delete e[h[m]]}var u=CKEDITOR.plugins.pastetools.getConfigValue(c,"keepZeroMargins");p(e);(function(){CKEDITOR.tools.array.forEach(["top","right","bottom","left"],function(a){a="margin-"+a;if(a in e){var b=CKEDITOR.tools.convertToPx(e[a]);b||u?e[a]=b?b+"px":0:delete e[a]}})})();return CKEDITOR.tools.writeCssText(e)},createStyleStack:function(a, -c,d,k){var b=[];a.filterChildren(c);for(c=a.children.length-1;0<=c;c--)b.unshift(a.children[c]),a.children[c].remove();f.sortStyles(a);c=l.parseCssText(f.normalizedStyles(a,d));d=a;var g="span"===a.name,e;for(e in c)if(!e.match(k||/margin((?!-)|-left|-top|-bottom|-right)|text-indent|text-align|width|border|padding/i))if(g)g=!1;else{var h=new CKEDITOR.htmlParser.element("span");h.attributes.style=e+":"+c[e];d.add(h);d=h;delete c[e]}CKEDITOR.tools.isEmpty(c)?delete a.attributes.style:a.attributes.style= -CKEDITOR.tools.writeCssText(c);for(c=0;c<b.length;c++)d.add(b[c])},sortStyles:function(a){for(var c=["border","border-bottom","font-size","background"],d=l.parseCssText(a.attributes.style),k=l.object.keys(d),b=[],g=[],e=0;e<k.length;e++)-1!==l.indexOf(c,k[e].toLowerCase())?b.push(k[e]):g.push(k[e]);b.sort(function(a,b){var e=l.indexOf(c,a.toLowerCase()),d=l.indexOf(c,b.toLowerCase());return e-d});k=[].concat(b,g);b={};for(e=0;e<k.length;e++)b[k[e]]=d[k[e]];a.attributes.style=CKEDITOR.tools.writeCssText(b)}, -pushStylesLower:function(a,c,d){if(!a.attributes.style||0===a.children.length)return!1;c=c||{};var k={"list-style-type":!0,width:!0,height:!0,border:!0,"border-":!0},b=l.parseCssText(a.attributes.style),g;for(g in b)if(!(g.toLowerCase()in k||k[g.toLowerCase().replace(/\-.*$/,"-")]||g.toLowerCase()in c)){for(var e=!1,h=0;h<a.children.length;h++){var m=a.children[h];if(m.type===CKEDITOR.NODE_TEXT&&d){var q=new CKEDITOR.htmlParser.element("span");q.setHtml(m.value);m.replaceWith(q);m=q}m.type===CKEDITOR.NODE_ELEMENT&& -(e=!0,f.setStyle(m,g,b[g]))}e&&delete b[g]}a.attributes.style=CKEDITOR.tools.writeCssText(b);return!0},inliner:{filtered:"break-before break-after break-inside page-break page-break-before page-break-after page-break-inside".split(" "),parse:function(a){function c(a){var b=new CKEDITOR.dom.element("style"),c=new CKEDITOR.dom.element("iframe");c.hide();CKEDITOR.document.getBody().append(c);c.$.contentDocument.documentElement.appendChild(b.$);b.$.textContent=a;c.remove();return b.$.sheet}function d(a){var b= -a.indexOf("{"),c=a.indexOf("}");return k(a.substring(b+1,c),!0)}var k=CKEDITOR.tools.parseCssText,b=f.inliner.filter,g=a.is?a.$.sheet:c(a);a=[];var e;if(g)for(g=g.cssRules,e=0;e<g.length;e++)g[e].type===window.CSSRule.STYLE_RULE&&a.push({selector:g[e].selectorText,styles:b(d(g[e].cssText))});return a},filter:function(a){var c=f.inliner.filtered,d=l.array.indexOf,k={},b;for(b in a)-1===d(c,b)&&(k[b]=a[b]);return k},sort:function(a){return a.sort(function(a){var d=CKEDITOR.tools.array.map(a,function(a){return a.selector}); -return function(a,b){var c=-1!==(""+a.selector).indexOf(".")?1:0,c=(-1!==(""+b.selector).indexOf(".")?1:0)-c;return 0!==c?c:d.indexOf(b.selector)-d.indexOf(a.selector)}}(a))},inline:function(a){var c=f.inliner.parse,d=f.inliner.sort,k=function(a){a=(new DOMParser).parseFromString(a,"text/html");return new CKEDITOR.dom.document(a)}(a);a=k.find("style");d=d(function(a){var d=[],e;for(e=0;e<a.count();e++)d=d.concat(c(a.getItem(e)));return d}(a));CKEDITOR.tools.array.forEach(d,function(a){var c=a.styles; -a=k.find(a.selector);var e,d,f;p(c);for(f=0;f<a.count();f++)e=a.getItem(f),d=CKEDITOR.tools.parseCssText(e.getAttribute("style")),p(d),d=CKEDITOR.tools.extend({},d,c),e.setAttribute("style",CKEDITOR.tools.writeCssText(d))});return k}}};f=n.styles;n.lists={getElementIndentation:function(a){a=l.parseCssText(a.attributes.style);if(a.margin||a.MARGIN){a.margin=a.margin||a.MARGIN;var c={styles:{margin:a.margin}};CKEDITOR.filter.transformationsTools.splitMarginShorthand(c);a["margin-left"]=c.styles["margin-left"]}return parseInt(l.convertToPx(a["margin-left"]|| -"0px"),10)}};n.elements={replaceWithChildren:function(a){for(var c=a.children.length-1;0<=c;c--)a.children[c].insertAfter(a)}};n.createAttributeStack=function(a,c){var d,f=[];a.filterChildren(c);for(d=a.children.length-1;0<=d;d--)f.unshift(a.children[d]),a.children[d].remove();d=a.attributes;var b=a,g=!0,e;for(e in d)if(g)g=!1;else{var h=new CKEDITOR.htmlParser.element(a.name);h.attributes[e]=d[e];b.add(h);b=h;delete d[e]}for(d=0;d<f.length;d++)b.add(f[d])};n.parseShorthandMargins=p})(); \ No newline at end of file +(function(){function q(a){return/%$/.test(a)?a:a+"px"}function r(a){var b=a.margin?"margin":a.MARGIN?"MARGIN":!1,c,e;if(b){e=CKEDITOR.tools.style.parse.margin(a[b]);for(c in e)a["margin-"+c]=e[c];delete a[b]}}function t(a){var b="background-color:transparent;background:transparent;background-color:none;background:none;background-position:initial initial;background-repeat:initial initial;caret-color;font-family:-webkit-standard;font-variant-caps;letter-spacing:normal;orphans;widows;text-transform:none;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;text-indent:0px;margin-bottom:0in".split(";"), +c=CKEDITOR.tools.parseCssText(a.attributes.style),e,f;for(e in c)f=e+":"+c[e],CKEDITOR.tools.array.some(b,function(a){return f.substring(0,a.length).toLowerCase()===a})&&delete c[e];c=CKEDITOR.tools.writeCssText(c);""!==c?a.attributes.style=c:delete a.attributes.style}function u(a){a=a.config.font_names;var b=[];if(!a||!a.length)return!1;b=CKEDITOR.tools.array.map(a.split(";"),function(a){return-1===a.indexOf("/")?a:a.split("/")[1]});return b.length?b:!1}function v(a,b){var c=a.split(",");return CKEDITOR.tools.array.find(b, +function(a){for(var f=0;f<c.length;f++)if(-1===a.indexOf(CKEDITOR.tools.trim(c[f])))return!1;return!0})||a}var h,l=CKEDITOR.tools,p={};CKEDITOR.plugins.pastetools.filters.common=p;p.rules=function(a,b,c){var e=u(b);return{elements:{"^":function(a){t(a);if(a.attributes.bgcolor){var b=CKEDITOR.tools.parseCssText(a.attributes.style);b["background-color"]||(b["background-color"]=a.attributes.bgcolor,a.attributes.style=CKEDITOR.tools.writeCssText(b))}},span:function(a){if(a.hasClass("Apple-converted-space"))return new CKEDITOR.htmlParser.text(" ")}, +table:function(a){a.filterChildren(c);var b=a.parent,d=b&&b.parent,e,k;if(b.name&&"div"===b.name&&b.attributes.align&&1===l.object.keys(b.attributes).length&&1===b.children.length){a.attributes.align=b.attributes.align;e=b.children.splice(0);a.remove();for(k=e.length-1;0<=k;k--)d.add(e[k],b.getIndex());b.remove()}h.convertStyleToPx(a)},tr:function(a){a.attributes={}},td:function(a){var g=a.getAscendant("table"),g=l.parseCssText(g.attributes.style,!0),d=g.background;d&&h.setStyle(a,"background",d, +!0);(g=g["background-color"])&&h.setStyle(a,"background-color",g,!0);var g=l.parseCssText(a.attributes.style,!0),d=g.border?CKEDITOR.tools.style.border.fromCssRule(g.border):{},d=l.style.border.splitCssValues(g,d),e=CKEDITOR.tools.clone(g),k;for(k in e)0==k.indexOf("border")&&delete e[k];a.attributes.style=CKEDITOR.tools.writeCssText(e);g.background&&(k=CKEDITOR.tools.style.parse.background(g.background),k.color&&(h.setStyle(a,"background-color",k.color,!0),h.setStyle(a,"background","")));for(var m in d)k= +g[m]?CKEDITOR.tools.style.border.fromCssRule(g[m]):d[m],"none"===k.style?h.setStyle(a,m,"none"):h.setStyle(a,m,k.toString());h.mapCommonStyles(a);h.convertStyleToPx(a);h.createStyleStack(a,c,b,/margin|text\-align|padding|list\-style\-type|width|height|border|white\-space|vertical\-align|background/i)},font:function(a){a.attributes.face&&e&&(a.attributes.face=v(a.attributes.face,e))}}}};p.styles={setStyle:function(a,b,c,e){var f=l.parseCssText(a.attributes.style);e&&f[b]||(""===c?delete f[b]:f[b]= +c,a.attributes.style=CKEDITOR.tools.writeCssText(f))},convertStyleToPx:function(a){var b=a.attributes.style;b&&(a.attributes.style=b.replace(/\d+(\.\d+)?pt/g,function(a){return CKEDITOR.tools.convertToPx(a)+"px"}))},mapStyles:function(a,b){for(var c in b)if(a.attributes[c]){if("function"===typeof b[c])b[c](a.attributes[c]);else h.setStyle(a,b[c],a.attributes[c]);delete a.attributes[c]}},mapCommonStyles:function(a){return h.mapStyles(a,{vAlign:function(b){h.setStyle(a,"vertical-align",b)},width:function(b){h.setStyle(a, +"width",q(b))},height:function(b){h.setStyle(a,"height",q(b))}})},normalizedStyles:function(a,b){var c="background-color:transparent border-image:none color:windowtext direction:ltr mso- visibility:visible div:border:none".split(" "),e="font-family font font-size color background-color line-height text-decoration".split(" "),f=function(){for(var a=[],b=0;b<arguments.length;b++)arguments[b]&&a.push(arguments[b]);return-1!==l.indexOf(c,a.join(":"))},g=!0===CKEDITOR.plugins.pastetools.getConfigValue(b, +"removeFontStyles"),d=l.parseCssText(a.attributes.style);"cke:li"==a.name&&(d["TEXT-INDENT"]&&d.MARGIN?(a.attributes["cke-indentation"]=p.lists.getElementIndentation(a),d.MARGIN=d.MARGIN.replace(/(([\w\.]+ ){3,3})[\d\.]+(\w+$)/,"$10$3")):delete d["TEXT-INDENT"],delete d["text-indent"]);for(var n=l.object.keys(d),k=0;k<n.length;k++){var m=n[k].toLowerCase(),h=d[n[k]],q=CKEDITOR.tools.indexOf;(g&&-1!==q(e,m.toLowerCase())||f(null,m,h)||f(null,m.replace(/\-.*$/,"-"))||f(null,m)||f(a.name,m,h)||f(a.name, +m.replace(/\-.*$/,"-"))||f(a.name,m)||f(h))&&delete d[n[k]]}var t=CKEDITOR.plugins.pastetools.getConfigValue(b,"keepZeroMargins");r(d);(function(){CKEDITOR.tools.array.forEach(["top","right","bottom","left"],function(a){a="margin-"+a;if(a in d){var b=CKEDITOR.tools.convertToPx(d[a]);b||t?d[a]=b?b+"px":0:delete d[a]}})})();return CKEDITOR.tools.writeCssText(d)},createStyleStack:function(a,b,c,e){var f=[];a.filterChildren(b);for(b=a.children.length-1;0<=b;b--)f.unshift(a.children[b]),a.children[b].remove(); +h.sortStyles(a);b=l.parseCssText(h.normalizedStyles(a,c));c=a;var g="span"===a.name,d;for(d in b)if(!d.match(e||/margin((?!-)|-left|-top|-bottom|-right)|text-indent|text-align|width|border|padding/i))if(g)g=!1;else{var n=new CKEDITOR.htmlParser.element("span");n.attributes.style=d+":"+b[d];c.add(n);c=n;delete b[d]}CKEDITOR.tools.isEmpty(b)?delete a.attributes.style:a.attributes.style=CKEDITOR.tools.writeCssText(b);for(b=0;b<f.length;b++)c.add(f[b])},sortStyles:function(a){for(var b=["border","border-bottom", +"font-size","background"],c=l.parseCssText(a.attributes.style),e=l.object.keys(c),f=[],g=[],d=0;d<e.length;d++)-1!==l.indexOf(b,e[d].toLowerCase())?f.push(e[d]):g.push(e[d]);f.sort(function(a,c){var d=l.indexOf(b,a.toLowerCase()),f=l.indexOf(b,c.toLowerCase());return d-f});e=[].concat(f,g);f={};for(d=0;d<e.length;d++)f[e[d]]=c[e[d]];a.attributes.style=CKEDITOR.tools.writeCssText(f)},pushStylesLower:function(a,b,c){if(!a.attributes.style||0===a.children.length)return!1;b=b||{};var e={"list-style-type":!0, +width:!0,height:!0,border:!0,"border-":!0},f=l.parseCssText(a.attributes.style),g;for(g in f)if(!(g.toLowerCase()in e||e[g.toLowerCase().replace(/\-.*$/,"-")]||g.toLowerCase()in b)){for(var d=!1,n=0;n<a.children.length;n++){var k=a.children[n];if(k.type===CKEDITOR.NODE_TEXT&&c){var m=new CKEDITOR.htmlParser.element("span");m.setHtml(k.value);k.replaceWith(m);k=m}k.type===CKEDITOR.NODE_ELEMENT&&(d=!0,h.setStyle(k,g,f[g]))}d&&delete f[g]}a.attributes.style=CKEDITOR.tools.writeCssText(f);return!0},inliner:{filtered:"break-before break-after break-inside page-break page-break-before page-break-after page-break-inside".split(" "), +parse:function(a){function b(a){var b=new CKEDITOR.dom.element("style"),c=new CKEDITOR.dom.element("iframe");c.hide();CKEDITOR.document.getBody().append(c);c.$.contentDocument.documentElement.appendChild(b.$);b.$.textContent=a;c.remove();return b.$.sheet}function c(a){var b=a.indexOf("{"),c=a.indexOf("}");return e(a.substring(b+1,c),!0)}var e=CKEDITOR.tools.parseCssText,f=h.inliner.filter,g=a.is?a.$.sheet:b(a);a=[];var d;if(g)for(g=g.cssRules,d=0;d<g.length;d++)g[d].type===window.CSSRule.STYLE_RULE&& +a.push({selector:g[d].selectorText,styles:f(c(g[d].cssText))});return a},filter:function(a){var b=h.inliner.filtered,c=l.array.indexOf,e={},f;for(f in a)-1===c(b,f)&&(e[f]=a[f]);return e},sort:function(a){return a.sort(function(a){var c=CKEDITOR.tools.array.map(a,function(a){return a.selector});return function(a,b){var g=-1!==(""+a.selector).indexOf(".")?1:0,g=(-1!==(""+b.selector).indexOf(".")?1:0)-g;return 0!==g?g:c.indexOf(b.selector)-c.indexOf(a.selector)}}(a))},inline:function(a){var b=h.inliner.parse, +c=h.inliner.sort,e=function(a){a=(new DOMParser).parseFromString(a,"text/html");return new CKEDITOR.dom.document(a)}(a);a=e.find("style");c=c(function(a){var c=[],d;for(d=0;d<a.count();d++)c=c.concat(b(a.getItem(d)));return c}(a));CKEDITOR.tools.array.forEach(c,function(a){var b=a.styles;a=e.find(a.selector);var c,h,k;r(b);for(k=0;k<a.count();k++)c=a.getItem(k),h=CKEDITOR.tools.parseCssText(c.getAttribute("style")),r(h),h=CKEDITOR.tools.extend({},h,b),c.setAttribute("style",CKEDITOR.tools.writeCssText(h))}); +return e}}};h=p.styles;p.lists={getElementIndentation:function(a){a=l.parseCssText(a.attributes.style);if(a.margin||a.MARGIN){a.margin=a.margin||a.MARGIN;var b={styles:{margin:a.margin}};CKEDITOR.filter.transformationsTools.splitMarginShorthand(b);a["margin-left"]=b.styles["margin-left"]}return parseInt(l.convertToPx(a["margin-left"]||"0px"),10)}};p.elements={replaceWithChildren:function(a){for(var b=a.children.length-1;0<=b;b--)a.children[b].insertAfter(a)}};p.createAttributeStack=function(a,b){var c, +e=[];a.filterChildren(b);for(c=a.children.length-1;0<=c;c--)e.unshift(a.children[c]),a.children[c].remove();c=a.attributes;var f=a,g=!0,d;for(d in c)if(g)g=!1;else{var h=new CKEDITOR.htmlParser.element(a.name);h.attributes[d]=c[d];f.add(h);f=h;delete c[d]}for(c=0;c<e.length;c++)f.add(e[c])};p.parseShorthandMargins=r})(); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/image.js b/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/image.js new file mode 100644 index 0000000000000000000000000000000000000000..67648abf1b62824d8870274eafd391bf3af1b857 --- /dev/null +++ b/web/core/assets/vendor/ckeditor/plugins/pastetools/filter/image.js @@ -0,0 +1,6 @@ +/* + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +(function(){function f(b){var c=[],a=/(\{\\pict[^{}]+?|\{\\\*\\shppict\{\\pict\{\\\*[^*]+?)\\(?:jpeg|png)blip/,d;b=b.match(new RegExp("(?:("+a.source+"))([\\da-fA-F\\s]+)\\}","g"));if(!b)return c;for(var e=0;e<b.length;e++)if(a.test(b[e])){if(-1!==b[e].indexOf("\\pngblip"))d="image/png";else if(-1!==b[e].indexOf("\\jpegblip"))d="image/jpeg";else continue;c.push({hex:d?b[e].replace(a,"").replace(/[^\da-fA-F]/g,""):null,type:d})}return c}function g(b){for(var c=/<img[^>]+src="([^"]+)[^>]+/g,a=[],d;d= +c.exec(b);)a.push(d[1]);return a}CKEDITOR.pasteFilters.image=function(b,c,a){var d=[];if(!a)return b;c=g(b);if(0===c.length)return b;a=f(a);if(0===a.length)return b;CKEDITOR.tools.array.forEach(a,function(a){d.push(a.type?"data:"+a.type+";base64,"+CKEDITOR.tools.convertBytesToBase64(CKEDITOR.tools.convertHexStringToBytes(a.hex)):null)},this);if(c.length===d.length)for(a=0;a<c.length;a++)0===c[a].indexOf("file://")&&d[a]&&(b=b.replace(c[a],d[a]));return b}})(); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js b/web/core/assets/vendor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js index 9bd26439b3a2e321a8bc7629e390883fa264c5cf..3fd470851a1eeef2a580f108a39a07bdd018bafc 100644 --- a/web/core/assets/vendor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js +++ b/web/core/assets/vendor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add("sourcedialog",function(a){var b=CKEDITOR.document.getWindow().getViewPaneSize(),e=Math.min(b.width-70,800),b=b.height/1.5,d;return{title:a.lang.sourcedialog.title,minWidth:100,minHeight:100,onShow:function(){this.setValueOf("main","data",d=a.getData())},onOk:function(){function b(f,c){a.focus();a.setData(c,function(){f.hide();var b=a.createRange();b.moveToElementEditStart(a.editable());b.select()})}return function(){var a=this.getValueOf("main","data").replace(/\r/g,""),c=this; diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt index 13193043856819cc511bbda7b5cf68552f9173fb..13d0402a19d4d665050e9d7869b102b82902cfdc 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt @@ -1,4 +1,4 @@ -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license cs.js Found: 118 Missing: 0 diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/af.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/af.js index c51dafb6b55670b655a8938ac420ecd60a3fd634..0742b1d444b56abfe5a943b2df29828e3a471dfb 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/af.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/af.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","af",{euro:"Euroteken",lsquo:"Linker enkelkwotasie",rsquo:"Regter enkelkwotasie",ldquo:"Linker dubbelkwotasie",rdquo:"Regter dubbelkwotasie",ndash:"Kortkoppelteken",mdash:"Langkoppelteken",iexcl:"Omgekeerdeuitroepteken",cent:"Centteken",pound:"Pondteken",curren:"Geldeenheidteken",yen:"Yenteken",brvbar:"Gebreekte balk",sect:"Afdeelingsteken",uml:"Deelteken",copy:"Kopieregteken",ordf:"Vroulikekenteken",laquo:"Linkgeoorienteerde aanhaalingsteken",not:"Verbodeteken", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ar.js index 9e3125409e2ad57844e020126acc9148eb70fffb..21b55334e033540f26a05185877da3c00a4445d2 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ar.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ar.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/az.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/az.js index df50d52fe3912aa0d342024cb8d873b7ae26b670..0e53e57ee1543fc2175572eb4cbfc86d4295e058 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/az.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/az.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","az",{euro:"Avropa valyuta işarəsi",lsquo:"Sol tək dırnaq işarəsi",rsquo:"Sağ tək dırnaq işarəsi",ldquo:"Sol cüt dırnaq işarəsi",rdquo:"Sağ cüt dırnaq işarəsi",ndash:"Çıxma işarəsi",mdash:"Tire",iexcl:"Çevrilmiş nida işarəsi",cent:"Sent işarəsi",pound:"Funt sterlinq işarəsi",curren:"Valyuta işarəsi",yen:"İena işarəsi",brvbar:"Sınmış zolaq",sect:"Paraqraf işarəsi",uml:"Umlyaut",copy:"Müəllif hüquqları haqqında işarəsi",ordf:"Qadın sıra indikatoru (a)",laquo:"Sola göstərən cüt bucaqlı dırnaq", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/bg.js index 8288d8ce5997db7d03abe7aa0d94c8b71631588a..2ff411a1b1f111d4cbe0ec677ce1d2986391c518 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/bg.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/bg.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Женски ординарен индикатор",laquo:"Знак с двоен ъгъл за означаване на лява посока", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ca.js index 28c03c042c939118d74c2bf0836f723a20919820..36a9f735414a9cb8c1cd7656c3cf51b80fe1fcd6 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ca.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ca.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cs.js index 60a1a127307113cde9a5b546607808b58c6dfa8d..224ed08536a1bfc38c428244e0c1c26eddcf1ab5 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cs.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cs.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cy.js index cb704233d440377d44822403355b1091a8acb064..2c43f178eabc571d2324dc603312c7806e1f42ed 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cy.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/cy.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/da.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/da.js index 5be553ed91fae10d91c0b2a9930fbcba50f79e62..11c7a7a3132540721a0050155b5cdd8e2b5ba671 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/da.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/da.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","da",{euro:"Euro-tegn",lsquo:"Venstre enkelt anførselstegn",rsquo:"Højre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Højre dobbelt anførselstegn",ndash:"Bindestreg",mdash:"Tankestreg",iexcl:"Omvendt udråbstegn",cent:"Cent-tegn",pound:"Pund-tegn",curren:"Valuta-tegn",yen:"Yen-tegn",brvbar:"Brudt streg",sect:"Paragraftegn",uml:"Umlaut",copy:"Copyright-tegn",ordf:"Feminin ordinal indikator",laquo:"Venstre dobbel citations-vinkel",not:"Negation", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js index 1752c85d08fa95d55399d3eb2bbf26c726c7d771..09e78fcde060e55accba7dbb057e8ee496cdd838 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","de-ch",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"Kleiner Strich",mdash:"Mittlerer Strich",iexcl:"Invertiertes Ausrufezeichen",cent:"Cent-Zeichen",pound:"Pfund-Zeichen",curren:"Währungszeichen",yen:"Yen",brvbar:"Gestrichelte Linie",sect:"Paragrafenzeichen",uml:"Diäresis",copy:"Copyright-Zeichen",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de.js index 9373218d05a44fa96c21f953c3a260fc294d3e99..4cf083bda651a5d6861807bcc8eaf82ade735c76 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/de.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"Kleiner Strich",mdash:"Mittlerer Strich",iexcl:"Invertiertes Ausrufezeichen",cent:"Cent-Zeichen",pound:"Pfund-Zeichen",curren:"Währungszeichen",yen:"Yen",brvbar:"Gestrichelte Linie",sect:"Paragrafenzeichen",uml:"Diäresis",copy:"Copyright-Zeichen",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/el.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/el.js index 8f23000e581bd8ea265ed95866bf033843c5a388..c3a6f80d572c4681b933dc6f3e4568f7646aa69a 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/el.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/el.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας ευθύγραμμων εισαγωγικών",rdquo:"Δεξιός χαρακτήρας ευθύγραμμων εισαγωγικών",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-au.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-au.js index 3bba46bef392e10dd4b5b612c9158e1be553b4ff..802ce2755a32d0389605c51f1ce3fa884230450c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-au.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-au.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","en-au",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-ca.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-ca.js index babe6216f6417f8ed730a537a26d7a3fc1c8d50b..ac6dadf2b9949a61468d02f104346dd2e4afaa44 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-ca.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-ca.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","en-ca",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js index 4853b56d53ba418ac64b70bbd6613d628a77000c..200eca006962045bee357f04732bf5f612421df2 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en.js index d06f12bb84a420f030896ccfd5d5112dced4bec5..ccafaf61bfaf1b01d13ddfe36a2c79fea94f7a9a 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/en.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eo.js index f64714b2ec54802afeada08acb45c334260036b4..36929eb8e975f699ff2dea295d9001b8c39fe17f 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eo.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eo.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es-mx.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es-mx.js index 0e3b429c29d89382017c4496bd1d8b9202bbcea5..add7c48e7d5ce20584897a0fcb0b62797ce466c3 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es-mx.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es-mx.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","es-mx",{euro:"Signo de Euro",lsquo:"Comillas simple izquierda",rsquo:"Comillas simple derecha",ldquo:"Comillas dobles izquierda",rdquo:"Comillas dobles derecha",ndash:"Guión corto",mdash:"Guión largo",iexcl:"Signo de exclamación invertido",cent:"Signo de centavo",pound:"Signo de Libra",curren:"Signo de moneda",yen:"Signo de Yen",brvbar:"Barra rota",sect:"Signo de la sección",uml:"Diéresis",copy:"Signo de Derechos reservados",ordf:"Indicador ordinal femenino", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es.js index 54d0d29edf911528ed69ff2c2cd7c5a3cb91efc9..05533bcc9326077b70cb2886025a2d81a2af1a62 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/es.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/et.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/et.js index 4e06ffca0a358d44638b86762952f71de9c19215..11324749e3b502bc4f3ddb64b909947740e13551 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/et.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/et.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Naissoost järjestuse märk",laquo:"Alustav kahekordne nurk jutumärk",not:"Ei-märk", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eu.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eu.js index d49fca75eedcb9adad5c77efdb6ef866cfeafcd0..4bc6cf441ecf3d68e93105b36980c1368fd46674 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eu.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/eu.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","eu",{euro:"Euro zeinua",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Libera zeinua",curren:"Currency sign",yen:"Yen zeinua",brvbar:"Broken bar",sect:"Section sign",uml:"Dieresia",copy:"Copyright zeinua",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fa.js index 92112b17adf031d8af892fc93d85f8bad472534f..ffbbb38b53c0e7e7bb01408499573f5aa0ac8aaa 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fa.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fa.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fi.js index 8d61ad3c7347527efce53e893bc0ce1c3854d875..7803503a271c7250491e92a5c3c5e44cad3a4d4e 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fi.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fi.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js index 07ed4ea8cdd76cbb0820a00d5e5c76d0eb0a9568..449b41283c22b12d6024ccdcc4e2ce13cf7787a4 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr.js index 2bf4d8e99b99a760fac60f0a727341963f8fff66..e03fc2aa3324f8a05c3eba989602bec3c256b439 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/fr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret demi-cadratin",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole cent",pound:"Symbole Livre sterling",curren:"Symbole monétaire",yen:"Symbole yen",brvbar:"Barre verticale scindée",sect:"Signe de section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/gl.js index 75aced81531fdda14e4f7dee121756e24ba1d037..8ade2a45a338b2a5134c96df717a0748d91492fa 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/gl.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/gl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/he.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/he.js index 2514bbddc64b55b250ac1c6b04772d58b388e31f..6f45709f7af04a8699812a2c395298c7f0a1b296 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/he.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/he.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hr.js index 6a8139008cd200ef8e33eb0bcdca99a3cac5c892..fff6f695cc4c0bc9d836ec7bbd45d3612539e973 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hr.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Ženska redna oznaka",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hu.js index b5e8c2c517304906f92f46113d165082a013bb79..191a1ffb4ef3da2c993fcf583c1cd9afebeedd0d 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hu.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/hu.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js index b90e48ede7e1b964665cddcc4f23278db319fe79..1426e328f52203e9090bfb0102770b1f47d6f2b2 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/it.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/it.js index a59329614d63c710979e895ed4e6e94a9658aca9..9c732f829167e461760a90386b9bad980653d9ce 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/it.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/it.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ja.js index 4fdda60fd00cebcab9b61002369794bfbab2b45d..122c44f0cf19f24817d9a2c5fe33a20561e4faf7 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ja.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ja.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/km.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/km.js index a9d2c34fbbbf9bf756dba2647e292281020b9cbe..24a7a8a4e1c66ec78e265460a95e33b0086f16da 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/km.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/km.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញាអឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញាសេន",pound:"សញ្ញាផោន",curren:"សញ្ញារូបិយបណ្ណ",yen:"សញ្ញាយ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញារក្សាសិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ko.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ko.js index 89f0cf92221bfa30de48a727b0813f6f2f4e045e..4e60a26d9c27a4563dc5228a3a642d2d1055b580 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ko.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ko.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ko",{euro:"유로화 기호",lsquo:"왼쪽 외 따옴표",rsquo:"오른쪽 외 따옴표",ldquo:"왼쪽 쌍 따옴표",rdquo:"오른쪽 쌍 따옴표",ndash:"반각 대시",mdash:"전각 대시",iexcl:"반전된 느낌표",cent:"센트 기호",pound:"파운드화 기호",curren:"커런시 기호",yen:"위안화 기호",brvbar:"파선",sect:"섹션 기호",uml:"분음 부호",copy:"저작권 기호",ordf:"Feminine ordinal indicator",laquo:"왼쪽 쌍꺽쇠 인용 부호",not:"금지 기호",reg:"등록 기호",macr:"장음 기호",deg:"도 기호",sup2:"위첨자 2",sup3:"위첨자 3",acute:"양음 악센트 부호",micro:"마이크로 기호",para:"단락 기호",middot:"가운데 점",cedil:"세디유",sup1:"위첨자 1",ordm:"Masculine ordinal indicator", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ku.js index 685c66929fb8cc37eee9146a802527e872b51118..9fdea3a810e1546aba9f9baacc7a7132b2ff0e97 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ku.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ku.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چهپ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lt.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lt.js index 262c938a9aede993d5a19643502f4590e3ecc033..fa4875620093be1af732aa1560a8e4ecb688190b 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lt.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lt.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","lt",{euro:"Euro ženklas",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cento ženklas",pound:"Svaro ženklas",curren:"Valiutos ženklas",yen:"Jenos ženklas",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lv.js index d19268a008bc9ddc24097745a4b13c4a064d6fb4..26e2493f1a9d577d77a8389844b7e6fbe1823cdf 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lv.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/lv.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nb.js index 1de7165a7f4d22bd57b5c9dd48b6b0b1035ce4f5..3a59cad8560473c5dae2e8a34fee363277310529 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nb.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nb.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nl.js index c934128a067c9e8f52d0efd788bfe5609e4344bc..5327ea4b2b05df2f1a7e4505d0af125c2dfc3aba 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nl.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/nl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/no.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/no.js index 010be984b1ed461b72829c92d2d8c88dc96deb87..99ffbd751d43823e79a1b657a79eaa98a358a804 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/no.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/no.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/oc.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/oc.js index 52fdbe21b0c2dd135df7103bbde6af99b1fb5e2b..f2dbad3c63dba054ac1efe06a237a62155ddee8c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/oc.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/oc.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","oc",{euro:"Simbòl èuro",lsquo:"Vergueta simpla dobrenta",rsquo:"Vergueta simpla tampanta",ldquo:"Vergueta dobla dobrenta",rdquo:"Vergueta dobla tampanta",ndash:"Jonhent semi-quadratin",mdash:"Jonhent quadratin",iexcl:"Punt d'exclamacion inversat",cent:"Simbòl cent",pound:"Simbòl Liura sterling",curren:"Simbòl monetari",yen:"Simbòl ièn",brvbar:"Barra verticala separada",sect:"Signe de seccion",uml:"Trèma",copy:"Simbòl Copyright",ordf:"Indicador ordinal femenin", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pl.js index 98d73bd12f41525dd7c46a03ddef4ca366c30282..bbf6e57251ed3411bbec2d4230aaa1eb9d156f3c 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pl.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js index 7b7b6e483c883aebe6b098b980ed75f3a8bb137b..0fb8f1b324febd70506ad48f89541d3c04ef74ca 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt.js index 125f29b611a90dc5dff3bb9d16ad17a6715a96a0..c1762c03452c68a68130277ce39f7c169e8697e1 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/pt.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo de Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão simples",mdash:"Travessão longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo de cêntimo",pound:"Símbolo de Libra",curren:"Símbolo de Moeda",yen:"Símbolo de Iene",brvbar:"Barra quebrada",sect:"Símbolo de secção",uml:"Trema",copy:"Símbolo de direitos de autor",ordf:"Indicador ordinal feminino",laquo:"Aspa esquerda ângulo duplo", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ro.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ro.js index 38209aa38969ceeb33e90e8b8758660a60a2a955..919c01196939e93192b144f019df891d059ba172 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ro.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ro.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ro",{euro:"Simbol EURO €",lsquo:"Ghilimea simplă stânga",rsquo:"Ghilimea simplă dreapta",ldquo:"Ghilimea dublă stânga",rdquo:"Ghilimea dublă dreapta",ndash:"liniuță despărțire cu spații",mdash:"liniuță despărțire cuvinte fără spații",iexcl:"semnul exclamației inversat",cent:"simbol cent",pound:"simbol lira sterlină",curren:"simbol monedă",yen:"simbol yen",brvbar:"bara verticală întreruptă",sect:"simbol paragraf",uml:"tréma",copy:"simbol drept de autor",ordf:"Indicatorul ordinal feminin a superscript", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ru.js index 5c0559b519e082dce9c7615c2191c06abe383a1a..c1c527327f483ba61954335eac8062e8b2161cc5 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ru.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ru.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/si.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/si.js index b3df79fb0b512b61ca7919d28bd5bc99fe136612..56f0e5649600a9e1a5c92a945af85cd84fdd8b1a 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/si.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/si.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sk.js index 93a910192a543e6b98dbe0345c51831d05779a55..f0a63ab9dee92aa00dd3db430cf2f3566a28f751 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sk.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sk.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sl.js index f544d36b662af9c9799508dce810f869e2530acc..203d3c7b05c0e5cd7dbeed4ae9b36156919abe61 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sl.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sl.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Znak za evro",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"Pomišljaj",mdash:"Dolgi pomišljaj",iexcl:"Obrnjen klicaj",cent:"Znak za cent",pound:"Znak za funt",curren:"Znak valute",yen:"Znak za jen",brvbar:"Zlomljena črta",sect:"Znak za člen",uml:"Diereza",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi dvojni lomljeni narekovaj",not:"Znak za ne", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sq.js index 14a1a339d5fa2a9a40649a3287b912c5741e3e2e..27339e95bc18365bfcf47ff9b099be721b91c841 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sq.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sq.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Tregues rendor femror",laquo:"Thonjëz me dy kënde e kthyer majtas", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr-latn.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr-latn.js index 789d280d307f7ad260cef6ef2b990ad923b4d29c..8bd2a2b2477dd64342f1bd6cc7dcf82b0af55ee6 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr-latn.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr-latn.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","sr-latn",{euro:"Znak eura",lsquo:"Levi simpli znak navoda",rsquo:"Desni simpli znak navoda",ldquo:"Levi dupli znak navoda",rdquo:"Desni dupli znak navoda",ndash:"Kratka crtica",mdash:"Dugačka crtica",iexcl:"Obrnuti uzvičnik",cent:"Znak za cent",pound:"Znak za funtе",curren:"Znak za valutu",yen:"Znak za jenа",brvbar:"Traka sa prekidom",sect:"Znak paragrafa",uml:"Umlaut",copy:"Znak za autorsko pravo",ordf:"Ženski redni indikator",laquo:"Dupla strelica levo",not:"Bez znaka", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr.js index 3364448a1e40819e6b34c1493aeac683083b1603..7a5a270c3f87ff22a009bb213e78383b5a407836 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","sr",{euro:"Знак еура",lsquo:"Леви симпли знак навода",rsquo:"Десни симпли знак навода",ldquo:"Леви дупли знак навода",rdquo:"Десни дупли знак навода",ndash:"Кратка цртица",mdash:"Дугачка цртица",iexcl:"Обрнути узвичник",cent:"Знак цент",pound:"Знак фунте",curren:"Знак валуте",yen:"Знак јена",brvbar:"Трака са прекидом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак ауторско право",ordf:"Женски редни индикатор",laquo:"Дупла стрелица лево",not:"Без знака",reg:"Регистровани знак", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sv.js index 7d0fbc389be351a714a04e4b31540c931b4e9bc9..56554b14ff591e6b473558a7c06f284b88fd4687 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sv.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/sv.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/th.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/th.js index 5edb8d1a42c7d9ac7cd37da99790faad341c42e4..dfc9b59bf9b892b8a142ca33a02d0a55abaf5da8 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/th.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/th.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tr.js index bc368dfebf95063ff1951be3fc750a84ab01a775..c1851941db1f0129ca3064f1cd8d2cb4a880725d 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tr.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tt.js index 1cff50350bca306f6fefd53521ae836e614023c8..b57f113d9dde53649a98c6e6bed3d5cbd4ab6e75 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tt.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/tt.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Параграф билгесе",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ug.js index b7d1c1d610e735948a575b46da7b8a8a6185e355..870b504c80c8f5eb295d0616aeff48c483006048 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ug.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/ug.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/uk.js index d1f95d10d6529467ec44e1af8c53fc1a03bfb69e..696590d6f232c9a1c43d594bbbc45eddfbe4d10f 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/uk.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/uk.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/vi.js index e135b3316851317e4190f9533b91fba726c60c5f..d142e9228809526cf5c931aea5c1feb4315e7d57 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/vi.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/vi.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js index ad19c2e20eb43c69c7338158d4e6ba5c30ecc9cd..532b813bf2892e9099c90e5844050a93137d52cd 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh.js index cfadf205dbbd588652d82d8bb064caccde96b6bb..3ec2a009bf89b7d27e1330ba02a137583bbacb38 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/zh.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"破折號",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"微",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"二分之一符號",frac34:"四分之三符號", diff --git a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/specialchar.js b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/specialchar.js index 2f19c856048eb2ac14792cb283a107f4e32f5af9..b039d8c0944dcdacc7a0be6f1c8b380f8f1c5e85 100644 --- a/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/specialchar.js +++ b/web/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/specialchar.js @@ -1,14 +1,14 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.dialog.add("specialchar",function(k){var e,n=k.lang.specialchar,m=function(c){var b;c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);"a"==c.getName()&&(b=c.getChild(0).getHtml())&&(c.removeClass("cke_light_background"),e.hide(),c=k.document.createElement("span"),c.setHtml(b),k.insertText(c.getText()))},p=CKEDITOR.tools.addFunction(m),l,g=function(c,b){var a;b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){l&&d(null,l); -var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");l=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("\x26nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("\x26nbsp;"),b.getParent().removeClass("cke_light_background"), -l=void 0)},q=CKEDITOR.tools.addFunction(function(c){c=new CKEDITOR.dom.event(c);var b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==k.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:(a=b.getParent().getParent().getNext())&&(a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type&&(a.focus(),d(null,b),g(null,a));c.preventDefault();break;case 32:m({data:c});c.preventDefault(); -break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): -d(null,b)}});return{title:n.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=k.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['\x3ctable role\x3d"listbox" aria-labelledby\x3d"'+a+'" style\x3d"width: 320px; height: 100%; border-collapse: separate;" align\x3d"center" cellspacing\x3d"2" cellpadding\x3d"2" border\x3d"0"\x3e'],d=0,g=b.length,h,e;d<g;){f.push('\x3ctr role\x3d"presentation"\x3e'); -for(var l=0;l<c;l++,d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("\x26","").replace(";","").replace("#",""),e=n[e]||h);var m="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('\x3ctd class\x3d"cke_dark_background" style\x3d"cursor: default" role\x3d"presentation"\x3e\x3ca href\x3d"javascript: void(0);" role\x3d"option" aria-posinset\x3d"'+(d+1)+'"',' aria-setsize\x3d"'+g+'"',' aria-labelledby\x3d"'+m+'"',' class\x3d"cke_specialchar" title\x3d"',CKEDITOR.tools.htmlEncode(e), -'" onkeydown\x3d"CKEDITOR.tools.callFunction( '+q+', event, this )" onclick\x3d"CKEDITOR.tools.callFunction('+p+', this); return false;" tabindex\x3d"-1"\x3e\x3cspan style\x3d"margin: 0 auto;cursor: inherit"\x3e'+h+'\x3c/span\x3e\x3cspan class\x3d"cke_voice_label" id\x3d"'+m+'"\x3e'+e+"\x3c/span\x3e\x3c/a\x3e")}else f.push('\x3ctd class\x3d"cke_dark_background"\x3e\x26nbsp;');f.push("\x3c/td\x3e")}f.push("\x3c/tr\x3e")}f.push("\x3c/tbody\x3e\x3c/table\x3e",'\x3cspan id\x3d"'+a+'" class\x3d"cke_voice_label"\x3e'+ -n.options+"\x3c/span\x3e");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:k.lang.common.generalTab,title:k.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0, -0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox",align:"top",children:[{type:"html",html:"\x3cdiv\x3e\x3c/div\x3e"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"\x3cdiv\x3e\x26nbsp;\x3c/div\x3e"},{type:"html", -id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"\x3cdiv\x3e\x26nbsp;\x3c/div\x3e"}]}]}]}]}]}}); \ No newline at end of file +CKEDITOR.dialog.add("specialchar",function(h){var f,n=h.lang.specialchar,k,l,p,d,e,q;l=function(c){var b;c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);"a"==c.getName()&&(b=c.getChild(0).getHtml())&&(c.removeClass("cke_light_background"),f.hide(),c=h.document.createElement("span"),c.setHtml(b),h.insertText(c.getText()))};p=CKEDITOR.tools.addFunction(l);e=function(c,b){var a;b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){k&& +d(null,k);var e=f.getContentElement("info","htmlPreview").getElement();f.getContentElement("info","charPreview").getElement().setHtml(a);e.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");k=b}};d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(f.getContentElement("info","charPreview").getElement().setHtml("\x26nbsp;"),f.getContentElement("info","htmlPreview").getElement().setHtml("\x26nbsp;"),b.getParent().removeClass("cke_light_background"), +k=void 0)};q=CKEDITOR.tools.addFunction(function(c){c=new CKEDITOR.dom.event(c);var b=c.getTarget(),a;a=c.getKeystroke();var r="rtl"==h.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),e(null,a);c.preventDefault();break;case 40:(a=b.getParent().getParent().getNext())&&(a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type&&(a.focus(),d(null,b),e(null,a));c.preventDefault();break;case 32:l({data:c});c.preventDefault(); +break;case r?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),e(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),e(null,a),c.preventDefault(!0)):d(null,b);break;case r?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),e(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),e(null,a),c.preventDefault(!0)): +d(null,b)}});return{title:n.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=h.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",d=['\x3ctable role\x3d"listbox" aria-labelledby\x3d"'+a+'" style\x3d"width: 320px; height: 100%; border-collapse: separate;" align\x3d"center" cellspacing\x3d"2" cellpadding\x3d"2" border\x3d"0"\x3e'],e=0,f=b.length,g,m;e<f;){d.push('\x3ctr role\x3d"presentation"\x3e'); +for(var k=0;k<c;k++,e++)if(g=b[e]){g instanceof Array?(m=g[1],g=g[0]):(m=g.replace("\x26","").replace(";","").replace("#",""),m=n[m]||g);var l="cke_specialchar_label_"+e+"_"+CKEDITOR.tools.getNextNumber();d.push('\x3ctd class\x3d"cke_dark_background" style\x3d"cursor: default" role\x3d"presentation"\x3e\x3ca href\x3d"javascript: void(0);" role\x3d"option" aria-posinset\x3d"'+(e+1)+'"',' aria-setsize\x3d"'+f+'"',' aria-labelledby\x3d"'+l+'"',' class\x3d"cke_specialchar" title\x3d"',CKEDITOR.tools.htmlEncode(m), +'" onkeydown\x3d"CKEDITOR.tools.callFunction( '+q+', event, this )" onclick\x3d"CKEDITOR.tools.callFunction('+p+', this); return false;" tabindex\x3d"-1"\x3e\x3cspan style\x3d"margin: 0 auto;cursor: inherit"\x3e'+g+'\x3c/span\x3e\x3cspan class\x3d"cke_voice_label" id\x3d"'+l+'"\x3e'+m+"\x3c/span\x3e\x3c/a\x3e\x3c/td\x3e")}d.push("\x3c/tr\x3e")}d.push("\x3c/tbody\x3e\x3c/table\x3e",'\x3cspan id\x3d"'+a+'" class\x3d"cke_voice_label"\x3e'+n.options+"\x3c/span\x3e");this.getContentElement("info","charContainer").getElement().setHtml(d.join(""))}, +contents:[{id:"info",label:h.lang.common.generalTab,title:h.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:e,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();e(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();e(null,c)},0)},onLoad:function(c){f=c.sender}}, +{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox",align:"top",children:[{type:"html",html:"\x3cdiv\x3e\x3c/div\x3e"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"\x3cdiv\x3e\x26nbsp;\x3c/div\x3e"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", +html:"\x3cdiv\x3e\x26nbsp;\x3c/div\x3e"}]}]}]}]}]}}); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js b/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js index 8f1460745916b7aff43f497d2f4da81e4489accd..3de3e5321f40668ff4c5cdfac6dad0e1183a49b9 100644 --- a/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js +++ b/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ (function(){function w(a){for(var f=0,p=0,n=0,q,d=a.$.rows.length;n<d;n++){q=a.$.rows[n];for(var e=f=0,b,c=q.cells.length;e<c;e++)b=q.cells[e],f+=b.colSpan;f>p&&(p=f)}return p}function t(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer().call(this,f)&&0<f);f||(alert(a),this.select());return f}}function r(a,f){var p=function(d){return new CKEDITOR.dom.element(d,a.document)},r=a.editable(),q=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie? diff --git a/web/core/assets/vendor/ckeditor/plugins/tabletools/dialogs/tableCell.js b/web/core/assets/vendor/ckeditor/plugins/tabletools/dialogs/tableCell.js index 28f9b3262c0dd57af2e0d5bbd2ae930db6b3eab1..b63374dca2eee47e51eb721caebb637722b252fb 100644 --- a/web/core/assets/vendor/ckeditor/plugins/tabletools/dialogs/tableCell.js +++ b/web/core/assets/vendor/ckeditor/plugins/tabletools/dialogs/tableCell.js @@ -1,18 +1,18 @@ /* - Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -CKEDITOR.dialog.add("cellProperties",function(g){function k(a){return{isSpacer:!0,type:"html",html:"\x26nbsp;",requiredContent:a?a:void 0}}function r(){return{type:"vbox",padding:0,children:[]}}function t(a){return{requiredContent:"td{"+a+"}",type:"hbox",widths:["70%","30%"],children:[{type:"text",id:a,width:"100px",label:e[a],validate:n.number(c["invalid"+CKEDITOR.tools.capitalize(a)]),onLoad:function(){var b=this.getDialog().getContentElement("info",a+"Type").getElement(),d=this.getInputElement(), -c=d.getAttribute("aria-labelledby");d.setAttribute("aria-labelledby",[c,b.$.id].join(" "))},setup:f(function(b){var d=parseFloat(b.getAttribute(a),10);b=parseFloat(b.getStyle(a),10);if(!isNaN(b))return b;if(!isNaN(d))return d}),commit:function(b){var d=parseFloat(this.getValue(),10),c=this.getDialog().getValueOf("info",a+"Type")||u(b,a);isNaN(d)?b.removeStyle(a):b.setStyle(a,d+c);b.removeAttribute(a)},"default":""},{type:"select",id:a+"Type",label:g.lang.table[a+"Unit"],labelStyle:"visibility:hidden;display:block;width:0;overflow:hidden", -"default":"px",items:[[p.widthPx,"px"],[p.widthPc,"%"]],setup:f(function(b){return u(b,a)})}]}}function f(a){return function(b){for(var d=a(b[0]),c=1;c<b.length;c++)if(a(b[c])!==d){d=null;break}"undefined"!=typeof d&&(this.setValue(d),CKEDITOR.env.gecko&&"select"==this.type&&!d&&(this.getInputElement().$.selectedIndex=-1))}}function u(a,b){var d=/^(\d+(?:\.\d+)?)(px|%)$/.exec(a.getStyle(b)||a.getAttribute(b));if(d)return d[2]}var p=g.lang.table,c=p.cell,e=g.lang.common,n=CKEDITOR.dialog.validate, -w="rtl"==g.lang.dir,l=g.plugins.colordialog,q=[t("width"),t("height"),k(["td{width}","td{height}"]),{type:"select",id:"wordWrap",requiredContent:"td{white-space}",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:f(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")||b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},k("td{white-space}"),{type:"select", -id:"hAlign",requiredContent:"td{text-align}",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.left,"left"],[e.center,"center"],[e.right,"right"],[e.justify,"justify"]],setup:f(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align");a.removeAttribute("align")}},{type:"select",id:"vAlign",requiredContent:"td{vertical-align}",label:c.vAlign,"default":"",items:[[e.notSet,""], -[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:f(function(a){var b=a.getAttribute("vAlign");a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}},k(["td{text-align}","td{vertical-align}"]),{type:"select",id:"cellType",requiredContent:"th", -label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:f(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},k("th"),{type:"text",id:"rowSpan",requiredContent:"td[rowspan]",label:c.rowSpan,"default":"",validate:n.integer(c.invalidRowSpan),setup:f(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()):a.removeAttribute("rowSpan")}}, -{type:"text",id:"colSpan",requiredContent:"td[colspan]",label:c.colSpan,"default":"",validate:n.integer(c.invalidColSpan),setup:f(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},k(["td[colspan]","td[rowspan]"]),{type:"hbox",padding:0,widths:l?["60%","40%"]:["100%"],requiredContent:"td{background-color}",children:function(){var a=[{type:"text", -id:"bgColor",label:c.bgColor,"default":"",setup:f(function(a){var d=a.getAttribute("bgColor");return a.getStyle("background-color")||d}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}}];l&&a.push({type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&& -this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}});return a}()},{type:"hbox",padding:0,widths:l?["60%","40%"]:["100%"],requiredContent:"td{border-color}",children:function(){var a=[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:f(function(a){var d=a.getAttribute("borderColor");return a.getStyle("border-color")||d}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}}]; -l&&a.push({type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(w?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}});return a}()}],m=0,v=-1,h=[r()],q=CKEDITOR.tools.array.filter(q,function(a){var b=a.requiredContent;delete a.requiredContent;(b=g.filter.check(b))&& -!a.isSpacer&&m++;return b});5<m&&(h=h.concat([k(),r()]));CKEDITOR.tools.array.forEach(q,function(a){a.isSpacer||v++;5<m&&v>=m/2?h[2].children.push(a):h[0].children.push(a)});CKEDITOR.tools.array.forEach(h,function(a){a.isSpacer||(a=a.children,a[a.length-1].isSpacer&&a.pop())});return{title:c.title,minWidth:1===h.length?205:410,minHeight:50,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:1===h.length?["100%"]:["40%","5%","40%"],children:h}]}],getModel:function(a){return CKEDITOR.plugins.tabletools.getSelectedCells(a.getSelection())}, -onShow:function(){var a=this.getModel(this.getParentEditor());this.setupContent(a)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),d=this.getParentEditor(),c=this.getModel(d),e=0;e<c.length;e++)this.commitContent(c[e]);d.forceNextSelectionCheck();a.selectBookmarks(b);d.selectionChange()},onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}), -b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file +CKEDITOR.dialog.add("cellProperties",function(h){function k(a){return{isSpacer:!0,type:"html",html:"\x26nbsp;",requiredContent:a?a:void 0}}function r(){return{type:"vbox",padding:0,children:[]}}function t(a){return{requiredContent:"td{"+a+"}",type:"hbox",widths:["70%","30%"],children:[{type:"text",id:a,width:"100px",label:e[a],validate:n.number(d["invalid"+CKEDITOR.tools.capitalize(a)]),onLoad:function(){var b=this.getDialog().getContentElement("info",a+"Type").getElement(),c=this.getInputElement(), +d=c.getAttribute("aria-labelledby");c.setAttribute("aria-labelledby",[d,b.$.id].join(" "))},setup:f(function(b){var c=parseFloat(b.getAttribute(a),10);b=parseFloat(b.getStyle(a),10);if(!isNaN(b))return b;if(!isNaN(c))return c}),commit:function(b){var c=parseFloat(this.getValue(),10),d=this.getDialog().getValueOf("info",a+"Type")||u(b,a);isNaN(c)?b.removeStyle(a):b.setStyle(a,c+d);b.removeAttribute(a)},"default":""},{type:"select",id:a+"Type",label:h.lang.table[a+"Unit"],labelStyle:"visibility:hidden;display:block;width:0;overflow:hidden", +"default":"px",items:[[p.widthPx,"px"],[p.widthPc,"%"]],setup:f(function(b){return u(b,a)})}]}}function f(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&"select"==this.type&&!c&&(this.getInputElement().$.selectedIndex=-1))}}function u(a,b){var c=/^(\d+(?:\.\d+)?)(px|%)$/.exec(a.getStyle(b)||a.getAttribute(b));if(c)return c[2]}function v(a,b){h.getColorFromDialog(function(c){c&&a.getDialog().getContentElement("info", +b).setValue(c);a.focus()},a)}function w(a,b,c){(a=a.getValue())?b.setStyle(c,a):b.removeStyle(c);"background-color"==c?b.removeAttribute("bgColor"):"border-color"==c&&b.removeAttribute("borderColor")}var p=h.lang.table,d=p.cell,e=h.lang.common,n=CKEDITOR.dialog.validate,y="rtl"==h.lang.dir,l=h.plugins.colordialog,q=[t("width"),t("height"),k(["td{width}","td{height}"]),{type:"select",id:"wordWrap",requiredContent:"td{white-space}",label:d.wordWrap,"default":"yes",items:[[d.yes,"yes"],[d.no,"no"]], +setup:f(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")||b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},k("td{white-space}"),{type:"select",id:"hAlign",requiredContent:"td{text-align}",label:d.hAlign,"default":"",items:[[e.notSet,""],[e.left,"left"],[e.center,"center"],[e.right,"right"],[e.justify,"justify"]],setup:f(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")|| +b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align");a.removeAttribute("align")}},{type:"select",id:"vAlign",requiredContent:"td{vertical-align}",label:d.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[d.alignBaseline,"baseline"]],setup:f(function(a){var b=a.getAttribute("vAlign");a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a= +""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}},k(["td{text-align}","td{vertical-align}"]),{type:"select",id:"cellType",requiredContent:"th",label:d.cellType,"default":"td",items:[[d.data,"td"],[d.header,"th"]],setup:f(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},k("th"),{type:"text",id:"rowSpan",requiredContent:"td[rowspan]",label:d.rowSpan,"default":"", +validate:n.integer(d.invalidRowSpan),setup:f(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()):a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",requiredContent:"td[colspan]",label:d.colSpan,"default":"",validate:n.integer(d.invalidColSpan),setup:f(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(), +10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},k(["td[colspan]","td[rowspan]"]),{type:"hbox",padding:0,widths:l?["60%","40%"]:["100%"],requiredContent:"td{background-color}",children:function(){var a=[{type:"text",id:"bgColor",label:d.bgColor,"default":"",setup:f(function(a){var c=a.getAttribute("bgColor");return a.getStyle("background-color")||c}),commit:function(a){w(this,a,"background-color")}}];l&&a.push({type:"button",id:"bgColorChoose","class":"colorChooser", +label:d.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){v(this,"bgColor")}});return a}()},{type:"hbox",padding:0,widths:l?["60%","40%"]:["100%"],requiredContent:"td{border-color}",children:function(){var a=[{type:"text",id:"borderColor",label:d.borderColor,"default":"",setup:f(function(a){var c=a.getAttribute("borderColor");return a.getStyle("border-color")||c}),commit:function(a){w(this,a,"border-color")}}];l&&a.push({type:"button", +id:"borderColorChoose","class":"colorChooser",label:d.chooseColor,style:(y?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){v(this,"borderColor")}});return a}()}],m=0,x=-1,g=[r()],q=CKEDITOR.tools.array.filter(q,function(a){var b=a.requiredContent;delete a.requiredContent;(b=h.filter.check(b))&&!a.isSpacer&&m++;return b});5<m&&(g=g.concat([k(),r()]));CKEDITOR.tools.array.forEach(q,function(a){a.isSpacer|| +x++;5<m&&x>=m/2?g[2].children.push(a):g[0].children.push(a)});CKEDITOR.tools.array.forEach(g,function(a){a.isSpacer||(a=a.children,a[a.length-1].isSpacer&&a.pop())});return{title:d.title,minWidth:1===g.length?205:410,minHeight:50,contents:[{id:"info",label:d.title,accessKey:"I",elements:[{type:"hbox",widths:1===g.length?["100%"]:["40%","5%","40%"],children:g}]}],getModel:function(a){return CKEDITOR.plugins.tabletools.getSelectedCells(a.getSelection())},onShow:function(){var a=this.getModel(this.getParentEditor()); +this.setupContent(a)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.getParentEditor(),d=this.getModel(c),e=0;e<d.length;e++)this.commitContent(d[e]);c.forceNextSelectionCheck();a.selectBookmarks(b);c.selectionChange()},onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!== +b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css index c918329bf6d30eaf22f7dfc437acca65eea77f9c..aef0323c85c057a672cf5bb3c686c8ba73f4d0cf 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ .cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css index 4a9d1b9adda55d5bb60bda9d93614381874706a7..50403e204e50fb131f98ddae0e42793d0a762602 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ .cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css index 625d1349b8a26edc09f561270ed961a28e8789d5..6b73dc57950e48f8c4a514b22e60983b9d1ca6a3 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ .cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button{min-height:18px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{min-height:18px}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus{padding-top:4px;padding-bottom:2px}select.cke_dialog_ui_input_select{width:100%!important}select.cke_dialog_ui_input_select:focus{margin-left:1px;width:100%!important;padding-top:2px;padding-bottom:2px} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css index c634bfae056d136b9c321d1d58f5bcb81180f32c..2c2ed4c6bd79ff5ff95aedf19cabcab62705948f 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ .cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_tel,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css index 5c4c0424ce9fb7e65ec0bfc9209888b68fd773f9..097f4f477eee32148249e95a3eab550ec2127d2e 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=JA5A) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=JA5A) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=JA5A) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=JA5A) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=JA5A) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=JA5A) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=JA5A) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=JA5A) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=JA5A) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=JA5A) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=JA5A) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=JA5A) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=JA5A) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=JA5A) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=JA5A) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=JA5A) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -2256px!important} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=K2GA) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=K2GA) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=K2GA) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=K2GA) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=K2GA) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=K2GA) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=K2GA) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=K2GA) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=K2GA) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=K2GA) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=K2GA) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=K2GA) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=K2GA) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=K2GA) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=K2GA) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=K2GA) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -2256px!important} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css index 9f06cc4b197146b541e268433cb78082011356b5..1ad93307115fe60c8de31059a5c1208d680652fa 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=JA5A) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=JA5A) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=JA5A) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=JA5A) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=JA5A) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=JA5A) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=JA5A) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=JA5A) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=JA5A) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=JA5A) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=JA5A) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=JA5A) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=JA5A) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=JA5A) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=JA5A) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=JA5A) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -2256px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=K2GA) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=K2GA) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=K2GA) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=K2GA) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=K2GA) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=K2GA) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=K2GA) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=K2GA) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=K2GA) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=K2GA) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=K2GA) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=K2GA) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=K2GA) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=K2GA) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=K2GA) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=K2GA) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -2256px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css index 05ee1c9e6f1ea9e1552cdc8754435dae31a3a54c..045e8034983530957eb739bb8a737cf7679ea207 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=JA5A) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=JA5A) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=JA5A) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=JA5A) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=JA5A) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=JA5A) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=JA5A) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=JA5A) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=JA5A) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=JA5A) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=JA5A) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=JA5A) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=JA5A) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=JA5A) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=JA5A) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=JA5A) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=K2GA) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=K2GA) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=K2GA) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=K2GA) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=K2GA) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=K2GA) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=K2GA) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=K2GA) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=K2GA) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=K2GA) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=K2GA) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=K2GA) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=K2GA) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=K2GA) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=K2GA) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=K2GA) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css index d1309ff21ff3983a50eef46f2e54299f6ef3207f..4af875ea9c26076a9c9957d25855f1d40158e924 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=JA5A) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=JA5A) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=JA5A) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=JA5A) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=JA5A) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=JA5A) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=JA5A) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=JA5A) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=JA5A) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=JA5A) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=JA5A) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=JA5A) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=JA5A) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=JA5A) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=JA5A) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=JA5A) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=K2GA) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=K2GA) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=K2GA) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=K2GA) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=K2GA) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=K2GA) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=K2GA) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=K2GA) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=K2GA) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=K2GA) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=K2GA) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=K2GA) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=K2GA) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=K2GA) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=K2GA) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=K2GA) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0} \ No newline at end of file diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css index 4f7896b40c05e4bd3757f3da92d49fdc1cab16d8..ec304970c3dc1085eff5ad5df01b583c3ca4e2f4 100644 --- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css +++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=JA5A) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=JA5A) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=JA5A) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=JA5A) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=JA5A) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=JA5A) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=JA5A) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=JA5A) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=JA5A) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=JA5A) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=JA5A) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=JA5A) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=JA5A) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=JA5A) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=JA5A) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=JA5A) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=JA5A) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=JA5A) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=JA5A) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=JA5A) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=JA5A) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=JA5A) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=JA5A) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=JA5A) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=JA5A) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=JA5A) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=JA5A) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=JA5A) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=JA5A) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=K2GA) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=K2GA) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=K2GA) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=K2GA) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=K2GA) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=K2GA) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=K2GA) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=K2GA) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=K2GA) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=K2GA) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=K2GA) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=K2GA) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=K2GA) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=K2GA) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=K2GA) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=K2GA) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=K2GA) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=K2GA) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=K2GA) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=K2GA) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=K2GA) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=K2GA) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=K2GA) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=K2GA) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=K2GA) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=K2GA) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=K2GA) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=K2GA) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=K2GA) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0} \ No newline at end of file diff --git a/web/core/core.libraries.yml b/web/core/core.libraries.yml index 0ff5fb09ec56509920e36e5c5315b3a3ac592aa6..7958f8b7adc296f4f6dc3369b556cc078e370ee6 100644 --- a/web/core/core.libraries.yml +++ b/web/core/core.libraries.yml @@ -25,10 +25,10 @@ classList: ckeditor: remote: https://github.com/ckeditor/ckeditor-dev - version: "4.13.0" + version: "4.14.0" license: name: GNU-GPL-2.0-or-later - url: https://github.com/ckeditor/ckeditor-dev/blob/4.13/LICENSE.md + url: https://github.com/ckeditor/ckeditor4/blob/4.14.0/LICENSE.md gpl-compatible: true js: assets/vendor/ckeditor/ckeditor.js: { preprocess: false, minified: true } diff --git a/web/core/core.services.yml b/web/core/core.services.yml index 93e57d0fb41da83e2616a9d8392c3df21e9e92bd..98c0aac61abc9319603fb8e21c621a0b56694fb5 100644 --- a/web/core/core.services.yml +++ b/web/core/core.services.yml @@ -641,6 +641,7 @@ services: plugin.manager.archiver: class: Drupal\Core\Archiver\ArchiverManager parent: default_plugin_manager + arguments: ['@file_system'] plugin.manager.action: class: Drupal\Core\Action\ActionManager arguments: ['@container.namespaces', '@cache.discovery', '@module_handler'] diff --git a/web/core/drupalci.yml b/web/core/drupalci.yml index ed02d43c6375d58c810d8626bcb16cb0babfd74c..6c388ae328b8f86753bc0f4281feb59427a48cc9 100644 --- a/web/core/drupalci.yml +++ b/web/core/drupalci.yml @@ -53,7 +53,3 @@ build: # Run nightwatch testing. # @see https://www.drupal.org/project/drupal/issues/2869825 nightwatchjs: -# container_command.drupal_project_templates: -# commands: -# - "sudo -u www-data ${SOURCE_DIR}/core/tests/scripts/test_composer_project_templates.sh" -# halt-on-fail: true diff --git a/web/core/includes/bootstrap.inc b/web/core/includes/bootstrap.inc index f35f104311463091d84874f8e271f23c2c83acde..73b947f13efd0e122dddb1a0139e3e6793c1deea 100644 --- a/web/core/includes/bootstrap.inc +++ b/web/core/includes/bootstrap.inc @@ -131,7 +131,7 @@ * @see http://php.net/manual/reserved.variables.server.php * @see http://php.net/manual/function.time.php * - * @deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. + * @deprecated in drupal:8.3.0 and is removed from drupal:10.0.0. * Use \Drupal::time()->getRequestTime(); * * @see https://www.drupal.org/node/2785211 diff --git a/web/core/includes/database.inc b/web/core/includes/database.inc index 4f2c3c5292a0a40ee9541c51af57afbecf305cec..76d92619147dcec561ea5ea8b131c90fe3a2481a 100644 --- a/web/core/includes/database.inc +++ b/web/core/includes/database.inc @@ -1016,7 +1016,7 @@ function db_drop_unique_key($table, $name) { * @see \Drupal\Core\Database\Schema::addIndex() */ function db_add_index($table, $name, $fields, array $spec) { - @trigger_error('db_add_index() is deprecated in Drupal 8.0.x and will be removed in Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call addIndex() on it. For example, $injected_database->schema()->addIndex($table, $name, $fields, $spec). See https://www.drupal.org/node/2993033', E_USER_DEPRECATED); + @trigger_error('db_add_index() is deprecated in drupal:8.0.x and will be removed in drupal:9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call addIndex() on it. For example, $injected_database->schema()->addIndex($table, $name, $fields, $spec). See https://www.drupal.org/node/2993033', E_USER_DEPRECATED); Database::getConnection()->schema()->addIndex($table, $name, $fields, $spec); } diff --git a/web/core/includes/install.core.inc b/web/core/includes/install.core.inc index 55c9e7773ba0d58261cdb9cc4b3e19613db319d6..cfab4129048d76099bff3a158773d00901fb55d1 100644 --- a/web/core/includes/install.core.inc +++ b/web/core/includes/install.core.inc @@ -2322,7 +2322,13 @@ function install_config_import_batch() { // Match up the site UUIDs, the install_base_system install task will have // installed the system module and created a new UUID. $system_site = $sync->read('system.site'); - \Drupal::configFactory()->getEditable('system.site')->set('uuid', $system_site['uuid'])->save(); + // When installing from configuration it is possible that system.site + // configuration is not present. If this occurs a ConfigImporterException will + // by thrown when $config_importer->initialize() is called below and the error + // will be reported to the user. + if ($system_site !== FALSE) { + \Drupal::configFactory()->getEditable('system.site')->set('uuid', $system_site['uuid'])->save(); + } // Create the storage comparer and the config importer. $storage_comparer = new StorageComparer($sync, \Drupal::service('config.storage')); diff --git a/web/core/includes/schema.inc b/web/core/includes/schema.inc index 5c024a89d87811cf38aa6ab0c8df50775891b51e..99576b0d2b9c0a3abef4dd7950c0e493b6a3c98e 100644 --- a/web/core/includes/schema.inc +++ b/web/core/includes/schema.inc @@ -83,9 +83,10 @@ function drupal_get_installed_schema_version($module, $reset = FALSE, $array = F } if (!$versions) { - if (!$versions = \Drupal::keyValue('system.schema')->getAll()) { - $versions = []; - } + $versions = \Drupal::keyValue('system.schema')->getAll(); + $enabled_modules = \Drupal::moduleHandler()->getModuleList(); + $enabled_modules = array_fill_keys(array_keys($enabled_modules), \Drupal::CORE_MINIMUM_SCHEMA_VERSION); + $versions = array_merge($enabled_modules, $versions); } if ($array) { diff --git a/web/core/includes/theme.inc b/web/core/includes/theme.inc index 713983c679ff1d1adad57e8b6f114320ad3a5486..18916b2c540547bf064856e1af4c571fc767429a 100644 --- a/web/core/includes/theme.inc +++ b/web/core/includes/theme.inc @@ -20,8 +20,8 @@ use Drupal\Core\Render\BubbleableMetadata; use Drupal\Core\Render\RenderableInterface; use Drupal\Core\Template\Attribute; +use Drupal\Core\Template\AttributeHelper; use Drupal\Core\Theme\ThemeSettings; -use Drupal\Component\Utility\NestedArray; use Drupal\Core\Render\Element; use Drupal\Core\Render\Markup; use Drupal\Core\Utility\TableSort; @@ -821,7 +821,7 @@ function template_preprocess_image(&$variables) { if (isset($variables[$key])) { // If the property has already been defined in the attributes, // do not override, including NULL. - if (array_key_exists($key, $variables['attributes'])) { + if (AttributeHelper::attributeExists($key, $variables['attributes'])) { continue; } $variables['attributes'][$key] = $variables[$key]; @@ -1130,7 +1130,7 @@ function template_preprocess_item_list(&$variables) { // \Drupal\Core\Render\Element::children(), which cannot be used // here, since it triggers an error on string values. foreach ($child as $child_key => $child_value) { - if ($child_key[0] !== '#') { + if (is_int($child_key) || $child_key === '' || $child_key[0] !== '#') { $child['#items'][$child_key] = $child_value; unset($child[$child_key]); } @@ -1243,7 +1243,7 @@ function template_preprocess(&$variables, $hook, $info) { if (isset($info['render element'])) { $key = $info['render element']; if (isset($variables[$key]['#attributes'])) { - $variables['attributes'] = NestedArray::mergeDeep($variables['attributes'], $variables[$key]['#attributes']); + $variables['attributes'] = AttributeHelper::mergeCollections($variables['attributes'], $variables[$key]['#attributes']); } } } @@ -1578,7 +1578,7 @@ function template_preprocess_field(&$variables, $hook) { // Merge attributes when a single-value field has a hidden label. if ($element['#label_display'] == 'hidden' && !$variables['multiple'] && !empty($element['#items'][0]->_attributes)) { - $variables['attributes'] = NestedArray::mergeDeep($variables['attributes'], (array) $element['#items'][0]->_attributes); + $variables['attributes'] = AttributeHelper::mergeCollections($variables['attributes'], (array) $element['#items'][0]->_attributes); } // We want other preprocess functions and the theme implementation to have diff --git a/web/core/includes/update.inc b/web/core/includes/update.inc index 792e94c2865a48d5fbbd3d0632c9f9acf3fccbc5..9e3a7a4e3445d2c64ba724942480575351131f5e 100644 --- a/web/core/includes/update.inc +++ b/web/core/includes/update.inc @@ -607,7 +607,7 @@ function update_retrieve_dependencies() { $return = []; // Get a list of installed modules, arranged so that we invoke their hooks in // the same order that \Drupal::moduleHandler()->invokeAll() does. - foreach (\Drupal::keyValue('system.schema')->getAll() as $module => $schema) { + foreach (drupal_get_installed_schema_version(NULL, FALSE, TRUE) as $module => $schema) { if ($schema == SCHEMA_UNINSTALLED) { // Nothing to upgrade. continue; diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php index d5b238bfd7f84822f8195df6daebe7de4dd20392..48549e2a4d615941553c4685034cb4a289c98864 100644 --- a/web/core/lib/Drupal.php +++ b/web/core/lib/Drupal.php @@ -82,7 +82,7 @@ class Drupal { /** * The current system version. */ - const VERSION = '8.8.2'; + const VERSION = '8.8.4'; /** * Core API compatibility. diff --git a/web/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php b/web/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php index 1d8cf2fbc320db5902bd670650f39acea1822d4b..3c0e82e882027beeb683bece79b79aa5c82b92c5 100644 --- a/web/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php +++ b/web/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php @@ -966,9 +966,11 @@ private function Identifier() $className = $this->lexer->token['value']; - while ($this->lexer->lookahead['position'] === ($this->lexer->token['position'] + strlen($this->lexer->token['value'])) - && $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR)) { - + while ( + null !== $this->lexer->lookahead && + $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + strlen($this->lexer->token['value'])) && + $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) + ) { $this->match(DocLexer::T_NAMESPACE_SEPARATOR); $this->matchAny(self::$classIdentifiers); diff --git a/web/core/lib/Drupal/Component/Datetime/Time.php b/web/core/lib/Drupal/Component/Datetime/Time.php index 77da2e2c1f5eecdfc4139603e4822319ec7d4278..566debba0494cacae2002c92a674564c97396748 100644 --- a/web/core/lib/Drupal/Component/Datetime/Time.php +++ b/web/core/lib/Drupal/Component/Datetime/Time.php @@ -30,14 +30,26 @@ public function __construct(RequestStack $request_stack) { * {@inheritdoc} */ public function getRequestTime() { - return $this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME'); + $request = $this->requestStack->getCurrentRequest(); + if ($request) { + return $request->server->get('REQUEST_TIME'); + } + // If this is called prior to the request being pushed to the stack fallback + // to built-in globals (if available) or the system time. + return $_SERVER['REQUEST_TIME'] ?? $this->getCurrentTime(); } /** * {@inheritdoc} */ public function getRequestMicroTime() { - return $this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME_FLOAT'); + $request = $this->requestStack->getCurrentRequest(); + if ($request) { + return $request->server->get('REQUEST_TIME_FLOAT'); + } + // If this is called prior to the request being pushed to the stack fallback + // to built-in globals (if available) or the system time. + return $_SERVER['REQUEST_TIME_FLOAT'] ?? $this->getCurrentMicroTime(); } /** diff --git a/web/core/lib/Drupal/Component/Datetime/TimeInterface.php b/web/core/lib/Drupal/Component/Datetime/TimeInterface.php index 0c81575c73a1dac4cee702e2cb67bff58914e8fd..cedea4fe80dae87722bf3d16d49e78ec93f69b54 100644 --- a/web/core/lib/Drupal/Component/Datetime/TimeInterface.php +++ b/web/core/lib/Drupal/Component/Datetime/TimeInterface.php @@ -14,6 +14,9 @@ interface TimeInterface { * of the request. It will be the same value for the life of the request * (even for long execution times). * + * If the request is not available it will fallback to the current system + * time. + * * This method can replace instances of * @code * $request_time = $_SERVER['REQUEST_TIME']; @@ -50,6 +53,9 @@ public function getRequestTime(); * microsecond precision, at the start of the request. It will be the same * value for the life of the request (even for long execution times). * + * If the request is not available it will fallback to the current system + * time with microsecond precision. + * * This method can replace instances of * @code * $request_time_float = $_SERVER['REQUEST_TIME_FLOAT']; diff --git a/web/core/lib/Drupal/Core/Access/AccessResult.php b/web/core/lib/Drupal/Core/Access/AccessResult.php index 959a93978ebf02951ee75c1991677550c2414940..4a29a6848ebff650a23e29d2b7ada61af139858d 100644 --- a/web/core/lib/Drupal/Core/Access/AccessResult.php +++ b/web/core/lib/Drupal/Core/Access/AccessResult.php @@ -290,6 +290,7 @@ public function cachePerUser() { * ::addCacheableDependency() instead. */ public function cacheUntilEntityChanges(EntityInterface $entity) { + @trigger_error(__METHOD__ . ' is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Access\AccessResult::addCacheableDependency() instead.', E_USER_DEPRECATED); return $this->addCacheableDependency($entity); } diff --git a/web/core/lib/Drupal/Core/Archiver/ArchiverManager.php b/web/core/lib/Drupal/Core/Archiver/ArchiverManager.php index 2ae021d73957876ce136d1bf9e581f64976b62b0..e5545d74d79accf71f4d5b8973e4c5395906dc52 100644 --- a/web/core/lib/Drupal/Core/Archiver/ArchiverManager.php +++ b/web/core/lib/Drupal/Core/Archiver/ArchiverManager.php @@ -5,6 +5,7 @@ use Drupal\Component\Plugin\Factory\DefaultFactory; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Plugin\DefaultPluginManager; /** @@ -16,6 +17,13 @@ */ class ArchiverManager extends DefaultPluginManager { + /** + * The file system service. + * + * @var \Drupal\Core\File\FileSystemInterface + */ + protected $fileSystem; + /** * Constructs a ArchiverManager object. * @@ -26,11 +34,18 @@ class ArchiverManager extends DefaultPluginManager { * Cache backend instance to use. * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler to invoke the alter hook with. + * @param \Drupal\Core\File\FileSystemInterface $file_system + * The file handler. */ - public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { + public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, FileSystemInterface $file_system = NULL) { parent::__construct('Plugin/Archiver', $namespaces, $module_handler, 'Drupal\Core\Archiver\ArchiverInterface', 'Drupal\Core\Archiver\Annotation\Archiver'); $this->alterInfo('archiver_info'); $this->setCacheBackend($cache_backend, 'archiver_info_plugins'); + if (!isset($file_system)) { + @trigger_error('Not defining the final $file_system argument to ' . __METHOD__ . ' is deprecated in drupal:8.8.3 and will throw an error in drupal:10.0.0.', E_USER_DEPRECATED); + $file_system = \Drupal::service('file_system'); + } + $this->fileSystem = $file_system; } /** @@ -39,7 +54,7 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac public function createInstance($plugin_id, array $configuration = []) { $plugin_definition = $this->getDefinition($plugin_id); $plugin_class = DefaultFactory::getPluginClass($plugin_id, $plugin_definition, 'Drupal\Core\Archiver\ArchiverInterface'); - return new $plugin_class($configuration['filepath']); + return new $plugin_class($this->fileSystem->realpath($configuration['filepath'])); } /** diff --git a/web/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php b/web/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php index 9c99bdc53d3416a0b969205939f0fce2118a58eb..86c22c18378d065924310742d7596e05121352dc 100644 --- a/web/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php +++ b/web/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php @@ -117,7 +117,7 @@ public function buildByExtension($extension) { $library['version'] = \Drupal::VERSION; } // Remove 'v' prefix from external library versions. - elseif ($library['version'][0] === 'v') { + elseif (is_string($library['version']) && $library['version'][0] === 'v') { $library['version'] = substr($library['version'], 1); } } diff --git a/web/core/lib/Drupal/Core/Config/StorageComparer.php b/web/core/lib/Drupal/Core/Config/StorageComparer.php index e362493ac30cfdd2abb202a6d12f55d8a26f3a3d..5110111aadc14f63424ebd4de8c20a8946fb6f82 100644 --- a/web/core/lib/Drupal/Core/Config/StorageComparer.php +++ b/web/core/lib/Drupal/Core/Config/StorageComparer.php @@ -388,7 +388,9 @@ public function hasChanges() { public function validateSiteUuid() { $source = $this->sourceStorage->read('system.site'); $target = $this->targetStorage->read('system.site'); - return $source['uuid'] === $target['uuid']; + // It is possible that the storage does not contain system.site + // configuration. In such cases the site UUID cannot be valid. + return $source && $target && $source['uuid'] === $target['uuid']; } /** diff --git a/web/core/lib/Drupal/Core/Database/Connection.php b/web/core/lib/Drupal/Core/Database/Connection.php index 47532fa78bab5c97f837a48c97530cc5e070e1ff..94ba8bed4e3d85d7a1b0e64f951dc461938cf289 100644 --- a/web/core/lib/Drupal/Core/Database/Connection.php +++ b/web/core/lib/Drupal/Core/Database/Connection.php @@ -607,7 +607,7 @@ public function query($query, array $args = [], $options = []) { // Use default values if not already set. $options += $this->defaultOptions(); if (isset($options['target'])) { - @trigger_error('Passing a \'target\' key to \\Drupal\\Core\\Database\\Connection::query $options argument is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, use \\Drupal\\Core\\Database\\Database::getConnection($target)->query(). See https://www.drupal.org/node/2993033.', E_USER_DEPRECATED); + @trigger_error('Passing a \'target\' key to \\Drupal\\Core\\Database\\Connection::query $options argument is deprecated in drupal:8.0.x and will be removed before drupal:9.0.0. Instead, use \\Drupal\\Core\\Database\\Database::getConnection($target)->query(). See https://www.drupal.org/node/2993033', E_USER_DEPRECATED); } try { diff --git a/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php index dbbafe70c0adfc7fd535856ff4e5b4c5b42d077c..64612cb0f1f8a26da1342ed9fd62ebace403693f 100644 --- a/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php +++ b/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php @@ -490,7 +490,7 @@ public function dropField($table, $field) { * {@inheritdoc} */ public function fieldSetDefault($table, $field, $default) { - @trigger_error('fieldSetDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); + @trigger_error('fieldSetDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); } @@ -502,7 +502,7 @@ public function fieldSetDefault($table, $field, $default) { * {@inheritdoc} */ public function fieldSetNoDefault($table, $field) { - @trigger_error('fieldSetNoDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); + @trigger_error('fieldSetNoDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); } diff --git a/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php index 38abcb6b50c111f2cf91487943be0a0488c15924..9b4663006cad1d7b25448bcf18d697f2f7600a5f 100644 --- a/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php +++ b/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php @@ -700,7 +700,7 @@ public function dropField($table, $field) { * {@inheritdoc} */ public function fieldSetDefault($table, $field, $default) { - @trigger_error('fieldSetDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); + @trigger_error('fieldSetDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); } @@ -714,7 +714,7 @@ public function fieldSetDefault($table, $field, $default) { * {@inheritdoc} */ public function fieldSetNoDefault($table, $field) { - @trigger_error('fieldSetNoDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); + @trigger_error('fieldSetNoDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); } diff --git a/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php b/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php index c6f34c5c241f31e3f521839f1e68ddb2c67bc031..96441bc9fcccb43c096cf5f61614da7ba33f2f30 100644 --- a/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php +++ b/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php @@ -790,7 +790,7 @@ protected function introspectIndexSchema($table) { * {@inheritdoc} */ public function fieldSetDefault($table, $field, $default) { - @trigger_error('fieldSetDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); + @trigger_error('fieldSetDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); } @@ -806,7 +806,7 @@ public function fieldSetDefault($table, $field, $default) { * {@inheritdoc} */ public function fieldSetNoDefault($table, $field) { - @trigger_error('fieldSetNoDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); + @trigger_error('fieldSetNoDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035', E_USER_DEPRECATED); if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); } diff --git a/web/core/lib/Drupal/Core/Database/Install/Tasks.php b/web/core/lib/Drupal/Core/Database/Install/Tasks.php index 7dfe5d02888d13fdc46e4051d3b0b8b33271ffb7..6ba3ba733c6751371b1239e5ed134163ab545ac1 100644 --- a/web/core/lib/Drupal/Core/Database/Install/Tasks.php +++ b/web/core/lib/Drupal/Core/Database/Install/Tasks.php @@ -243,7 +243,9 @@ public function getFormOptions(array $database) { ]; global $install_state; - $profile = $install_state['parameters']['profile']; + // @todo https://www.drupal.org/project/drupal/issues/3110839 remove PHP 7.4 + // work around and add a better message for the migrate UI. + $profile = $install_state['parameters']['profile'] ?? NULL; $db_prefix = ($profile == 'standard') ? 'drupal_' : $profile . '_'; $form['advanced_options']['prefix'] = [ '#type' => 'textfield', diff --git a/web/core/lib/Drupal/Core/Datetime/DrupalDateTime.php b/web/core/lib/Drupal/Core/Datetime/DrupalDateTime.php index 9f9edc47398adc1ef7832aa418050a705de717df..49aff3f8fa217cf8492dc490991915aebf63b279 100644 --- a/web/core/lib/Drupal/Core/Datetime/DrupalDateTime.php +++ b/web/core/lib/Drupal/Core/Datetime/DrupalDateTime.php @@ -23,9 +23,34 @@ class DrupalDateTime extends DateTimePlus { use StringTranslationTrait; /** - * Format string translation cache. + * Formatted strings translation cache. * - * @var string + * Translation cache represents an instance storage for formatted date + * strings. It contains a multidimensional array where: + * - first level keys - are drupal language codes; + * - second level keys - are each symbols of given format string (like 'F'); + * - third level keys - are original matched strings related to the symbol; + * - values - are translated or not-translated original strings (depends on + * if a particular symbol represents translatable value according to PHP's + * date() format character). + * + * For example: + * @code + * [ + * 'en' => [ + * 'F' => [ + * 'November' => t('November'), + * 'December' => t('December'), + * ], + * 'd' => [ + * '10' => '10', + * '31' => '31', + * ], + * ], + * ] + * @endcode + * + * @var array */ protected $formatTranslationCache; diff --git a/web/core/lib/Drupal/Core/Entity/ContentEntityType.php b/web/core/lib/Drupal/Core/Entity/ContentEntityType.php index 66b1a06a8ae29d473469824f2d2a031acd1ed76c..d94f1c8101624d4e5b347c267ce73fefa61c16d1 100644 --- a/web/core/lib/Drupal/Core/Entity/ContentEntityType.php +++ b/web/core/lib/Drupal/Core/Entity/ContentEntityType.php @@ -17,11 +17,6 @@ class ContentEntityType extends EntityType implements ContentEntityTypeInterface /** * The required revision metadata keys. * - * This property should only be filled in the constructor. This ensures that - * only new instances get newly added required revision metadata keys. - * Unserialized objects will only retrieve the keys that they already have - * been cached with. - * * @var array */ protected $requiredRevisionMetadataKeys = []; @@ -119,4 +114,25 @@ public function hasRevisionMetadataKey($key) { return isset($keys[$key]); } + /** + * {@inheritdoc} + */ + public function setRevisionMetadataKey($key, $field_name) { + if ($field_name !== NULL) { + // Update the property holding the required revision metadata keys, + // which is used by the BC layer for retrieving the revision metadata + // keys. + // @see \Drupal\Core\Entity\ContentEntityType::getRevisionMetadataKeys() + $this->requiredRevisionMetadataKeys[$key] = $field_name; + + // Add the new revision metadata key. + $this->revision_metadata_keys[$key] = $field_name; + } + else { + unset($this->requiredRevisionMetadataKeys[$key], $this->revision_metadata_keys[$key]); + } + + return $this; + } + } diff --git a/web/core/lib/Drupal/Core/Entity/ContentEntityTypeInterface.php b/web/core/lib/Drupal/Core/Entity/ContentEntityTypeInterface.php index 4c9e89014756cc94a3466bcbe257b7f99f2d8242..12640d5db5d0c1608dbb8d3c89f6a9cb16aabef2 100644 --- a/web/core/lib/Drupal/Core/Entity/ContentEntityTypeInterface.php +++ b/web/core/lib/Drupal/Core/Entity/ContentEntityTypeInterface.php @@ -52,4 +52,17 @@ public function getRevisionMetadataKey($key); */ public function hasRevisionMetadataKey($key); + /** + * Sets a revision metadata key. + * + * @param string $key + * The name of the entity revision metadata key to set. + * @param string|null $field_name + * The name of the entity field key to use for the revision metadata key. If + * NULL is passed, the value of the revision metadata key is unset. + * + * @return $this + */ + public function setRevisionMetadataKey($key, $field_name); + } diff --git a/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php index 68c63e809f571816dc1542a3b881871722aa5ee0..3ca43fb71f8ab6217c7c538d7a78699a2b02cdec 100644 --- a/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +++ b/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php @@ -397,7 +397,8 @@ public function onEntityTypeDelete(EntityTypeInterface $entity_type) { $schema_handler = $this->database->schema(); // Delete entity and field tables. - foreach ($this->getTableMapping($entity_type)->getTableNames() as $table_name) { + $table_names = $this->getTableNames($entity_type, $this->fieldStorageDefinitions, $this->getTableMapping($entity_type)); + foreach ($table_names as $table_name) { if ($schema_handler->tableExists($table_name)) { $schema_handler->dropTable($table_name); } @@ -472,7 +473,10 @@ protected function preUpdateEntityTypeSchema(EntityTypeInterface $entity_type, E // Create temporary tables based on the new entity type and field storage // definitions. - $temporary_table_names = array_combine($sandbox['new_table_mapping']->getTableNames(), $sandbox['temporary_table_mapping']->getTableNames()); + $temporary_table_names = array_combine( + $this->getTableNames($entity_type, $field_storage_definitions, $sandbox['new_table_mapping']), + $this->getTableNames($entity_type, $field_storage_definitions, $sandbox['temporary_table_mapping']) + ); $this->entityType = $entity_type; $this->fieldStorageDefinitions = $field_storage_definitions; @@ -512,14 +516,15 @@ protected function preUpdateEntityTypeSchema(EntityTypeInterface $entity_type, E $this->storage->setEntityType($original); $this->storage->setFieldStorageDefinitions($original_field_storage_definitions); $this->storage->setTableMapping($sandbox['original_table_mapping']); + + // Store the temporary table name mappings for later reuse. + $sandbox['temporary_table_names'] = $temporary_table_names; } /** * {@inheritdoc} */ protected function postUpdateEntityTypeSchema(EntityTypeInterface $entity_type, EntityTypeInterface $original, array $field_storage_definitions, array $original_field_storage_definitions, array &$sandbox = NULL) { - /** @var \Drupal\Core\Entity\Sql\TableMappingInterface $temporary_table_mapping */ - $temporary_table_mapping = $sandbox['temporary_table_mapping']; /** @var \Drupal\Core\Entity\Sql\TableMappingInterface $original_table_mapping */ $original_table_mapping = $sandbox['original_table_mapping']; /** @var \Drupal\Core\Entity\Sql\TableMappingInterface $new_table_mapping */ @@ -529,7 +534,10 @@ protected function postUpdateEntityTypeSchema(EntityTypeInterface $entity_type, // Rename the original tables so we can put them back in place in case // anything goes wrong. - $backup_table_names = array_combine($original_table_mapping->getTableNames(), $backup_table_mapping->getTableNames()); + $backup_table_names = array_combine( + $this->getTableNames($original, $original_field_storage_definitions, $original_table_mapping), + $this->getTableNames($original, $original_field_storage_definitions, $backup_table_mapping) + ); $renamed_tables = []; try { foreach ($backup_table_names as $original_table_name => $backup_table_name) { @@ -549,8 +557,7 @@ protected function postUpdateEntityTypeSchema(EntityTypeInterface $entity_type, // Put the new tables in place and update the entity type and field storage // definitions. try { - $table_name_mapping = array_combine($temporary_table_mapping->getTableNames(), $new_table_mapping->getTableNames()); - foreach ($table_name_mapping as $temp_table_name => $current_table_name) { + foreach ($sandbox['temporary_table_names'] as $current_table_name => $temp_table_name) { $this->database->schema()->renameTable($temp_table_name, $current_table_name); } @@ -609,15 +616,50 @@ protected function postUpdateEntityTypeSchema(EntityTypeInterface $entity_type, } } + /** + * Gets a list of table names for this entity type, field storage and mapping. + * + * The default table mapping does not return dedicated revision table names + * for non-revisionable fields attached to revisionable entity types. Since + * both the storage and the storage handlers expect them to be existing, the + * missing table names need to be manually restored. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * An entity type definition. + * @param \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_storage_definitions + * An array of field storage definitions. + * @param \Drupal\Core\Entity\Sql\TableMappingInterface $table_mapping + * A table mapping. + * + * @return string[] + * An array of field table names. + * + * @todo Remove this once the behavior of the default table mapping, the + * storage handler, and the storage schema handler are reconciled in + * https://www.drupal.org/node/3113639. + */ + private function getTableNames(EntityTypeInterface $entity_type, array $field_storage_definitions, TableMappingInterface $table_mapping) { + $table_names = $table_mapping->getTableNames(); + if ($table_mapping instanceof DefaultTableMapping && $entity_type->isRevisionable()) { + foreach ($field_storage_definitions as $storage_definition) { + if ($table_mapping->requiresDedicatedTableStorage($storage_definition)) { + $dedicated_revision_table_name = $table_mapping->getDedicatedRevisionTableName($storage_definition); + if (!$storage_definition->isRevisionable() && !in_array($dedicated_revision_table_name, $table_names)) { + $table_names[] = $dedicated_revision_table_name; + } + } + } + } + return $table_names; + } + /** * {@inheritdoc} */ protected function handleEntityTypeSchemaUpdateExceptionOnDataCopy(EntityTypeInterface $entity_type, EntityTypeInterface $original, array &$sandbox) { // In case of an error during the save process, we need to clean up the // temporary tables. - /** @var \Drupal\Core\Entity\Sql\TableMappingInterface $temporary_table_mapping */ - $temporary_table_mapping = $sandbox['temporary_table_mapping']; - foreach ($temporary_table_mapping->getTableNames() as $table_name) { + foreach ($sandbox['temporary_table_names'] as $table_name) { $this->database->schema()->dropTable($table_name); } } diff --git a/web/core/lib/Drupal/Core/Entity/entity.api.php b/web/core/lib/Drupal/Core/Entity/entity.api.php index d2ffcc4caeb0ad9691a31dc0ba583b550390d2dd..6c1d38387e8f50bcc68a86a56f5c74b7f0ac9d3d 100644 --- a/web/core/lib/Drupal/Core/Entity/entity.api.php +++ b/web/core/lib/Drupal/Core/Entity/entity.api.php @@ -1828,6 +1828,11 @@ function hook_entity_form_display_alter(\Drupal\Core\Entity\Display\EntityFormDi /** * Provides custom base field definitions for a content entity type. * + * Field (storage) definitions returned by this hook must run through the + * regular field storage life-cycle operations: they need to be properly + * installed, updated, and uninstalled. This would typically be done through the + * Entity Update API provided by the entity definition update manager. + * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. * @@ -1839,6 +1844,8 @@ function hook_entity_form_display_alter(\Drupal\Core\Entity\Display\EntityFormDi * @see hook_entity_bundle_field_info_alter() * @see \Drupal\Core\Field\FieldDefinitionInterface * @see \Drupal\Core\Entity\EntityFieldManagerInterface::getFieldDefinitions() + * @see \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface + * @see https://www.drupal.org/node/3034742 */ function hook_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) { if ($entity_type->id() == 'node') { @@ -1943,6 +1950,11 @@ function hook_entity_bundle_field_info_alter(&$fields, \Drupal\Core\Entity\Entit /** * Provides field storage definitions for a content entity type. * + * Field storage definitions returned by this hook must run through the regular + * field storage life-cycle operations: they need to be properly installed, + * updated, and uninstalled. This would typically be done through the Entity + * Update API provided by the entity definition update manager. + * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. * @@ -1952,6 +1964,8 @@ function hook_entity_bundle_field_info_alter(&$fields, \Drupal\Core\Entity\Entit * @see hook_entity_field_storage_info_alter() * @see \Drupal\Core\Field\FieldStorageDefinitionInterface * @see \Drupal\Core\Entity\EntityFieldManagerInterface::getFieldStorageDefinitions() + * @see \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface + * @see https://www.drupal.org/node/3034742 */ function hook_entity_field_storage_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) { if (\Drupal::entityTypeManager()->getStorage($entity_type->id()) instanceof DynamicallyFieldableEntityStorageInterface) { diff --git a/web/core/lib/Drupal/Core/Field/AllowedTagsXssTrait.php b/web/core/lib/Drupal/Core/Field/AllowedTagsXssTrait.php index c356cc3d0cdc496e34f9a74a3cc94d9c8fbef161..d893e1b3bdbbd9d349e9a71d305a9e901375177f 100644 --- a/web/core/lib/Drupal/Core/Field/AllowedTagsXssTrait.php +++ b/web/core/lib/Drupal/Core/Field/AllowedTagsXssTrait.php @@ -30,6 +30,7 @@ trait AllowedTagsXssTrait { * valid UTF-8. */ public function fieldFilterXss($string) { + @trigger_error(__METHOD__ . ' is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Field\FieldFilteredMarkup::create() instead.', E_USER_DEPRECATED); return FieldFilteredMarkup::create($string); } @@ -37,6 +38,7 @@ public function fieldFilterXss($string) { * Returns a list of tags allowed by AllowedTagsXssTrait::fieldFilterXss(). */ public function allowedTags() { + @trigger_error(__METHOD__ . ' is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Field\FieldFilteredMarkup::allowedTags() instead.', E_USER_DEPRECATED); return FieldFilteredMarkup::allowedTags(); } @@ -44,6 +46,7 @@ public function allowedTags() { * Returns a human-readable list of allowed tags for display in help texts. */ public function displayAllowedTags() { + @trigger_error(__METHOD__ . ' is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Field\FieldFilteredMarkup::displayAllowedTags() instead.', E_USER_DEPRECATED); return FieldFilteredMarkup::displayAllowedTags(); } diff --git a/web/core/lib/Drupal/Core/Field/PluginSettingsInterface.php b/web/core/lib/Drupal/Core/Field/PluginSettingsInterface.php index 3a70e4f4b31047df77769d115cf299f0c344d383..b06a8769ecbdac38120a917bed06ea9ef28afedb 100644 --- a/web/core/lib/Drupal/Core/Field/PluginSettingsInterface.php +++ b/web/core/lib/Drupal/Core/Field/PluginSettingsInterface.php @@ -8,8 +8,8 @@ /** * Interface definition for plugin with settings. * - * @deprecated in drupal:8.1.0 and is removed from drupal:9.0.0. Use - * \Drupal\Component\Plugin\ConfigurableInterface instead. + * @todo Merge into \Drupal\Component\Plugin\ConfigurableInterface. See + * https://www.drupal.org/project/drupal/issues/1764380 */ interface PluginSettingsInterface extends PluginInspectionInterface, ThirdPartySettingsInterface { diff --git a/web/core/lib/Drupal/Core/Form/FormSubmitter.php b/web/core/lib/Drupal/Core/Form/FormSubmitter.php index 8591edaa2bbcf35de70155360fd3963b01282a83..4a6a34c807bf39de9ebe54db7168f6fa86bb0b6a 100644 --- a/web/core/lib/Drupal/Core/Form/FormSubmitter.php +++ b/web/core/lib/Drupal/Core/Form/FormSubmitter.php @@ -61,7 +61,9 @@ public function doSubmitForm(&$form, FormStateInterface &$form_state) { $batch['progressive'] = !$form_state->isProgrammed(); $response = batch_process(); - if ($batch['progressive']) { + // If the batch has been completed and _batch_finished() called then + // $batch will be NULL. + if ($batch && $batch['progressive']) { return $response; } diff --git a/web/core/lib/Drupal/Core/Render/Element.php b/web/core/lib/Drupal/Core/Render/Element.php index 682f236163c644b78bccdcc5ee562b39556701a3..f27304cde818df0fbc46ab80bf2e471111df1180 100644 --- a/web/core/lib/Drupal/Core/Render/Element.php +++ b/web/core/lib/Drupal/Core/Render/Element.php @@ -78,7 +78,7 @@ public static function children(array &$elements, $sort = FALSE) { $i = 0; $sortable = FALSE; foreach ($elements as $key => $value) { - if ($key === '' || $key[0] !== '#') { + if (is_int($key) || $key === '' || $key[0] !== '#') { if (is_array($value)) { if (isset($value['#weight'])) { $weight = $value['#weight']; diff --git a/web/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php b/web/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php index 99b7dacc5fef40e7d54d9640c16d886a4db429c5..403bd4b73fa6ad514be0f6b107106f5756e0bf1d 100644 --- a/web/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php +++ b/web/core/lib/Drupal/Core/Render/ElementInfoManagerInterface.php @@ -57,7 +57,7 @@ public function getInfo($type); * (Optional) The value to return if the element type does not specify a * value for the property. Defaults to NULL. * - * @return string + * @return mixed * The property value of the defined element type. Or the provided * default value, which can be NULL. */ diff --git a/web/core/lib/Drupal/Core/Routing/RouteProvider.php b/web/core/lib/Drupal/Core/Routing/RouteProvider.php index 627aa506cdf1f8a0eb5c3604cd881d83383e453c..c372b7bdac56280077561db054e54249bfb267e3 100644 --- a/web/core/lib/Drupal/Core/Routing/RouteProvider.php +++ b/web/core/lib/Drupal/Core/Routing/RouteProvider.php @@ -191,7 +191,7 @@ public function getRouteCollectionForRequest(Request $request) { } /** - * Find the route using the provided route name (and parameters). + * Find the route using the provided route name. * * @param string $name * The route name to fetch diff --git a/web/core/lib/Drupal/Core/Security/RequestSanitizer.php b/web/core/lib/Drupal/Core/Security/RequestSanitizer.php index e1626ed3831fc5315592b473e4343f44bc2e256c..a778e4be4eeedcb10cb37d75a6fd8308b6466d8c 100644 --- a/web/core/lib/Drupal/Core/Security/RequestSanitizer.php +++ b/web/core/lib/Drupal/Core/Security/RequestSanitizer.php @@ -153,7 +153,7 @@ protected static function checkDestination($destination, array $whitelist) { protected static function stripDangerousValues($input, array $whitelist, array &$sanitized_keys) { if (is_array($input)) { foreach ($input as $key => $value) { - if ($key !== '' && $key[0] === '#' && !in_array($key, $whitelist, TRUE)) { + if ($key !== '' && ((string) $key)[0] === '#' && !in_array($key, $whitelist, TRUE)) { unset($input[$key]); $sanitized_keys[] = $key; } diff --git a/web/core/lib/Drupal/Core/Template/Attribute.php b/web/core/lib/Drupal/Core/Template/Attribute.php index 99546ef1bed793b498fb2a380041237d8f70d0ee..fe9aace1f00a3b8ad53c0dc283525cba4c893fd5 100644 --- a/web/core/lib/Drupal/Core/Template/Attribute.php +++ b/web/core/lib/Drupal/Core/Template/Attribute.php @@ -4,6 +4,7 @@ use Drupal\Component\Render\PlainTextOutput; use Drupal\Component\Render\MarkupInterface; +use Drupal\Component\Utility\NestedArray; /** * Collects, sanitizes, and renders HTML attributes. @@ -208,6 +209,19 @@ public function setAttribute($attribute, $value) { return $this; } + /** + * Checks if the storage has an attribute with the given name. + * + * @param string $name + * The name of the attribute to check for. + * + * @return bool + * Returns TRUE if the attribute exists, or FALSE otherwise. + */ + public function hasAttribute($name) { + return array_key_exists($name, $this->storage); + } + /** * Removes an attribute from an Attribute object. * @@ -356,4 +370,20 @@ public function jsonSerialize() { return (string) $this; } + /** + * Merges an Attribute object into the current storage. + * + * @param \Drupal\Core\Template\Attribute $collection + * The Attribute object to merge. + * + * @return $this + */ + public function merge(Attribute $collection) { + $merged_attributes = NestedArray::mergeDeep($this->toArray(), $collection->toArray()); + foreach ($merged_attributes as $name => $value) { + $this->storage[$name] = $this->createAttributeValue($name, $value); + } + return $this; + } + } diff --git a/web/core/lib/Drupal/Core/Template/AttributeHelper.php b/web/core/lib/Drupal/Core/Template/AttributeHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..4beb5208cd707e5404200df4ec3d1d3e78ebfe26 --- /dev/null +++ b/web/core/lib/Drupal/Core/Template/AttributeHelper.php @@ -0,0 +1,76 @@ +<?php + +namespace Drupal\Core\Template; + +use Drupal\Component\Utility\NestedArray; + +/** + * Helper class to deal with mixed array and Attribute operations. + * + * This class contains static methods only and is not meant to be instantiated. + */ +class AttributeHelper { + + /** + * This class should not be instantiated. + */ + private function __construct() { + } + + /** + * Checks if the given attribute collection has an attribute. + * + * @param string $name + * The name of the attribute to check for. + * @param \Drupal\Core\Template\Attribute|array $collection + * An Attribute object or an array of attributes. + * + * @return bool + * TRUE if the attibute exists, FALSE otherwise. + * + * @throws \InvalidArgumentException + * When the input $collection is neither an Attribute object nor an array. + */ + public static function attributeExists($name, $collection) { + if ($collection instanceof Attribute) { + return $collection->hasAttribute($name); + } + elseif (is_array($collection)) { + return array_key_exists($name, $collection); + } + throw new \InvalidArgumentException('Invalid collection argument'); + } + + /** + * Merges two attribute collections. + * + * @param \Drupal\Core\Template\Attribute|array $a + * First Attribute object or array to merge. The returned value type will + * be the same as the type of this argument. + * @param \Drupal\Core\Template\Attribute|array $b + * Second Attribute object or array to merge. + * + * @return \Drupal\Core\Template\Attribute|array + * The merged attributes, as an Attribute object or an array. + * + * @throws \InvalidArgumentException + * If at least one collection argument is neither an Attribute object nor an + * array. + */ + public static function mergeCollections($a, $b) { + if (!($a instanceof Attribute || is_array($a)) || !($b instanceof Attribute || is_array($b))) { + throw new \InvalidArgumentException('Invalid collection argument'); + } + // If both collections are arrays, just merge them. + if (is_array($a) && is_array($b)) { + return NestedArray::mergeDeep($a, $b); + } + // If at least one collections is an Attribute object, merge through + // Attribute::merge. + $merge_a = $a instanceof Attribute ? $a : new Attribute($a); + $merge_b = $b instanceof Attribute ? $b : new Attribute($b); + $merge_a->merge($merge_b); + return $a instanceof Attribute ? $merge_a : $merge_a->toArray(); + } + +} diff --git a/web/core/misc/ajax.es6.js b/web/core/misc/ajax.es6.js index 905559c921a57d7587d05b16cae96775e7f21924..fdf000adca5582b54e16150bcfad1ce3f4c233a6 100644 --- a/web/core/misc/ajax.es6.js +++ b/web/core/misc/ajax.es6.js @@ -419,8 +419,10 @@ this.element = element; /** - * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. - * Use elementSettings. + * @deprecated in drupal:8.5.0 and is removed from drupal:10.0.0. + * Use elementSettings. + * + * @see https://www.drupal.org/node/2928117 * * @type {Drupal.Ajax~elementSettings} */ @@ -1117,13 +1119,13 @@ * @param {object} response * The response from the Ajax request. * - * @deprecated in Drupal 8.6.x and will be removed before Drupal 9.0.0. - * Use data with desired wrapper. See https://www.drupal.org/node/2974880. + * @deprecated in drupal:8.6.0 and is removed from drupal:10.0.0. + * Use data with desired wrapper. + * + * @see https://www.drupal.org/node/2940704 * * @todo Add deprecation warning after it is possible. For more information * see: https://www.drupal.org/project/drupal/issues/2973400 - * - * @see https://www.drupal.org/node/2940704 */ Drupal.theme.ajaxWrapperNewContent = ($newContent, ajax, response) => (response.effect || ajax.effect) !== 'none' && @@ -1146,13 +1148,13 @@ * @param {jQuery} $elements * Response elements after parsing. * - * @deprecated in Drupal 8.6.x and will be removed before Drupal 9.0.0. - * Use data with desired wrapper. See https://www.drupal.org/node/2974880. + * @deprecated in drupal:8.6.0 and is removed from drupal:10.0.0. + * Use data with desired wrapper. + * + * @see https://www.drupal.org/node/2940704 * * @todo Add deprecation warning after it is possible. For more information * see: https://www.drupal.org/project/drupal/issues/2973400 - * - * @see https://www.drupal.org/node/2940704 */ Drupal.theme.ajaxWrapperMultipleRootElements = $elements => $('<div></div>').append($elements); diff --git a/web/core/misc/dialog/off-canvas.tabledrag.css b/web/core/misc/dialog/off-canvas.tabledrag.css index 1cce13b0975e624713c3ce473b5480e9e869c7f3..ba2e5e9826463b9a6be2dfa412183319ec1eabd6 100644 --- a/web/core/misc/dialog/off-canvas.tabledrag.css +++ b/web/core/misc/dialog/off-canvas.tabledrag.css @@ -41,8 +41,8 @@ height: auto; margin: 0; padding: 0; - /* Use lighter drag icon against dark background. */ background-color: transparent; + /* Use lighter drag icon against dark background. */ background-image: url(../icons/bebebe/move.svg); background-repeat: no-repeat; background-position: center; diff --git a/web/core/modules/color/color.module b/web/core/modules/color/color.module index 6b70035e742201a01f8fed041a99a7153067d1c4..3ae1030203e47f64d5cc0db016a954b5a65a9fe7 100644 --- a/web/core/modules/color/color.module +++ b/web/core/modules/color/color.module @@ -764,8 +764,9 @@ function _color_blend($img, $hex1, $hex2, $alpha) { * Converts a hex color into an RGB triplet. */ function _color_unpack($hex, $normalize = FALSE) { - if (strlen($hex) == 4) { - $hex = $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3]; + $hex = substr($hex, 1); + if (strlen($hex) == 3) { + $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2]; } $c = hexdec($hex); for ($i = 16; $i >= 0; $i -= 8) { diff --git a/web/core/modules/comment/migrations/d7_comment.yml b/web/core/modules/comment/migrations/d7_comment.yml index 3db08908998c0df82c0e9fd0ac0333e79c054717..eafa8e36ec637fad6797b61fb56d464bea62791f 100644 --- a/web/core/modules/comment/migrations/d7_comment.yml +++ b/web/core/modules/comment/migrations/d7_comment.yml @@ -40,7 +40,11 @@ process: - plugin: skip_on_empty method: row - langcode: language + # Comments migrated from Drupal 6 to Drupal 7 may not have a language. + langcode: + plugin: default_value + source: language + default_value: und field_name: '@comment_type' subject: subject uid: uid diff --git a/web/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php b/web/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php index b5b873abb4f2993e233ae38ee12d80455190c97f..c51529b6899802fcc69049052677c09a9af62916 100644 --- a/web/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php +++ b/web/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php @@ -105,6 +105,26 @@ public function testMigration() { $node = $comment->getCommentedEntity(); $this->assertInstanceOf(NodeInterface::class, $node); $this->assertSame('2', $node->id()); + + // Tests a comment migrated from Drupal 6 to Drupal 7 that did not have a + // language. + $comment = Comment::load(4); + $this->assertInstanceOf(Comment::class, $comment); + $this->assertSame('Comment without language', $comment->getSubject()); + $this->assertSame('1426781880', $comment->getCreatedTime()); + $this->assertSame('1426781880', $comment->getChangedTime()); + $this->assertTrue($comment->isPublished()); + $this->assertSame('Bob', $comment->getAuthorName()); + $this->assertSame('bob@local.host', $comment->getAuthorEmail()); + $this->assertSame('A comment without language (migrated from Drupal 6)', $comment->comment_body->value); + $this->assertSame('filtered_html', $comment->comment_body->format); + $this->assertSame('drupal7.local', $comment->getHostname()); + $this->assertSame('und', $comment->language()->getId()); + $this->assertSame('10', $comment->field_integer->value); + + $node = $comment->getCommentedEntity(); + $this->assertInstanceOf(NodeInterface::class, $node); + $this->assertSame('1', $node->id()); } /** diff --git a/web/core/modules/editor/editor.module b/web/core/modules/editor/editor.module index ef11c3cbf48a6ea75fce180196f6523de3564e24..4ccea91890da571414ab3fe5076bba6a6b08d23c 100644 --- a/web/core/modules/editor/editor.module +++ b/web/core/modules/editor/editor.module @@ -68,8 +68,6 @@ function editor_element_info_alter(&$types) { } /** - * Implements hook_form_FORM_ID_alter() for \Drupal\filter\FilterFormatListBuilder. - * * Implements hook_field_formatter_info_alter(). * * @see quickedit_field_formatter_info_alter() diff --git a/web/core/modules/field/field.module b/web/core/modules/field/field.module index e7c48b8fa6415415b8b911f9c4f3fd732444828e..3a8a8e16b1f343131a9eeef1fcd19dd0dc3394c0 100644 --- a/web/core/modules/field/field.module +++ b/web/core/modules/field/field.module @@ -301,7 +301,7 @@ function field_config_import_steps_alter(&$sync_steps, ConfigImporter $config_im // to purge field data where the module that provides the field is being // uninstalled. array_unshift($sync_steps, ['\Drupal\field\ConfigImporterFieldPurger', 'process']); - }; + } } /** diff --git a/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php b/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php index a695760dfc1855a9ad75749c4cb109b340df4fa9..ed7a026b79482822728176fafe0a8df437127ffa 100644 --- a/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php +++ b/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php @@ -21,7 +21,6 @@ public function transform($value, MigrateExecutableInterface $migrate_executable $widget_type = $widget_settings['type']; $field_data = unserialize($field_definition['data']); - $field_settings = $field_data['settings']; // Get taxonomy term reference handler settings from allowed values. if ($row->getSourceProperty('type') == 'taxonomy_term_reference') { @@ -38,6 +37,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable // Get entityreference handler settings from source field configuration. if ($row->getSourceProperty('type') == "entityreference") { + $field_settings = $field_data['settings']; $instance_settings['handler'] = 'default:' . $field_settings['target_type']; // Transform the sort settings to D8 structure. $sort = [ diff --git a/web/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php b/web/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php index 74340884d29feb555560836f0b276b2f79f72a4f..e15fe7bdc63d6d7b649d0a3453392a3fb597d1ed 100644 --- a/web/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php +++ b/web/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php @@ -180,9 +180,6 @@ public function prepareRow(Row $row) { } } - $field_data = unserialize($row->getSourceProperty('field_data')); - $row->setSourceProperty('field_settings', $field_data['settings']); - return parent::prepareRow($row); } diff --git a/web/core/modules/field/src/Plugin/migrate/source/d7/FieldOptionTranslation.php b/web/core/modules/field/src/Plugin/migrate/source/d7/FieldOptionTranslation.php index 0fb577899ecafcb56748e2b00d99abeef79fbbcc..f1a90303cc3864b146f3b124c3abd058ffced6f6 100644 --- a/web/core/modules/field/src/Plugin/migrate/source/d7/FieldOptionTranslation.php +++ b/web/core/modules/field/src/Plugin/migrate/source/d7/FieldOptionTranslation.php @@ -23,9 +23,16 @@ public function query() { ->condition('objectid', '#allowed_values'); // Add all i18n and locales_target fields. $query - ->fields('i18n') + ->fields('i18n', [ + // All table fields except lid and type. + 'textgroup', + 'context', + 'objectid', + 'property', + 'objectindex', + 'format', + ]) ->fields('lt'); - $query->addField('fc', 'type'); $query->addField('fci', 'bundle'); $query->addField('i18n', 'lid', 'i18n_lid'); $query->addField('i18n', 'type', 'i18n_type'); diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldOptionTranslationTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldOptionTranslationTest.php index e4b7406645672c79cbcbe9f4ad5614ed508f52b5..7fa7b57b51249014d91923254de7267101047a72 100644 --- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldOptionTranslationTest.php +++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldOptionTranslationTest.php @@ -105,6 +105,9 @@ public function testFieldOptionTranslation() { ], ]; $this->assertSame($allowed_values, $config_translation->get('settings.allowed_values')); + + // Ensure that the count query works as expected. + $this->assertCount(16, $this->getMigration('d7_field_option_translation')->getSourcePlugin()); } } diff --git a/web/core/modules/field_ui/templates/field-ui-table.html.twig b/web/core/modules/field_ui/templates/field-ui-table.html.twig index 68c8c8ec92ffa9b6b4d969259c32c9550794f6a8..5084304b069de50e5a43da8a01ff76fb6352ef6a 100644 --- a/web/core/modules/field_ui/templates/field-ui-table.html.twig +++ b/web/core/modules/field_ui/templates/field-ui-table.html.twig @@ -12,7 +12,7 @@ * https://www.drupal.org/node/893530 and * http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109. * - header: Table header cells. Each cell contains the following properties: - * - tag: The HTML tag name to use; either TH or TD. + * - tag: The HTML tag name to use; either 'th' or 'td'. * - attributes: HTML attributes to apply to the tag. * - content: A localized string for the title of the column. * - field: Field name (required for column sorting). diff --git a/web/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php b/web/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php index 48dbb81b4755e5073f6fcd489f034ddebf236d71..c2d65bfdbcbb9a5e3eb6bbe92f4f83d54becaa8c 100644 --- a/web/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php +++ b/web/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php @@ -82,7 +82,10 @@ public function normalize($field_item, $format = NULL, array $context = []) { // Normalize the target entity. $embedded = $this->serializer->normalize($target_entity, $format, $context); - $link = $embedded['_links']['self']; + // @todo https://www.drupal.org/project/drupal/issues/3110815 $embedded will + // be NULL if the target entity does not exist. Use null coalescence + // operator to preserve behaviour in PHP 7.4. + $link = $embedded['_links']['self'] ?? NULL; // If the field is translatable, add the langcode to the link relation // object. This does not indicate the language of the target entity. if ($langcode) { diff --git a/web/core/modules/help_topics/help_topics.module b/web/core/modules/help_topics/help_topics.module index f051873bdf433feb5e2176a4837f2127e53fab2c..6ee665a8c8793b10a69b8a57b36e27fe9a8f0f9c 100644 --- a/web/core/modules/help_topics/help_topics.module +++ b/web/core/modules/help_topics/help_topics.module @@ -20,7 +20,7 @@ function help_topics_help($route_name, RouteMatchInterface $route_match) { $search_help = ($module_handler->moduleExists('search')) ? Url::fromRoute('help.page', ['name' => 'search'])->toString() : '#'; $output = ''; $output .= '<h3>' . t('About') . '</h3>'; - $output .= '<p>' . t('The Help Topics module adds module- and theme-provided help topics to the module overviews from the core Help module. If the core Search module is enabled, these topics are also searchable. For more information, see the <a href=":online">online documentation for the Help Topics module</a>.', [':online' => 'https://www.drupal.org/modules/help_topics']) . '</p>'; + $output .= '<p>' . t('The Help Topics module adds module- and theme-provided help topics to the module overviews from the core Help module. If the core Search module is enabled, these topics are also searchable. For more information, see the <a href=":online">online documentation for the Help Topics module</a>.', [':online' => 'https://www.drupal.org/documentation/modules/help_topics']) . '</p>'; $output .= '<h3>' . t('Uses') . '</h3>'; $output .= '<dl>'; $output .= '<dt>' . t('Viewing help topics') . '</dt>'; diff --git a/web/core/modules/language/src/LanguageServiceProvider.php b/web/core/modules/language/src/LanguageServiceProvider.php index a7e934aab66b88860bdbf0ee4650880f42333fc6..492eda38a7010fb9d3d5e7b3e46438b56c04f081 100644 --- a/web/core/modules/language/src/LanguageServiceProvider.php +++ b/web/core/modules/language/src/LanguageServiceProvider.php @@ -87,6 +87,12 @@ protected function isMultilingual() { protected function getDefaultLanguageValues() { $config_storage = BootstrapConfigStorageFactory::get(); $system = $config_storage->read('system.site'); + // In Kernel tests it's possible this code is called before system.site + // exists. In such cases behave as though the corresponding language + // configuration entity does not exist. + if ($system === FALSE) { + return FALSE; + } $default_language = $config_storage->read(static::CONFIG_PREFIX . $system['default_langcode']); if (is_array($default_language)) { return $default_language; diff --git a/web/core/modules/layout_builder/src/EventSubscriber/BlockComponentRenderArray.php b/web/core/modules/layout_builder/src/EventSubscriber/BlockComponentRenderArray.php index 8cde7674a16b0ec26f51f8dd56435401805bc8f0..d9218b538776654f766fdc1bbba2c1e78012e5c6 100644 --- a/web/core/modules/layout_builder/src/EventSubscriber/BlockComponentRenderArray.php +++ b/web/core/modules/layout_builder/src/EventSubscriber/BlockComponentRenderArray.php @@ -5,6 +5,7 @@ use Drupal\block_content\Access\RefinableDependentAccessInterface; use Drupal\Core\Access\AccessResult; use Drupal\Core\Block\BlockPluginInterface; +use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Render\Element; use Drupal\Core\Render\PreviewFallbackInterface; use Drupal\Core\Session\AccountInterface; @@ -102,6 +103,12 @@ public function onBuildRender(SectionComponentBuildRenderArrayEvent $event) { } $content = $block->build(); + + // We don't output the block render data if there are no render elements + // found, but we want to capture the cache metadata from the block + // regardless. + $event->addCacheableDependency(CacheableMetadata::createFromRenderArray($content)); + $is_content_empty = Element::isEmpty($content); $is_placeholder_ready = $event->inPreview() && $block instanceof PreviewFallbackInterface; // If the content is empty and no placeholder is available, return. diff --git a/web/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php b/web/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php index 493ed5dee51bad60784d15f11cd1b8ea324a82fd..80d9b97315bf466d6d3c312f85bb0a639a37b8a0 100644 --- a/web/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php +++ b/web/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php @@ -169,7 +169,7 @@ public function build() { $build = []; $this->logger->warning('The field "%field" failed to render with the error of "%error".', ['%field' => $this->fieldName, '%error' => $e->getMessage()]); } - CacheableMetadata::createFromObject($this)->applyTo($build); + CacheableMetadata::createFromRenderArray($build)->addCacheableDependency($this)->applyTo($build); return $build; } diff --git a/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderFieldBlockEntityReferenceCacheTagsTest.php b/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderFieldBlockEntityReferenceCacheTagsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..871bbac345d70564ac2970dfb5704a9d7d240adb --- /dev/null +++ b/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderFieldBlockEntityReferenceCacheTagsTest.php @@ -0,0 +1,141 @@ +<?php + +namespace Drupal\Tests\layout_builder\Functional; + +use Drupal\Component\Render\FormattableMarkup; +use Drupal\Core\Url; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\field\Traits\EntityReferenceTestTrait; +use Drupal\Tests\node\Traits\ContentTypeCreationTrait; +use Drupal\Tests\node\Traits\NodeCreationTrait; + +/** + * Tests cache tags on entity reference field blocks in Layout Builder. + * + * @group layout_builder + */ +class LayoutBuilderFieldBlockEntityReferenceCacheTagsTest extends BrowserTestBase { + + use ContentTypeCreationTrait; + use EntityReferenceTestTrait; + use NodeCreationTrait; + + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'node', + 'layout_builder', + ]; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + // Enable page caching. + $config = $this->config('system.performance'); + $config->set('cache.page.max_age', 3600); + $config->save(); + + // Create two content types, with one content type containing a field that + // references entities of the second content type. + $this->createContentType([ + 'type' => 'bundle_with_reference_field', + 'name' => 'bundle_with_reference_field', + ]); + $this->createContentType([ + 'type' => 'bundle_referenced', + 'name' => 'bundle_referenced', + ]); + + $this->createEntityReferenceField('node', 'bundle_with_reference_field', 'field_reference', 'Reference field', 'node', 'default', [ + 'target_bundles' => ['bundle_referenced'], + ]); + + // Enable layout builder to the content type with the reference field, and + // add the reference field to the layout builder display. + $this->container->get('entity_display.repository') + ->getViewDisplay('node', 'bundle_with_reference_field', 'full') + ->enableLayoutBuilder() + ->setComponent('field_reference', ['type' => 'entity_reference_label']) + ->save(); + } + + /** + * Tests cache tags on field block for entity reference field. + */ + public function testEntityReferenceFieldBlockCaching() { + $assert_session = $this->assertSession(); + + // Create two nodes, one of the referenced content type and one of the + // referencing content type, with the first node being referenced by the + // second. Set the referenced node to be unpublished so anonymous user will + // not have view access. + $referenced_node = $this->createNode([ + 'type' => 'bundle_referenced', + 'title' => 'The referenced node title', + 'status' => 0, + ]); + + $referencing_node = $this->createNode([ + 'type' => 'bundle_with_reference_field', + 'title' => 'The referencing node title', + 'field_reference' => ['entity' => $referenced_node], + ]); + + // When user does not have view access to referenced entities in entity + // reference field blocks, test that the cache tags of the referenced entity + // are still bubbled to page cache. + $referencing_node_url = $referencing_node->toUrl(); + $this->verifyPageCacheContainsTags($referencing_node_url, 'MISS'); + $this->verifyPageCacheContainsTags($referencing_node_url, 'HIT', $referenced_node->getCacheTags()); + // Since the referenced node is inaccessible, it should not appear on the + // referencing node. + $this->drupalGet($referencing_node_url); + $assert_session->linkNotExists('The referenced node title'); + + // Publish the referenced entity. + $referenced_node->setPublished() + ->save(); + + // Revisit the node with the reference field without clearing cache. Now + // that the referenced node is published, it should appear. + $this->verifyPageCacheContainsTags($referencing_node_url, 'MISS'); + $this->verifyPageCacheContainsTags($referencing_node_url, 'HIT', $referenced_node->getCacheTags()); + $this->drupalGet($referencing_node_url); + $assert_session->linkExists('The referenced node title'); + } + + /** + * Verify that when loading a given page, it's a page cache hit or miss. + * + * @param \Drupal\Core\Url $url + * The page for this URL will be loaded. + * @param string $hit_or_miss + * 'HIT' if a page cache hit is expected, 'MISS' otherwise. + * @param array|false $tags + * When expecting a page cache hit, you may optionally specify an array of + * expected cache tags. While FALSE, the cache tags will not be verified. + * This tests whether all expected tags are in the page cache tags, not that + * expected tags and page cache tags are identical. + */ + protected function verifyPageCacheContainsTags(Url $url, $hit_or_miss, $tags = FALSE) { + $this->drupalGet($url); + $message = new FormattableMarkup('Page cache @hit_or_miss for %path.', ['@hit_or_miss' => $hit_or_miss, '%path' => $url->toString()]); + $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), $hit_or_miss, $message); + + if ($hit_or_miss === 'HIT' && is_array($tags)) { + $cache_tags = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Tags')); + $tags = array_unique($tags); + $this->assertEmpty(array_diff($tags, $cache_tags), 'Page cache tags contains all expected tags.'); + } + } + +} diff --git a/web/core/modules/layout_builder/tests/src/Kernel/FieldBlockTest.php b/web/core/modules/layout_builder/tests/src/Kernel/FieldBlockTest.php index ebf19c53a443bbed623eeeebe28990a0e97ac692..d041e3968980f40f84ff20e786462eb7e8d05895 100644 --- a/web/core/modules/layout_builder/tests/src/Kernel/FieldBlockTest.php +++ b/web/core/modules/layout_builder/tests/src/Kernel/FieldBlockTest.php @@ -281,13 +281,22 @@ public function providerTestBuild() { new ReturnPromise([[]]), '', ]; - $data['exception'] = [ - new ThrowPromise(new \Exception('The exception message')), + return $data; + } + + /** + * @covers ::build + */ + public function testBuildException() { + // In PHP 7.4 ReflectionClass cannot be serialized so this cannot be part of + // providerTestBuild(). + $promise = new ThrowPromise(new \Exception('The exception message')); + $this->testBuild( + $promise, '', 'The field "%field" failed to render with the error of "%error".', - ['%field' => 'the_field_name', '%error' => 'The exception message'], - ]; - return $data; + ['%field' => 'the_field_name', '%error' => 'The exception message'] + ); } /** diff --git a/web/core/modules/layout_builder/tests/src/Unit/BlockComponentRenderArrayTest.php b/web/core/modules/layout_builder/tests/src/Unit/BlockComponentRenderArrayTest.php index 117c76f7deec17a67f446f6d6a101f6162d55a86..1dc7693031fb64181b646c615a8f19f9194ecbd0 100644 --- a/web/core/modules/layout_builder/tests/src/Unit/BlockComponentRenderArrayTest.php +++ b/web/core/modules/layout_builder/tests/src/Unit/BlockComponentRenderArrayTest.php @@ -99,7 +99,10 @@ public function testOnBuildRender($refinable_dependent_access) { $placeholder_label = 'Placeholder Label'; $block->getPreviewFallbackString()->willReturn($placeholder_label); - $block_content = ['#markup' => 'The block content.']; + $block_content = [ + '#markup' => 'The block content.', + '#cache' => ['tags' => ['build-tag']], + ]; $block->build()->willReturn($block_content); $this->blockManager->createInstance('some_block_id', ['id' => 'some_block_id'])->willReturn($block->reveal()); @@ -122,7 +125,10 @@ public function testOnBuildRender($refinable_dependent_access) { $expected_cache = $expected_build + [ '#cache' => [ 'contexts' => [], - 'tags' => ['test'], + 'tags' => [ + 'build-tag', + 'test', + ], 'max-age' => -1, ], ]; @@ -410,7 +416,9 @@ public function testOnBuildRenderEmptyBuild() { $block->getBaseId()->willReturn('block_plugin_id'); $block->getDerivativeId()->willReturn(NULL); - $block->build()->willReturn([]); + $block->build()->willReturn([ + '#cache' => ['tags' => ['build-tag']], + ]); $this->blockManager->createInstance('some_block_id', ['id' => 'some_block_id'])->willReturn($block->reveal()); $component = new SectionComponent('some-uuid', 'some-region', ['id' => 'some_block_id']); @@ -423,7 +431,10 @@ public function testOnBuildRenderEmptyBuild() { $expected_cache = $expected_build + [ '#cache' => [ 'contexts' => [], - 'tags' => ['test'], + 'tags' => [ + 'build-tag', + 'test', + ], 'max-age' => -1, ], ]; @@ -435,6 +446,51 @@ public function testOnBuildRenderEmptyBuild() { $this->assertEquals($expected_cache, $result); } + /** + * @covers ::onBuildRender + */ + public function testOnBuildRenderEmptyBuildWithCacheTags() { + $block = $this->prophesize(BlockPluginInterface::class); + $access_result = AccessResult::allowed(); + $block->access($this->account->reveal(), TRUE)->willReturn($access_result)->shouldBeCalled(); + $block->getCacheContexts()->willReturn([]); + $block->getCacheTags()->willReturn(['test']); + $block->getCacheMaxAge()->willReturn(Cache::PERMANENT); + $block->getConfiguration()->willReturn([]); + $block->getPluginId()->willReturn('block_plugin_id'); + $block->getBaseId()->willReturn('block_plugin_id'); + $block->getDerivativeId()->willReturn(NULL); + + $block_content = [ + '#cache' => [ + 'tags' => ['empty_build_cache_test'], + ], + ]; + $block->build()->willReturn($block_content); + $this->blockManager->createInstance('some_block_id', ['id' => 'some_block_id'])->willReturn($block->reveal()); + + $component = new SectionComponent('some-uuid', 'some-region', ['id' => 'some_block_id']); + $event = new SectionComponentBuildRenderArrayEvent($component, [], FALSE); + + $subscriber = new BlockComponentRenderArray($this->account->reveal()); + + $expected_build = []; + + $expected_cache = $expected_build + [ + '#cache' => [ + 'contexts' => [], + 'tags' => ['empty_build_cache_test', 'test'], + 'max-age' => -1, + ], + ]; + + $subscriber->onBuildRender($event); + $result = $event->getBuild(); + $this->assertEquals($expected_build, $result); + $event->getCacheableMetadata()->applyTo($result); + $this->assertEquals($expected_cache, $result); + } + /** * @covers ::onBuildRender */ diff --git a/web/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php b/web/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php index 373c3f03adeba4e7ecb913716d13ac9d9f805e86..90585a66a002f4eb609e6b46b8310e45e9ebe90b 100644 --- a/web/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php +++ b/web/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php @@ -185,12 +185,12 @@ public function setValue($values, $notify = TRUE) { $values += [ 'options' => [], ]; - } - // Unserialize the values, this is deprecated as the storage takes care of - // this, options must not be passed as a string anymore. - if (is_string($values['options'])) { - @trigger_error('Support for passing options as a serialized string is deprecated in 8.7.0 and will be removed before Drupal 9.0.0. Pass them as an array instead. See https://www.drupal.org/node/2961643.', E_USER_DEPRECATED); - $values['options'] = unserialize($values['options'], ['allowed_classes' => FALSE]); + // Unserialize the values, this is deprecated as the storage takes care of + // this, options must not be passed as a string anymore. + if (is_string($values['options'])) { + @trigger_error('Support for passing options as a serialized string is deprecated in 8.7.0 and will be removed before Drupal 9.0.0. Pass them as an array instead. See https://www.drupal.org/node/2961643.', E_USER_DEPRECATED); + $values['options'] = unserialize($values['options'], ['allowed_classes' => FALSE]); + } } parent::setValue($values, $notify); } diff --git a/web/core/modules/locale/locale.bulk.inc b/web/core/modules/locale/locale.bulk.inc index 37c4522092ccb15e2b99f601a69eb1e607dd88a2..a344a1b0e743fc29a69e13a9390fef1b271fd94e 100644 --- a/web/core/modules/locale/locale.bulk.inc +++ b/web/core/modules/locale/locale.bulk.inc @@ -385,6 +385,11 @@ function locale_translate_batch_finished($success, array $results) { // file), simply do nothing. if ($results && isset($results['stats'])) { foreach ($results['stats'] as $filepath => $report) { + if ($filepath === 'config') { + // Ignore the config entry. It is processed in + // locale_config_batch_finished() below. + continue; + } $additions += $report['additions']; $updates += $report['updates']; $deletes += $report['deletes']; diff --git a/web/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php b/web/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php index 9d9e947294fc25a6a8e1ad826cd3a73be500f008..3d2500a7eea1b388697ea4107613675fa1af3d7d 100644 --- a/web/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php +++ b/web/core/modules/menu_link_content/src/Plugin/migrate/process/LinkUri.php @@ -99,6 +99,9 @@ public function transform($value, MigrateExecutableInterface $migrate_executable if ($path == '<front>') { $path = ''; } + elseif ($path == '<nolink>') { + return 'route:<nolink>'; + } $path = 'internal:/' . $path; // Convert entity URIs to the entity scheme, if the path matches a route diff --git a/web/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/process/LinkUriTest.php b/web/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/process/LinkUriTest.php index 6b86bc080a1f36cc953fef9ac6ac785c774e8a2f..2c7928b172d7a3db2f815db108c0bc961339cb39 100644 --- a/web/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/process/LinkUriTest.php +++ b/web/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/process/LinkUriTest.php @@ -85,6 +85,10 @@ public function providerTestRouted() { $expected = 'internal:/'; $tests['front'] = [$value, $expected]; + $value = '<nolink>'; + $expected = 'route:<nolink>'; + $tests['nolink'] = [$value, $expected]; + return $tests; } diff --git a/web/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/web/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php index 3e30634437f72a9b2fc402fd9e00e0ca4b7b23ce..8c4f582805fa9e5842b9a29027e887668f4d8d3e 100644 --- a/web/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php +++ b/web/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php @@ -975,7 +975,7 @@ public function getHighestId() { $keys = $this->migration->getDestinationPlugin()->getIds(); if (reset($keys)['type'] !== 'integer') { throw new \LogicException('To determine the highest migrated ID the first ID must be an integer'); - }; + } // List of mapping tables to look in for the highest ID. $map_tables = [ diff --git a/web/core/modules/migrate/tests/src/Kernel/MigrateConfigRollbackTest.php b/web/core/modules/migrate/tests/src/Kernel/MigrateConfigRollbackTest.php index 27aa45bcceb045d21c51cbebebe428d2320a58cb..72abb0f287eb1dce1b99423458cf2f5d9efc4be3 100644 --- a/web/core/modules/migrate/tests/src/Kernel/MigrateConfigRollbackTest.php +++ b/web/core/modules/migrate/tests/src/Kernel/MigrateConfigRollbackTest.php @@ -78,8 +78,7 @@ public function testConfigRollback() { $this->assertSame('Some site', $config->get('name')); $this->assertSame('Awesome slogan', $config->get('slogan')); // Confirm the map row is deleted. - $map_row = $config_id_map->getRowBySource(['id' => $variable[0]['id']]); - $this->assertNull($map_row['destid1']); + $this->assertFalse($config_id_map->getRowBySource(['id' => $variable[0]['id']])); // We use system configuration to demonstrate importing and rolling back // configuration translations. diff --git a/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php index 43489f27ad4e9ec5dc258253a53460f190e9ed8b..8df6422c672e06bf7e149f9dce15290341e1cad7 100644 --- a/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php +++ b/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php @@ -2701,6 +2701,22 @@ 'homepage' => '', 'language' => 'is', )) +->values(array( + 'cid' => '4', + 'pid' => '0', + 'nid' => '1', + 'uid' => '3', + 'subject' => 'Comment without language', + 'hostname' => 'drupal7.local', + 'created' => '1426781880', + 'changed' => '1426781880', + 'status' => '1', + 'thread' => '02/', + 'name' => 'Bob', + 'mail' => '', + 'homepage' => '', + 'language' => '', +)) ->execute(); $connection->schema()->createTable('contact', array( 'fields' => array( @@ -3350,6 +3366,18 @@ 'created' => '1531663925', 'changed' => '1531663925', )) +->values(array( + 'entity_type' => 'comment', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'en', + 'source' => '', + 'uid' => '1', + 'status' => '1', + 'translate' => '0', + 'created' => '1426781880', + 'changed' => '1426781880', +)) ->values(array( 'entity_type' => 'taxonomy_term', 'entity_id' => '4', @@ -5255,6 +5283,17 @@ 'comment_body_value' => 'This is a comment to an Icelandic translation.', 'comment_body_format' => 'filtered_html', )) +->values(array( + 'entity_type' => 'comment', + 'bundle' => 'comment_node_test_content_type', + 'deleted' => '0', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'und', + 'delta' => '0', + 'comment_body_value' => 'A comment without language (migrated from Drupal 6)', + 'comment_body_format' => 'filtered_html', +)) ->execute(); $connection->schema()->createTable('field_data_description_field', array( 'fields' => array( @@ -6732,6 +6771,16 @@ 'delta' => '0', 'field_integer_value' => '1', )) +->values(array( + 'entity_type' => 'comment', + 'bundle' => 'comment_node_test_content_type', + 'deleted' => '0', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'en', + 'delta' => '0', + 'field_integer_value' => '10', +)) ->values(array( 'entity_type' => 'taxonomy_term', 'bundle' => 'test_vocabulary', @@ -9888,6 +9937,17 @@ 'subject_field_value' => 'Comment to IS translation', 'subject_field_format' => NULL, )) +->values(array( + 'entity_type' => 'comment', + 'bundle' => 'comment_node_test_content_type', + 'deleted' => '0', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'en', + 'delta' => '0', + 'subject_field_value' => 'Comment without language', + 'subject_field_format' => NULL, +)) ->execute(); $connection->schema()->createTable('field_data_taxonomy_forums', array( 'fields' => array( @@ -10399,6 +10459,17 @@ 'comment_body_value' => 'This is a comment to an Icelandic translation.', 'comment_body_format' => 'filtered_html', )) +->values(array( + 'entity_type' => 'comment', + 'bundle' => 'comment_node_test_content_type', + 'deleted' => '0', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'und', + 'delta' => '0', + 'comment_body_value' => 'A comment without language (migrated from Drupal 6)', + 'comment_body_format' => 'filtered_html', +)) ->execute(); $connection->schema()->createTable('field_revision_description_field', array( 'fields' => array( @@ -11880,6 +11951,16 @@ 'delta' => '0', 'field_integer_value' => '99', )) +->values(array( + 'entity_type' => 'comment', + 'bundle' => 'comment_node_test_content_type', + 'deleted' => '0', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'en', + 'delta' => '0', + 'field_integer_value' => '10', +)) ->values(array( 'entity_type' => 'taxonomy_term', 'bundle' => 'test_vocabulary', @@ -15052,6 +15133,17 @@ 'subject_field_value' => 'Comment to IS translation', 'subject_field_format' => NULL, )) +->values(array( + 'entity_type' => 'comment', + 'bundle' => 'comment_node_test_content_type', + 'deleted' => '0', + 'entity_id' => '4', + 'revision_id' => '4', + 'language' => 'en', + 'delta' => '0', + 'subject_field_value' => 'Comment without language', + 'subject_field_format' => NULL, +)) ->execute(); $connection->schema()->createTable('field_revision_taxonomy_forums', array( 'fields' => array( @@ -40898,11 +40990,11 @@ )) ->values(array( 'nid' => '1', - 'cid' => '1', - 'last_comment_timestamp' => '1421727536', + 'cid' => '4', + 'last_comment_timestamp' => '1426781880', 'last_comment_name' => '', - 'last_comment_uid' => '1', - 'comment_count' => '1', + 'last_comment_uid' => '3', + 'comment_count' => '2', )) ->values(array( 'nid' => '3', diff --git a/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php b/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php index e28dfda653d3edc9836258df09982d58bd690625..f5178bc545ed8f62d213c7b0c511b5259c3a5c80 100644 --- a/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php +++ b/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php @@ -64,7 +64,7 @@ protected function getEntityCounts() { 'block' => 25, 'block_content' => 1, 'block_content_type' => 1, - 'comment' => 3, + 'comment' => 4, // The 'standard' profile provides the 'comment' comment type, and the // migration creates 6 comment types, one per node type. 'comment_type' => 7, @@ -111,7 +111,7 @@ protected function getEntityCounts() { protected function getEntityCountsIncremental() { $counts = $this->getEntityCounts(); $counts['block_content'] = 2; - $counts['comment'] = 4; + $counts['comment'] = 5; $counts['file'] = 4; $counts['menu_link_content'] = 13; $counts['node'] = 7; diff --git a/web/core/modules/node/node.module b/web/core/modules/node/node.module index bb4580a587313af5aee26a6f6d166c329933d3ad..4899ddce67f0c9b7d6bc7ebad4ca53bd507dc689 100644 --- a/web/core/modules/node/node.module +++ b/web/core/modules/node/node.module @@ -648,7 +648,7 @@ function template_preprocess_node(&$variables) { unset($variables['elements']['uid']); } - if (!$skip_custom_preprocessing || !$node->getFieldDefinition('title')->isDisplayConfigurable('view')) { + if (isset($variables['elements']['title']) && (!$skip_custom_preprocessing || !$node->getFieldDefinition('title')->isDisplayConfigurable('view'))) { $variables['label'] = $variables['elements']['title']; unset($variables['elements']['title']); } diff --git a/web/core/modules/options/src/Plugin/Field/FieldType/ListFloatItem.php b/web/core/modules/options/src/Plugin/Field/FieldType/ListFloatItem.php index 416f7dc2ec61465d0c1a72a9d2ce710f72d19645..855d5b46c3484a410df23ae178e90d2914930790 100644 --- a/web/core/modules/options/src/Plugin/Field/FieldType/ListFloatItem.php +++ b/web/core/modules/options/src/Plugin/Field/FieldType/ListFloatItem.php @@ -2,6 +2,7 @@ namespace Drupal\options\Plugin\Field\FieldType; +use Drupal\Core\Field\FieldFilteredMarkup; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\TypedData\DataDefinition; @@ -55,7 +56,7 @@ protected function allowedValuesDescription() { $description .= '<br/>' . t('The label is optional: if a line contains a single number, it will be used as key and label.'); $description .= '<br/>' . t('Lists of labels are also accepted (one label per line), only if the field does not hold any values yet. Numeric keys will be automatically generated from the positions in the list.'); $description .= '</p>'; - $description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => $this->displayAllowedTags()]) . '</p>'; + $description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => FieldFilteredMarkup::displayAllowedTags()]) . '</p>'; return $description; } diff --git a/web/core/modules/options/src/Plugin/Field/FieldType/ListIntegerItem.php b/web/core/modules/options/src/Plugin/Field/FieldType/ListIntegerItem.php index b8a4204806b868ee6bc082592565132b5e8dcaf6..8a9600751909e9b63f288cb79aad073100f40bab 100644 --- a/web/core/modules/options/src/Plugin/Field/FieldType/ListIntegerItem.php +++ b/web/core/modules/options/src/Plugin/Field/FieldType/ListIntegerItem.php @@ -2,6 +2,7 @@ namespace Drupal\options\Plugin\Field\FieldType; +use Drupal\Core\Field\FieldFilteredMarkup; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\TypedData\DataDefinition; @@ -55,7 +56,7 @@ protected function allowedValuesDescription() { $description .= '<br/>' . t('The label is optional: if a line contains a single number, it will be used as key and label.'); $description .= '<br/>' . t('Lists of labels are also accepted (one label per line), only if the field does not hold any values yet. Numeric keys will be automatically generated from the positions in the list.'); $description .= '</p>'; - $description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => $this->displayAllowedTags()]) . '</p>'; + $description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => FieldFilteredMarkup::displayAllowedTags()]) . '</p>'; return $description; } diff --git a/web/core/modules/options/src/Plugin/Field/FieldType/ListStringItem.php b/web/core/modules/options/src/Plugin/Field/FieldType/ListStringItem.php index 16e8878d7abf16cc57a8a7d45bc0aacf7bc24c46..555030764325ff89581c5ec479d03195f6ade0d4 100644 --- a/web/core/modules/options/src/Plugin/Field/FieldType/ListStringItem.php +++ b/web/core/modules/options/src/Plugin/Field/FieldType/ListStringItem.php @@ -2,6 +2,7 @@ namespace Drupal\options\Plugin\Field\FieldType; +use Drupal\Core\Field\FieldFilteredMarkup; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\TypedData\DataDefinition; @@ -56,7 +57,7 @@ protected function allowedValuesDescription() { $description .= '<br/>' . t('The key is the stored value. The label will be used in displayed values and edit forms.'); $description .= '<br/>' . t('The label is optional: if a line contains a single string, it will be used as key and label.'); $description .= '</p>'; - $description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => $this->displayAllowedTags()]) . '</p>'; + $description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => FieldFilteredMarkup::displayAllowedTags()]) . '</p>'; return $description; } diff --git a/web/core/modules/rdf/rdf.module b/web/core/modules/rdf/rdf.module index 6dced6adabe6ba729023253851bf136729f06fd7..56204e1dd652c22b5fca3ba44544577983b392eb 100644 --- a/web/core/modules/rdf/rdf.module +++ b/web/core/modules/rdf/rdf.module @@ -495,7 +495,7 @@ function rdf_preprocess_comment(&$variables) { } // Adds RDFa markup for the date of the comment. $created_mapping = $mapping->getPreparedFieldMapping('created'); - if (!empty($created_mapping)) { + if (!empty($created_mapping) && isset($comment->rdf_data)) { // The comment date is precomputed as part of the rdf_data so that it can be // cached as part of the entity. $date_attributes = $comment->rdf_data['date']; @@ -567,7 +567,7 @@ function rdf_preprocess_taxonomy_term(&$variables) { $term = $variables['term']; $mapping = rdf_get_mapping('taxonomy_term', $term->bundle()); $bundle_mapping = $mapping->getPreparedBundleMapping(); - $variables['attributes']['about'] = $term->toUrl()->toString(); + $variables['attributes']['about'] = $variables['url']; $variables['attributes']['typeof'] = empty($bundle_mapping['types']) ? NULL : $bundle_mapping['types']; // Add RDFa markup for the taxonomy term name as metadata, if present. diff --git a/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php index 2be1e85cc226c00ac62c4ced53bd42da2a5d5a6b..5c80dc1815d37815c68bf79f93bbff8effb0f979 100644 --- a/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php @@ -6,6 +6,7 @@ use Drupal\comment\CommentInterface; use Drupal\comment\CommentManagerInterface; use Drupal\Tests\comment\Functional\CommentTestBase; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; use Drupal\user\RoleInterface; use Drupal\comment\Entity\Comment; @@ -16,6 +17,8 @@ */ class CommentAttributesTest extends CommentTestBase { + use RdfParsingTrait; + /** * Modules to enable. * @@ -127,9 +130,7 @@ public function testNumberOfCommentsRdfaMarkup() { // Tests number of comments in teaser view. $this->drupalLogin($this->webUser); - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node'), 'rdfa', $this->baseUri); + $this->drupalGet('node'); // Number of comments. $expected_value = [ @@ -137,13 +138,10 @@ public function testNumberOfCommentsRdfaMarkup() { 'value' => 2, 'datatype' => 'http://www.w3.org/2001/XMLSchema#integer', ]; - $this->assertTrue($graph->hasProperty($this->nodeUri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of teaser view (sioc:num_replies).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->nodeUri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of teaser view (sioc:num_replies).'); - // Tests number of comments in full node view, expected value is the same. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $this->node->id()), 'rdfa', $this->baseUri); - $this->assertTrue($graph->hasProperty($this->nodeUri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of full node view mode (sioc:num_replies).'); + $this->drupalGet($this->node->toUrl()); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->nodeUri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of full node view mode (sioc:num_replies).'); } /** @@ -176,17 +174,11 @@ public function testCommentRdfaMarkup() { // Tests comment #1 with access to the user profile. $this->drupalLogin($this->webUser); - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $this->node->id()), 'rdfa', $this->baseUri); - $this->_testBasicCommentRdfaMarkup($graph, $comment1); + $this->_testBasicCommentRdfaMarkup($comment1); // Tests comment #1 with no access to the user profile (as anonymous user). $this->drupalLogout(); - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $this->node->id()), 'rdfa', $this->baseUri); - $this->_testBasicCommentRdfaMarkup($graph, $comment1); + $this->_testBasicCommentRdfaMarkup($comment1); // Posts comment #2 as anonymous user. $anonymous_user = []; @@ -196,17 +188,11 @@ public function testCommentRdfaMarkup() { $comment2 = $this->saveComment($this->node->id(), 0, $anonymous_user); // Tests comment #2 as anonymous user. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $this->node->id()), 'rdfa', $this->baseUri); - $this->_testBasicCommentRdfaMarkup($graph, $comment2, $anonymous_user); + $this->_testBasicCommentRdfaMarkup($comment2, $anonymous_user); // Tests comment #2 as logged in user. $this->drupalLogin($this->webUser); - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $this->node->id()), 'rdfa', $this->baseUri); - $this->_testBasicCommentRdfaMarkup($graph, $comment2, $anonymous_user); + $this->_testBasicCommentRdfaMarkup($comment2, $anonymous_user); } /** @@ -223,28 +209,25 @@ public function testCommentReplyOfRdfaMarkup() { $comment_2 = $this->saveComment($this->node->id(), $this->webUser->id(), NULL, $comment_1->id()); $comment_2_uri = $comment_2->toUrl('canonical', ['absolute' => TRUE])->toString(); - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $this->node->id()), 'rdfa', $this->baseUri); - // Tests the reply_of relationship of a first level comment. + $this->drupalGet($this->node->toUrl()); $expected_value = [ 'type' => 'uri', 'value' => $this->nodeUri, ]; - $this->assertTrue($graph->hasProperty($comment_1_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its node found in RDF output (sioc:reply_of).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_1_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its node found in RDF output (sioc:reply_of).'); // Tests the reply_of relationship of a second level comment. $expected_value = [ 'type' => 'uri', 'value' => $this->nodeUri, ]; - $this->assertTrue($graph->hasProperty($comment_2_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its node found in RDF output (sioc:reply_of).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_2_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its node found in RDF output (sioc:reply_of).'); $expected_value = [ 'type' => 'uri', 'value' => $comment_1_uri, ]; - $this->assertTrue($graph->hasProperty($comment_2_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its parent comment found in RDF output (sioc:reply_of).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_2_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its parent comment found in RDF output (sioc:reply_of).'); } /** @@ -257,7 +240,8 @@ public function testCommentReplyOfRdfaMarkup() { * @param $account * An array containing information about an anonymous user. */ - public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $account = []) { + public function _testBasicCommentRdfaMarkup(CommentInterface $comment, $account = []) { + $this->drupalGet($this->node->toUrl()); $comment_uri = $comment->toUrl('canonical', ['absolute' => TRUE])->toString(); // Comment type. @@ -265,13 +249,13 @@ public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $ 'type' => 'uri', 'value' => 'http://rdfs.org/sioc/types#Comment', ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Comment type found in RDF output (sioct:Comment).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Comment type found in RDF output (sioct:Comment).'); // Comment type. $expected_value = [ 'type' => 'uri', 'value' => 'http://rdfs.org/sioc/ns#Post', ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Comment type found in RDF output (sioc:Post).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Comment type found in RDF output (sioc:Post).'); // Comment title. $expected_value = [ @@ -279,7 +263,7 @@ public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $ 'value' => $comment->getSubject(), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Comment subject found in RDF output (dc:title).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Comment subject found in RDF output (dc:title).'); // Comment date. $expected_value = [ @@ -287,14 +271,14 @@ public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $ 'value' => $this->container->get('date.formatter')->format($comment->getCreatedTime(), 'custom', 'c', 'UTC'), 'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime', ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/dc/terms/date', $expected_value), 'Comment date found in RDF output (dc:date).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://purl.org/dc/terms/date', $expected_value), 'Comment date found in RDF output (dc:date).'); // Comment date. $expected_value = [ 'type' => 'literal', 'value' => $this->container->get('date.formatter')->format($comment->getCreatedTime(), 'custom', 'c', 'UTC'), 'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime', ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/dc/terms/created', $expected_value), 'Comment date found in RDF output (dc:created).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://purl.org/dc/terms/created', $expected_value), 'Comment date found in RDF output (dc:created).'); // Comment body. $expected_value = [ @@ -302,27 +286,20 @@ public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $ 'value' => $comment->comment_body->value . "\n", 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/rss/1.0/modules/content/encoded', $expected_value), 'Comment body found in RDF output (content:encoded).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://purl.org/rss/1.0/modules/content/encoded', $expected_value), 'Comment body found in RDF output (content:encoded).'); // The comment author can be a registered user or an anonymous user. if ($comment->getOwnerId() > 0) { - $author_uri = Url::fromRoute('entity.user.canonical', ['user' => $comment->getOwnerId()], ['absolute' => TRUE])->toString(); // Comment relation to author. $expected_value = [ 'type' => 'uri', - 'value' => $author_uri, + 'value' => Url::fromRoute('entity.user.canonical', ['user' => $comment->getOwnerId()], ['absolute' => TRUE])->toString(), ]; - $this->assertTrue($graph->hasProperty($comment_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'Comment relation to author found in RDF output (sioc:has_creator).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'Comment relation to author found in RDF output (sioc:has_creator).'); } else { // The author is expected to be a blank node. - $author_uri = $graph->get($comment_uri, '<http://rdfs.org/sioc/ns#has_creator>'); - if ($author_uri instanceof \EasyRdf_Resource) { - $this->assertTrue($author_uri->isBnode(), 'Comment relation to author found in RDF output (sioc:has_creator) and author is blank node.'); - } - else { - $this->fail('Comment relation to author found in RDF output (sioc:has_creator).'); - } + $this->assertTrue($this->rdfElementIsBlankNode($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, '<http://rdfs.org/sioc/ns#has_creator>')); } // Author name. @@ -331,7 +308,7 @@ public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $ 'type' => 'literal', 'value' => $name, ]; - $this->assertTrue($graph->hasProperty($author_uri, 'http://xmlns.com/foaf/0.1/name', $expected_value), 'Comment author name found in RDF output (foaf:name).'); + $this->assertTrue($this->hasRdfChildProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, '<http://rdfs.org/sioc/ns#has_creator>', 'http://xmlns.com/foaf/0.1/name', $expected_value), 'Comment author name found in RDF output (foaf:name).'); // Comment author homepage (only for anonymous authors). if ($comment->getOwnerId() == 0) { @@ -339,7 +316,7 @@ public function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $ 'type' => 'uri', 'value' => 'http://example.org/', ]; - $this->assertTrue($graph->hasProperty($author_uri, 'http://xmlns.com/foaf/0.1/page', $expected_value), 'Comment author link found in RDF output (foaf:page).'); + $this->assertTrue($this->hasRdfChildProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $comment_uri, '<http://rdfs.org/sioc/ns#has_creator>', 'http://xmlns.com/foaf/0.1/page', $expected_value), 'Comment author link found in RDF output (foaf:page).'); } } diff --git a/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php index 8c577c1e12bfcbce494af3661cc5e0551b2b2448..ce76ba3160af080b8556f4c05850115e68850ca7 100644 --- a/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php @@ -4,6 +4,7 @@ use Drupal\Core\Url; use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; use Drupal\Tests\taxonomy\Functional\TaxonomyTestBase; /** @@ -13,6 +14,8 @@ */ class EntityReferenceFieldAttributesTest extends TaxonomyTestBase { + use RdfParsingTrait; + /** * Modules to enable. * @@ -25,6 +28,13 @@ class EntityReferenceFieldAttributesTest extends TaxonomyTestBase { */ protected $defaultTheme = 'stark'; + /** + * URI of the front page of the Drupal site. + * + * @var string + */ + protected $baseUri; + /** * The name of the taxonomy term reference field used in the test. * @@ -78,6 +88,9 @@ protected function setUp() { ->setBundleMapping(['types' => ['skos:Concept']]) ->setFieldMapping('name', ['properties' => ['rdfs:label']]) ->save(); + + // Prepares commonly used URIs. + $this->baseUri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); } /** @@ -112,24 +125,18 @@ public function testNodeTeaser() { ->view($node, 'teaser'); $html = \Drupal::service('renderer')->renderRoot($node_render_array); - // Parse the teaser. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $parser->parse($graph, $html, 'rdfa', $base_uri); - // Node relations to taxonomy terms. $node_uri = $node->toUrl('canonical', ['absolute' => TRUE])->toString(); $expected_value = [ 'type' => 'uri', 'value' => $taxonomy_term_1_uri, ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).'); + $this->assertTrue($this->hasRdfProperty($html, $this->baseUri, $node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).'); $expected_value = [ 'type' => 'uri', 'value' => $taxonomy_term_2_uri, ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).'); + $this->assertTrue($this->hasRdfProperty($html, $this->baseUri, $node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).'); // Taxonomy terms triples. // Term 1. $expected_value = [ diff --git a/web/core/modules/rdf/tests/src/Functional/FileFieldAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/FileFieldAttributesTest.php index fb8eb96c7e09ee58049b7cf61e11f1c120d151e0..e0d7da104547a4922279e6fa706e2cc40ed10fe7 100644 --- a/web/core/modules/rdf/tests/src/Functional/FileFieldAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/FileFieldAttributesTest.php @@ -5,6 +5,7 @@ use Drupal\Core\Url; use Drupal\Tests\file\Functional\FileFieldTestBase; use Drupal\file\Entity\File; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; /** * Tests the RDFa markup of filefields. @@ -13,6 +14,8 @@ */ class FileFieldAttributesTest extends FileFieldTestBase { + use RdfParsingTrait; + /** * Modules to enable. * @@ -25,6 +28,13 @@ class FileFieldAttributesTest extends FileFieldTestBase { */ protected $defaultTheme = 'stark'; + /** + * URI of the front page of the Drupal site. + * + * @var string + */ + protected $baseUri; + /** * The name of the file field used in the test. * @@ -72,6 +82,9 @@ protected function setUp() { $node_storage->resetCache([$nid]); $this->node = $node_storage->load($nid); $this->file = File::load($this->node->{$this->fieldName}->target_id); + + // Prepares commonly used URIs. + $this->baseUri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); } /** @@ -87,12 +100,6 @@ public function testNodeTeaser() { ->view($this->node, 'teaser'); $html = \Drupal::service('renderer')->renderRoot($node_render_array); - // Parses front page where the node is displayed in its teaser form. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $parser->parse($graph, $html, 'rdfa', $base_uri); - $node_uri = $this->node->toUrl('canonical', ['absolute' => TRUE])->toString(); $file_uri = file_create_url($this->file->getFileUri()); @@ -101,7 +108,7 @@ public function testNodeTeaser() { 'type' => 'uri', 'value' => $file_uri, ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/2000/01/rdf-schema#seeAlso', $expected_value), 'Node to file relation found in RDF output (rdfs:seeAlso).'); + $this->assertTrue($this->hasRdfProperty($html, $this->baseUri, $node_uri, 'http://www.w3.org/2000/01/rdf-schema#seeAlso', $expected_value), 'Node to file relation found in RDF output (rdfs:seeAlso).'); $this->drupalGet('node'); } diff --git a/web/core/modules/rdf/tests/src/Functional/ImageFieldAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/ImageFieldAttributesTest.php index bd7eab7d7e37b5773a80b421987802e8f2949eee..faa55de8694aaf0ee8befaf9939a43d252a3b5cc 100644 --- a/web/core/modules/rdf/tests/src/Functional/ImageFieldAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/ImageFieldAttributesTest.php @@ -7,6 +7,7 @@ use Drupal\Tests\image\Functional\ImageFieldTestBase; use Drupal\node\Entity\Node; use Drupal\file\Entity\File; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; use Drupal\Tests\TestFileCreationTrait; /** @@ -16,6 +17,8 @@ */ class ImageFieldAttributesTest extends ImageFieldTestBase { + use RdfParsingTrait; + use TestFileCreationTrait { getTestFiles as drupalGetTestFiles; } @@ -32,6 +35,13 @@ class ImageFieldAttributesTest extends ImageFieldTestBase { */ protected $defaultTheme = 'stark'; + /** + * URI of the front page of the Drupal site. + * + * @var string + */ + protected $baseUri; + /** * The name of the image field used in the test. * @@ -77,6 +87,9 @@ protected function setUp() { $nid = $this->uploadNodeImage($image, $this->fieldName, 'article', $this->randomMachineName()); $this->node = Node::load($nid); $this->file = File::load($this->node->{$this->fieldName}->target_id); + + // Prepares commonly used URIs. + $this->baseUri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); } /** @@ -99,12 +112,6 @@ public function testNodeTeaser() { ->view($this->node, 'teaser'); $html = \Drupal::service('renderer')->renderRoot($node_render_array); - // Parse the teaser. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $parser->parse($graph, $html, 'rdfa', $base_uri); - // Construct the node and image URIs for testing. $node_uri = $this->node->toUrl('canonical', ['absolute' => TRUE])->toString(); $image_uri = ImageStyle::load('medium')->buildUrl($this->file->getFileUri()); @@ -114,14 +121,14 @@ public function testNodeTeaser() { 'type' => 'uri', 'value' => $image_uri, ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://ogp.me/ns#image', $expected_value), 'Node to file relation found in RDF output (og:image).'); + $this->assertTrue($this->hasRdfProperty($html, $this->baseUri, $node_uri, 'http://ogp.me/ns#image', $expected_value), 'Node to file relation found in RDF output (og:image).'); // Test image type. $expected_value = [ 'type' => 'uri', 'value' => 'http://xmlns.com/foaf/0.1/Image', ]; - $this->assertTrue($graph->hasProperty($image_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Image type found in RDF output (foaf:Image).'); + $this->assertTrue($this->hasRdfProperty($html, $this->baseUri, $image_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Term type found in RDF output (skos:Concept).'); } } diff --git a/web/core/modules/rdf/tests/src/Functional/NodeAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/NodeAttributesTest.php index 00a4a405c4855b92381f110ae4af4786e5ade996..cf44699fabd6aa2640f3e10dc9efc44871e808e4 100644 --- a/web/core/modules/rdf/tests/src/Functional/NodeAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/NodeAttributesTest.php @@ -4,6 +4,7 @@ use Drupal\Core\Url; use Drupal\Tests\node\Functional\NodeTestBase; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; /** * Tests the RDFa markup of Nodes. @@ -12,6 +13,8 @@ */ class NodeAttributesTest extends NodeTestBase { + use RdfParsingTrait; + /** * Modules to enable. * @@ -24,6 +27,13 @@ class NodeAttributesTest extends NodeTestBase { */ protected $defaultTheme = 'stark'; + /** + * URI of the front page of the Drupal site. + * + * @var string + */ + protected $baseUri; + protected function setUp() { parent::setUp(); @@ -40,6 +50,8 @@ protected function setUp() { 'datatype_callback' => ['callable' => 'Drupal\rdf\CommonDataConverter::dateIso8601Value'], ]) ->save(); + // Prepares commonly used URIs. + $this->baseUri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); } /** @@ -52,49 +64,43 @@ public function testNodeAttributes() { 'type' => 'article', 'title' => $this->randomMachineName(8) . "'", ]); - $node_uri = $node->toUrl('canonical', ['absolute' => TRUE])->toString(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - - // Parses front page where the node is displayed in its teaser form. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('node/' . $node->id()), 'rdfa', $base_uri); + $this->drupalGet($node->toUrl()); // Inspects RDF graph output. // Node type. $expected_value = [ 'type' => 'uri', 'value' => 'http://rdfs.org/sioc/ns#Item', ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Node type found in RDF output (sioc:Item).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $node_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Node type found in RDF output (sioc:Item).'); // Node type. $expected_value = [ 'type' => 'uri', 'value' => 'http://xmlns.com/foaf/0.1/Document', ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Node type found in RDF output (foaf:Document).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $node_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Node type found in RDF output (foaf:Document).'); // Node title. $expected_value = [ 'type' => 'literal', 'value' => $node->getTitle(), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Node title found in RDF output (dc:title).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $node_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Node title found in RDF output (dc:title).'); // Node date (date format must be UTC). $expected_value = [ 'type' => 'literal', 'value' => \Drupal::service('date.formatter')->format($node->getCreatedTime(), 'custom', 'c', 'UTC'), 'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime', ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/date', $expected_value), 'Node date found in RDF output (dc:date).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $node_uri, 'http://purl.org/dc/terms/date', $expected_value), 'Node date found in RDF output (dc:date).'); // Node date (date format must be UTC). $expected_value = [ 'type' => 'literal', 'value' => \Drupal::service('date.formatter')->format($node->getCreatedTime(), 'custom', 'c', 'UTC'), 'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime', ]; - $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/created', $expected_value), 'Node date found in RDF output (dc:created).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $node_uri, 'http://purl.org/dc/terms/created', $expected_value), 'Node date found in RDF output (dc:created).'); } } diff --git a/web/core/modules/rdf/tests/src/Functional/StandardProfileTest.php b/web/core/modules/rdf/tests/src/Functional/StandardProfileTest.php index 93d78a93a4bf4a0559870f3fced135e301f600dc..279e92f54924662a8c8b59c8411531fa11169051 100644 --- a/web/core/modules/rdf/tests/src/Functional/StandardProfileTest.php +++ b/web/core/modules/rdf/tests/src/Functional/StandardProfileTest.php @@ -10,6 +10,7 @@ use Drupal\Tests\BrowserTestBase; use Drupal\comment\Entity\Comment; use Drupal\taxonomy\Entity\Term; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; /** * Tests the RDF mappings and RDFa markup of the standard profile. @@ -18,6 +19,8 @@ */ class StandardProfileTest extends BrowserTestBase { + use RdfParsingTrait; + /** * {@inheritdoc} */ @@ -206,10 +209,11 @@ public function testRdfaOutput() { */ protected function doFrontPageRdfaTests() { // Feed the HTML into the parser. - $graph = $this->getRdfGraph(Url::fromRoute('<front>')); + $this->drupalGet(Url::fromRoute('<front>')); // Ensure that both articles are listed. - $this->assertEqual(2, count($graph->allOfType('http://schema.org/Article')), 'Two articles found on front page.'); + // $this->assertEqual(2, count($this->getRdfGraph(Url::fromRoute('<front>'), $this->baseUri)->allOfType('http://schema.org/Article')), 'Two articles found on front page.'); + $this->assertEqual(2, $this->getElementByRdfTypeCount(Url::fromRoute('<front>'), $this->baseUri, 'http://schema.org/Article'), 'Two articles found on front page.'); // Test interaction count. $expected_value = [ @@ -217,23 +221,21 @@ protected function doFrontPageRdfaTests() { 'value' => 'UserComments:1', 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/interactionCount', $expected_value), "Teaser comment count was found (schema:interactionCount)."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleUri, 'http://schema.org/interactionCount', $expected_value), 'Teaser comment count was found (schema:interactionCount).'); // Test the properties that are common between pages and articles and are // displayed in full and teaser mode. - $this->assertRdfaCommonNodeProperties($graph, $this->article, "Teaser"); + $this->assertRdfaCommonNodeProperties($this->article, "Teaser"); // Test properties that are displayed in both teaser and full mode. - $this->assertRdfaArticleProperties($graph, "Teaser"); + $this->assertRdfaArticleProperties("Teaser"); // @todo Once the image points to the original instead of the processed // image, move this to testArticleProperties(). - $image_file = $this->article->get('field_image')->entity; - $image_uri = ImageStyle::load('medium')->buildUrl($image_file->getFileUri()); $expected_value = [ 'type' => 'uri', - 'value' => $image_uri, + 'value' => $this->imageUri, ]; - $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/image', $expected_value), "Teaser image was found (schema:image)."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleUri, 'http://schema.org/image', $expected_value), 'Teaser image was found (schema:image).'); } /** @@ -245,25 +247,26 @@ protected function doFrontPageRdfaTests() { */ protected function doArticleRdfaTests() { // Feed the HTML into the parser. - $graph = $this->getRdfGraph($this->article->toUrl()); + $this->drupalGet($this->article->toUrl()); // Type. - $this->assertEqual($graph->type($this->articleUri), 'schema:Article', 'Article type was found (schema:Article).'); + $this->assertEqual($this->getElementRdfType($this->article->toUrl(), $this->baseUri, $this->articleUri), 'schema:Article', 'Article type was found (schema:Article).'); // Test the properties that are common between pages and articles. - $this->assertRdfaCommonNodeProperties($graph, $this->article, "Article"); + $this->assertRdfaCommonNodeProperties($this->article, "Article"); // Test properties that are displayed in both teaser and full mode. - $this->assertRdfaArticleProperties($graph, "Article"); + $this->assertRdfaArticleProperties("Article"); // Test the comment properties displayed on articles. - $this->assertRdfaNodeCommentProperties($graph); + $this->assertRdfaNodeCommentProperties(); // @todo Once the image points to the original instead of the processed // image, move this to testArticleProperties(). + $expected_value = [ 'type' => 'uri', 'value' => $this->imageUri, ]; - $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/image', $expected_value), "Article image was found (schema:image)."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleUri, 'http://schema.org/image', $expected_value), 'Teaser image was found (schema:image).'); } /** @@ -281,14 +284,11 @@ protected function doPageRdfaTests() { $node_type->setDisplaySubmitted(TRUE); $node_type->save(); - // Feed the HTML into the parser. - $graph = $this->getRdfGraph($this->page->toUrl()); - // Type. - $this->assertEqual($graph->type($this->pageUri), 'schema:WebPage', 'Page type was found (schema:WebPage).'); + $this->assertEqual($this->getElementRdfType($this->page->toUrl(), $this->baseUri, $this->pageUri), 'schema:WebPage', 'Page type was found (schema:WebPage).'); // Test the properties that are common between pages and articles. - $this->assertRdfaCommonNodeProperties($graph, $this->page, "Page"); + $this->assertRdfaCommonNodeProperties($this->page, "Page"); } /** @@ -297,18 +297,15 @@ protected function doPageRdfaTests() { protected function doUserRdfaTests() { $this->drupalLogin($this->rootUser); - // Feed the HTML into the parser. - $graph = $this->getRdfGraph($this->adminUser->toUrl()); - // User type. - $this->assertEqual($graph->type($this->authorUri), 'schema:Person', "User type was found (schema:Person) on user page."); + $this->assertEqual($this->getElementRdfType($this->adminUser->toUrl(), $this->baseUri, $this->authorUri), 'schema:Person', 'User type was found (schema:Person) on user page.'); // User name. $expected_value = [ 'type' => 'literal', 'value' => $this->adminUser->label(), ]; - $this->assertTrue($graph->hasProperty($this->authorUri, 'http://schema.org/name', $expected_value), "User name was found (schema:name) on user page."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->authorUri, 'http://schema.org/name', $expected_value), 'User name was found (schema:name) on user page.'); $this->drupalLogout(); } @@ -317,11 +314,9 @@ protected function doUserRdfaTests() { * Tests that term data is exposed on term page. */ protected function doTermRdfaTests() { - // Feed the HTML into the parser. - $graph = $this->getRdfGraph($this->term->toUrl()); // Term type. - $this->assertEqual($graph->type($this->termUri), 'schema:Thing', "Term type was found (schema:Thing) on term page."); + $this->assertEqual($this->getElementRdfType($this->term->toUrl(), $this->baseUri, $this->termUri), 'schema:Thing', 'Term type was found (schema:Thing) on term page.'); // Term name. $expected_value = [ @@ -329,8 +324,7 @@ protected function doTermRdfaTests() { 'value' => $this->term->getName(), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($this->termUri, 'http://schema.org/name', $expected_value), "Term name was found (schema:name) on term page."); - + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->termUri, 'http://schema.org/name', $expected_value), 'Term name was found (schema:name) on term page.'); // @todo Add test for term description once it is a field: // https://www.drupal.org/node/569434. } @@ -338,14 +332,15 @@ protected function doTermRdfaTests() { /** * Tests output for properties held in common between articles and pages. * - * @param \EasyRdf_Graph $graph - * The EasyRDF graph object. * @param \Drupal\node\NodeInterface $node * The node being displayed. * @param string $message_prefix * The word to use in the test assertion message. + * + * @throws \Drupal\Core\Entity\EntityMalformedException */ - protected function assertRdfaCommonNodeProperties($graph, NodeInterface $node, $message_prefix) { + protected function assertRdfaCommonNodeProperties(NodeInterface $node, $message_prefix) { + $this->drupalGet($node->toUrl()); $uri = $node->toUrl('canonical', ['absolute' => TRUE])->toString(); // Title. @@ -354,7 +349,7 @@ protected function assertRdfaCommonNodeProperties($graph, NodeInterface $node, $ 'value' => $node->get('title')->value, 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($uri, 'http://schema.org/name', $expected_value), "$message_prefix title was found (schema:name)."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $uri, 'http://schema.org/name', $expected_value), "$message_prefix title was found (schema:name)."); // Created date. $expected_value = [ @@ -362,7 +357,7 @@ protected function assertRdfaCommonNodeProperties($graph, NodeInterface $node, $ 'value' => $this->container->get('date.formatter')->format($node->get('created')->value, 'custom', 'c', 'UTC'), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($uri, 'http://schema.org/dateCreated', $expected_value), "$message_prefix created date was found (schema:dateCreated) in teaser."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $uri, 'http://schema.org/dateCreated', $expected_value), "$message_prefix created date was found (schema:dateCreated) in teaser."); // Body. $expected_value = [ @@ -370,41 +365,39 @@ protected function assertRdfaCommonNodeProperties($graph, NodeInterface $node, $ 'value' => $node->get('body')->value, 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($uri, 'http://schema.org/text', $expected_value), "$message_prefix body was found (schema:text) in teaser."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $uri, 'http://schema.org/text', $expected_value), "$message_prefix body was found (schema:text) in teaser."); // Author. $expected_value = [ 'type' => 'uri', 'value' => $this->authorUri, ]; - $this->assertTrue($graph->hasProperty($uri, 'http://schema.org/author', $expected_value), "$message_prefix author was found (schema:author) in teaser."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $uri, 'http://schema.org/author', $expected_value), "$message_prefix author was found (schema:author) in teaser."); // Author type. - $this->assertEqual($graph->type($this->authorUri), 'schema:Person', "$message_prefix author type was found (schema:Person)."); + $this->assertEqual($this->getElementRdfType($node->toUrl(), $this->baseUri, $this->authorUri), 'schema:Person', '$message_prefix author type was found (schema:Person).'); // Author name. $expected_value = [ 'type' => 'literal', 'value' => $this->adminUser->label(), ]; - $this->assertTrue($graph->hasProperty($this->authorUri, 'http://schema.org/name', $expected_value), "$message_prefix author name was found (schema:name)."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->authorUri, 'http://schema.org/name', $expected_value), "$message_prefix author name was found (schema:name)."); } /** * Tests output for article properties displayed in both view modes. * - * @param \EasyRdf_Graph $graph - * The EasyRDF graph object. * @param string $message_prefix * The word to use in the test assertion message. */ - protected function assertRdfaArticleProperties($graph, $message_prefix) { + protected function assertRdfaArticleProperties($message_prefix) { // Tags. $expected_value = [ 'type' => 'uri', 'value' => $this->termUri, ]; - $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/about', $expected_value), "$message_prefix tag was found (schema:about)."); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleUri, 'http://schema.org/about', $expected_value), "$message_prefix tag was found (schema:about)."); // Tag type. // @todo Enable with https://www.drupal.org/node/2072791. @@ -422,20 +415,19 @@ protected function assertRdfaArticleProperties($graph, $message_prefix) { /** * Tests output for comment properties on nodes in full page view mode. - * - * @param \EasyRdf_Graph $graph - * The EasyRDF graph object. */ - protected function assertRdfaNodeCommentProperties($graph) { + protected function assertRdfaNodeCommentProperties() { + + $this->drupalGet($this->article->toUrl()); // Relationship between node and comment. $expected_value = [ 'type' => 'uri', 'value' => $this->articleCommentUri, ]; - $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/comment', $expected_value), 'Relationship between node and comment found (schema:comment).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleUri, 'http://schema.org/comment', $expected_value), "Relationship between node and comment found (schema:comment)."); // Comment type. - $this->assertEqual($graph->type($this->articleCommentUri), 'schema:Comment', 'Comment type was found (schema:Comment).'); + $this->assertEqual($this->getElementRdfType($this->article->toUrl(), $this->baseUri, $this->articleCommentUri), 'schema:Comment', 'Comment type was found (schema:Comment).'); // Comment title. $expected_value = [ @@ -443,7 +435,7 @@ protected function assertRdfaNodeCommentProperties($graph) { 'value' => $this->articleComment->get('subject')->value, 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($this->articleCommentUri, 'http://schema.org/name', $expected_value), 'Article comment title was found (schema:name).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleCommentUri, 'http://schema.org/name', $expected_value), "Article comment title was found (schema:name)."); // Comment created date. $expected_value = [ @@ -451,7 +443,7 @@ protected function assertRdfaNodeCommentProperties($graph) { 'value' => $this->container->get('date.formatter')->format($this->articleComment->get('created')->value, 'custom', 'c', 'UTC'), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($this->articleCommentUri, 'http://schema.org/dateCreated', $expected_value), 'Article comment created date was found (schema:dateCreated).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleCommentUri, 'http://schema.org/dateCreated', $expected_value), "Article comment created date was found (schema:dateCreated)."); // Comment body. $text = $this->articleComment->get('comment_body')->value; @@ -463,24 +455,24 @@ protected function assertRdfaNodeCommentProperties($graph) { ", 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($this->articleCommentUri, 'http://schema.org/text', $expected_value), 'Article comment body was found (schema:text).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleCommentUri, 'http://schema.org/text', $expected_value), "Article comment body was found (schema:text)."); // Comment uid. $expected_value = [ 'type' => 'uri', 'value' => $this->commenterUri, ]; - $this->assertTrue($graph->hasProperty($this->articleCommentUri, 'http://schema.org/author', $expected_value), 'Article comment author was found (schema:author).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->articleCommentUri, 'http://schema.org/author', $expected_value), "Article comment author was found (schema:author)."); // Comment author type. - $this->assertEqual($graph->type($this->commenterUri), 'schema:Person', 'Comment author type was found (schema:Person).'); + $this->assertEqual($this->getElementRdfType($this->article->toUrl(), $this->baseUri, $this->commenterUri), 'schema:Person', 'Comment author type was found (schema:Person).'); // Comment author name. $expected_value = [ 'type' => 'literal', 'value' => $this->webUser->getAccountName(), ]; - $this->assertTrue($graph->hasProperty($this->commenterUri, 'http://schema.org/name', $expected_value), 'Comment author name was found (schema:name).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $this->commenterUri, 'http://schema.org/name', $expected_value), "Comment author name was found (schema:name)."); } /** @@ -519,20 +511,4 @@ protected function saveComment($nid, $uid, $contact = NULL, $pid = 0) { return $comment; } - /** - * Get the EasyRdf_Graph object for a page. - * - * @param \Drupal\Core\Url $url - * The URL object for the page. - * - * @return \EasyRdf_Graph - * The RDF graph object. - */ - protected function getRdfGraph(Url $url) { - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet($url), 'rdfa', $this->baseUri); - return $graph; - } - } diff --git a/web/core/modules/rdf/tests/src/Functional/TaxonomyAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/TaxonomyAttributesTest.php index 529c99b35a3c22e85de8b51779d401930f32530f..0d0e23626d270319dbacdf70e84b1d45fbff47fa 100644 --- a/web/core/modules/rdf/tests/src/Functional/TaxonomyAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/TaxonomyAttributesTest.php @@ -4,6 +4,7 @@ use Drupal\Core\Url; use Drupal\Tests\taxonomy\Functional\TaxonomyTestBase; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; /** * Tests the RDFa markup of Taxonomy terms. @@ -12,6 +13,8 @@ */ class TaxonomyAttributesTest extends TaxonomyTestBase { + use RdfParsingTrait; + /** * Modules to enable. * @@ -24,6 +27,13 @@ class TaxonomyAttributesTest extends TaxonomyTestBase { */ protected $defaultTheme = 'stark'; + /** + * URI of the front page of the Drupal site. + * + * @var string + */ + protected $baseUri; + /** * Vocabulary created for testing purposes. * @@ -43,6 +53,9 @@ protected function setUp() { 'properties' => ['rdfs:label', 'skos:prefLabel'], ]) ->save(); + + // Prepares commonly used URIs. + $this->baseUri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); } /** @@ -52,11 +65,8 @@ public function testTaxonomyTermRdfaAttributes() { $term = $this->createTerm($this->vocabulary); $term_uri = $term->toUrl('canonical', ['absolute' => TRUE])->toString(); - // Parses the term's page and checks that the RDF output is correct. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $parser->parse($graph, $this->drupalGet('taxonomy/term/' . $term->id()), 'rdfa', $base_uri); + $this->drupalGet('taxonomy/term/' . $term->id()); + $this->drupalGet($term->toUrl()); // Inspects RDF graph output. // Term type. @@ -64,21 +74,22 @@ public function testTaxonomyTermRdfaAttributes() { 'type' => 'uri', 'value' => 'http://www.w3.org/2004/02/skos/core#Concept', ]; - $this->assertTrue($graph->hasProperty($term_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Term type found in RDF output (skos:Concept).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $term_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Term type found in RDF output (skos:Concept).'); // Term label. $expected_value = [ 'type' => 'literal', 'value' => $term->getName(), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($term_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Term label found in RDF output (rdfs:label).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $term_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Term label found in RDF output (rdfs:label).'); + // Term label. $expected_value = [ 'type' => 'literal', 'value' => $term->getName(), 'lang' => 'en', ]; - $this->assertTrue($graph->hasProperty($term_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Term label found in RDF output (skos:prefLabel).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $term_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Term label found in RDF output (skos:prefLabel).'); // @todo Add test for term description once it is a field: // https://www.drupal.org/node/569434. diff --git a/web/core/modules/rdf/tests/src/Functional/UserAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/UserAttributesTest.php index 4a38c57f9d076dce2fa03ce06eae1da15e5967db..ee5102aecb99e617822e7cfb6fe13c84d7df2094 100644 --- a/web/core/modules/rdf/tests/src/Functional/UserAttributesTest.php +++ b/web/core/modules/rdf/tests/src/Functional/UserAttributesTest.php @@ -4,6 +4,7 @@ use Drupal\Core\Url; use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; /** * Tests the RDFa markup of Users. @@ -12,6 +13,8 @@ */ class UserAttributesTest extends BrowserTestBase { + use RdfParsingTrait; + /** * Modules to enable. * @@ -24,6 +27,13 @@ class UserAttributesTest extends BrowserTestBase { */ protected $defaultTheme = 'stark'; + /** + * URI of the front page of the Drupal site. + * + * @var string + */ + protected $baseUri; + protected function setUp() { parent::setUp(); rdf_get_mapping('user', 'user') @@ -34,6 +44,9 @@ protected function setUp() { 'properties' => ['foaf:name'], ]) ->save(); + + // Prepares commonly used URIs. + $this->baseUri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); } /** @@ -61,13 +74,7 @@ public function testUserAttributesInMarkup() { /** @var \Drupal\user\UserInterface[] $authors */ foreach ($authors as $author) { $account_uri = $author->toUrl('canonical', ['absolute' => TRUE])->toString(); - - // Parses the user profile page where the default bundle mapping for user - // should be used. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $parser->parse($graph, $this->drupalGet('user/' . $author->id()), 'rdfa', $base_uri); + $this->drupalGet('user/' . $author->id()); // Inspects RDF graph output. // User type. @@ -75,24 +82,20 @@ public function testUserAttributesInMarkup() { 'type' => 'uri', 'value' => 'http://rdfs.org/sioc/ns#UserAccount', ]; - $this->assertTrue($graph->hasProperty($account_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'User type found in RDF output (sioc:UserAccount).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $account_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'User type found in RDF output (sioc:UserAccount).'); + // User name. $expected_value = [ 'type' => 'literal', 'value' => $author->getAccountName(), ]; - $this->assertTrue($graph->hasProperty($account_uri, 'http://xmlns.com/foaf/0.1/name', $expected_value), 'User name found in RDF output (foaf:name).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $account_uri, 'http://xmlns.com/foaf/0.1/name', $expected_value), 'User name found in RDF output (foaf:name).'); // User creates a node. $this->drupalLogin($author); $node = $this->drupalCreateNode(['type' => 'article', 'promote' => 1]); $this->drupalLogin($user1); - - // Parses the node created by the user. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $base_uri = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $parser->parse($graph, $this->drupalGet('node/' . $node->id()), 'rdfa', $base_uri); + $this->drupalGet('node/' . $node->id()); // Ensures the default bundle mapping for user is used on the Authored By // information on the node. @@ -100,14 +103,14 @@ public function testUserAttributesInMarkup() { 'type' => 'uri', 'value' => 'http://rdfs.org/sioc/ns#UserAccount', ]; - $this->assertTrue($graph->hasProperty($account_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'User type found in RDF output (sioc:UserAccount).'); + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $account_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'User type found in RDF output (sioc:UserAccount).'); + // User name. $expected_value = [ 'type' => 'literal', 'value' => $author->getAccountName(), ]; - $this->assertTrue($graph->hasProperty($account_uri, 'http://xmlns.com/foaf/0.1/name', $expected_value), 'User name found in RDF output (foaf:name).'); - + $this->assertTrue($this->hasRdfProperty($this->getSession()->getPage()->getContent(), $this->baseUri, $account_uri, 'http://xmlns.com/foaf/0.1/name', $expected_value), 'User name found in RDF output (foaf:name).'); } } diff --git a/web/core/modules/rdf/tests/src/Kernel/Field/FieldRdfaTestBase.php b/web/core/modules/rdf/tests/src/Kernel/Field/FieldRdfaTestBase.php index 2e30ccd0fc64c8008ca2154fab4ab9bb6860aeac..6535d0bd4aaaa43fd4c928c4226e49f50a6a43de 100644 --- a/web/core/modules/rdf/tests/src/Kernel/Field/FieldRdfaTestBase.php +++ b/web/core/modules/rdf/tests/src/Kernel/Field/FieldRdfaTestBase.php @@ -5,9 +5,12 @@ use Drupal\field\Entity\FieldConfig; use Drupal\Tests\field\Kernel\FieldKernelTestBase; use Drupal\field\Entity\FieldStorageConfig; +use Drupal\Tests\rdf\Traits\RdfParsingTrait; abstract class FieldRdfaTestBase extends FieldKernelTestBase { + use RdfParsingTrait; + /** * The machine name of the field type to test. * @@ -95,17 +98,8 @@ protected function assertFormatterRdfa($formatter, $property, $expected_rdf_valu ->getViewBuilder($this->entity->getEntityTypeId()) ->view($this->entity, 'default'); $output = \Drupal::service('renderer')->renderRoot($build); - $graph = new \EasyRdf_Graph($this->uri, $output, 'rdfa'); $this->setRawContent($output); - - // If verbose debugging is turned on, display the HTML and parsed RDF - // in the results. - if ($this->debug) { - print_r($output); - print_r($graph->toRdfPhp()); - } - - $this->assertTrue($graph->hasProperty($this->uri, $property, $expected_rdf_value), "Formatter {$formatter['type']} exposes data correctly for {$this->fieldType} fields."); + $this->assertTrue($this->hasRdfProperty($output, $this->uri, $this->uri, $property, $expected_rdf_value), "Formatter {$formatter['type']} exposes data correctly for {$this->fieldType} fields."); } /** diff --git a/web/core/modules/rdf/tests/src/Traits/EasyRdf_ParsedUri.php b/web/core/modules/rdf/tests/src/Traits/EasyRdf_ParsedUri.php new file mode 100644 index 0000000000000000000000000000000000000000..2c2aa7893e1a1c0883a1193bed594a2b7f30aa96 --- /dev/null +++ b/web/core/modules/rdf/tests/src/Traits/EasyRdf_ParsedUri.php @@ -0,0 +1,352 @@ +<?php +// @codingStandardsIgnoreFile + +namespace Drupal\Tests\rdf\Traits; + +/** + * This is copy of \EasyRdf_ParsedUri from the easyrdf/easyrdf library. + * + * It fixes a PHP 7.4 deprecation in \EasyRdf_ParsedUri::normalise(). + * + * @todo https://www.drupal.org/project/drupal/issues/3110972 Remove this work + * around. + */ + +/** + * EasyRdf + * + * LICENSE + * + * Copyright (c) 2009-2013 Nicholas J Humfrey. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author 'Nicholas J Humfrey" may be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package EasyRdf + * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey + * @license http://www.opensource.org/licenses/bsd-license.php + */ + + +/** + * A RFC3986 compliant URI parser + * + * @package EasyRdf + * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://www.ietf.org/rfc/rfc3986.txt + */ +class EasyRdf_ParsedUri +{ + // For all URIs: + private $scheme = null; + private $fragment = null; + + // For hierarchical URIs: + private $authority = null; + private $path = null; + private $query = null; + + const URI_REGEX = "|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|"; + + /** Constructor for creating a new parsed URI + * + * The $uri parameter can either be a string or an + * associative array with the following keys: + * scheme, authority, path, query, fragment + * + * @param mixed $uri The URI as a string or an array + * @return object EasyRdf_ParsedUri + */ + public function __construct($uri = null) + { + if (is_string($uri)) { + if (preg_match(self::URI_REGEX, $uri, $matches)) { + if (!empty($matches[1])) { + $this->scheme = isset($matches[2]) ? $matches[2] : ''; + } + if (!empty($matches[3])) { + $this->authority = isset($matches[4]) ? $matches[4] : ''; + } + $this->path = isset($matches[5]) ? $matches[5] : ''; + if (!empty($matches[6])) { + $this->query = isset($matches[7]) ? $matches[7] : ''; + } + if (!empty($matches[8])) { + $this->fragment = isset($matches[9]) ? $matches[9] : ''; + } + } + } elseif (is_array($uri)) { + $this->scheme = isset($uri['scheme']) ? $uri['scheme'] : null; + $this->authority = isset($uri['authority']) ? $uri['authority'] : null; + $this->path = isset($uri['path']) ? $uri['path'] : null; + $this->query = isset($uri['query']) ? $uri['query'] : null; + $this->fragment = isset($uri['fragment']) ? $uri['fragment'] : null; + } + } + + + /** Returns true if this is an absolute (complete) URI + * @return boolean + */ + public function isAbsolute() + { + return $this->scheme !== null; + } + + /** Returns true if this is an relative (partial) URI + * @return boolean + */ + public function isRelative() + { + return $this->scheme === null; + } + + /** Returns the scheme of the URI (e.g. http) + * @return string + */ + public function getScheme() + { + return $this->scheme; + } + + /** Sets the scheme of the URI (e.g. http) + * @param string $scheme The new value for the scheme of the URI + */ + public function setScheme($scheme) + { + $this->scheme = $scheme; + } + + /** Returns the authority of the URI (e.g. www.example.com:8080) + * @return string + */ + public function getAuthority() + { + return $this->authority; + } + + /** Sets the authority of the URI (e.g. www.example.com:8080) + * @param string $authority The new value for the authority component of the URI + */ + public function setAuthority($authority) + { + $this->authority = $authority; + } + + /** Returns the path of the URI (e.g. /foo/bar) + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** Set the path of the URI (e.g. /foo/bar) + * @param string $path The new value for the path component of the URI + */ + public function setPath($path) + { + $this->path = $path; + } + + /** Returns the query string part of the URI (e.g. foo=bar) + * @return string + */ + public function getQuery() + { + return $this->query; + } + + /** Set the query string of the URI (e.g. foo=bar) + * @param string $query The new value for the query string component of the URI + */ + public function setQuery($query) + { + $this->query = $query; + } + + /** Returns the fragment part of the URI (i.e. after the #) + * @return string + */ + public function getFragment() + { + return $this->fragment; + } + + /** Set the fragment of the URI (i.e. after the #) + * @param string $fragment The new value for the fragment component of the URI + */ + public function setFragment($fragment) + { + $this->fragment = $fragment; + } + + + /** + * Normalises the path of this URI if it has one. Normalising a path means + * that any unnecessary '.' and '..' segments are removed. For example, the + * URI http://example.com/a/b/../c/./d would be normalised to + * http://example.com/a/c/d + * + * @return object EasyRdf_ParsedUri + */ + public function normalise() + { + if (empty($this->path)) { + return $this; + } + + // Remove ./ from the start + if (substr($this->path, 0, 2) == './') { + // Remove both characters + $this->path = substr($this->path, 2); + } + + // Remove /. from the end + if (substr($this->path, -2) == '/.') { + // Remove only the last dot, not the slash! + $this->path = substr($this->path, 0, -1); + } + + if (substr($this->path, -3) == '/..') { + $this->path .= '/'; + } + + // Split the path into its segments + $segments = explode('/', $this->path); + $newSegments = array(); + + // Remove all unnecessary '.' and '..' segments + foreach ($segments as $segment) { + if ($segment == '..') { + // Remove the previous part of the path + $count = count($newSegments); + if ($count > 0 && $newSegments[$count-1]) { + array_pop($newSegments); + } + } elseif ($segment == '.') { + // Ignore + continue; + } else { + array_push($newSegments, $segment); + } + } + + // Construct the new normalised path + $this->path = implode('/', $newSegments); + + // Allow easy chaining of methods + return $this; + } + + /** + * Resolves a relative URI using this URI as the base URI. + */ + public function resolve($relUri) + { + // If it is a string, then convert it to a parsed object + if (is_string($relUri)) { + $relUri = new EasyRdf_ParsedUri($relUri); + } + + // This code is based on the pseudocode in section 5.2.2 of RFC3986 + $target = new EasyRdf_ParsedUri(); + if ($relUri->scheme) { + $target->scheme = $relUri->scheme; + $target->authority = $relUri->authority; + $target->path = $relUri->path; + $target->query = $relUri->query; + } else { + if ($relUri->authority) { + $target->authority = $relUri->authority; + $target->path = $relUri->path; + $target->query = $relUri->query; + } else { + if (empty($relUri->path)) { + $target->path = $this->path; + if ($relUri->query) { + $target->query = $relUri->query; + } else { + $target->query = $this->query; + } + } else { + if (substr($relUri->path, 0, 1) == '/') { + $target->path = $relUri->path; + } else { + $path = $this->path; + $lastSlash = strrpos($path, '/'); + if ($lastSlash !== false) { + $path = substr($path, 0, $lastSlash + 1); + } else { + $path = '/'; + } + + $target->path .= $path . $relUri->path; + } + $target->query = $relUri->query; + } + $target->authority = $this->authority; + } + $target->scheme = $this->scheme; + } + + $target->fragment = $relUri->fragment; + + $target->normalise(); + + return $target; + } + + /** Convert the parsed URI back into a string + * + * @return string The URI as a string + */ + public function toString() + { + $str = ''; + if ($this->scheme !== null) { + $str .= $this->scheme . ':'; + } + if ($this->authority !== null) { + $str .= '//' . $this->authority; + } + $str .= $this->path; + if ($this->query !== null) { + $str .= '?' . $this->query; + } + if ($this->fragment !== null) { + $str .= '#' . $this->fragment; + } + return $str; + } + + /** Magic method to convert the URI, when casted, back to a string + * + * @return string The URI as a string + */ + public function __toString() + { + return $this->toString(); + } +} diff --git a/web/core/modules/rdf/tests/src/Traits/RdfParsingTrait.php b/web/core/modules/rdf/tests/src/Traits/RdfParsingTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..2e1d80204a16e15ee2be0c4e600e77debfaac5a1 --- /dev/null +++ b/web/core/modules/rdf/tests/src/Traits/RdfParsingTrait.php @@ -0,0 +1,146 @@ +<?php + +namespace Drupal\Tests\rdf\Traits; + +use Drupal\Core\Url; + +/** + * Override \EasyRdf_ParsedUri for PHP 7.4 compatibilty. + * + * @todo https://www.drupal.org/project/drupal/issues/3110972 Remove this work + * around. + */ +class_alias('\Drupal\Tests\rdf\Traits\EasyRdf_ParsedUri', '\EasyRdf_ParsedUri'); + +/** + * Defines a trait for parsing RDF properties from HTML. + */ +trait RdfParsingTrait { + + /** + * Checks if a html document contains a resource with a given property value. + * + * @param string $html + * The HTML to parse. + * @param string $base_uri + * The base URI for the html being parsed. + * @param string $resource + * The URI of the resource which should have the given property. + * @param string $property + * The property being tested. + * @param array $value + * The expected value. This should include the following keys: + * - type: one of literal, uri and bnode + * - value: the expected value + * - datatype: the expected datatype in URI format - e.g. + * - http://www.w3.org/2001/XMLSchema#integer + * - http://www.w3.org/2001/XMLSchema#dateTime + * - lang: language code of the property. + * + * @return bool + * TRUE if the property exists with the given value. + */ + protected function hasRdfProperty($html, $base_uri, $resource, $property, array $value) { + $parser = new \EasyRdf_Parser_Rdfa(); + $graph = new \EasyRdf_Graph(); + $parser->parse($graph, $html, 'rdfa', $base_uri); + + return $graph->hasProperty($resource, $property, $value); + } + + /** + * Checks if a html document contains a resource with a given property value. + * + * @param string $html + * The HTML to parse. + * @param string $base_uri + * The base URI for the html being parsed. + * @param string $resource + * The URI of the resource which should have the given property. + * @param string $parent_property + * The parent property being tested. + * @param string $child_property + * The child property being tested. + * @param array $value + * The expected value. This should include the following keys: + * - type: one of literal, uri and bnode + * - value: the expected value + * - datatype: the expected datatype in URI format - e.g. + * - http://www.w3.org/2001/XMLSchema#integer + * - http://www.w3.org/2001/XMLSchema#dateTime + * - lang: language code of the property. + * + * @return bool + * TRUE if the property exists with the given value. + */ + protected function hasRdfChildProperty($html, $base_uri, $resource, $parent_property, string $child_property, array $value) { + $parser = new \EasyRdf_Parser_Rdfa(); + $graph = new \EasyRdf_Graph(); + $parser->parse($graph, $html, 'rdfa', $base_uri); + $node = $graph->get($resource, $parent_property); + return $graph->hasProperty($node, $child_property, $value); + } + + /** + * Counts the number of resources of the provided type. + * + * @param \Drupal\Core\Url $url + * URL of the document. + * @param string $base_uri + * The base URI for the html being parsed. + * @param string $type + * Type of resource to count. + * + * @return int + * The number of resources of the provided type. + */ + protected function getElementByRdfTypeCount(Url $url, $base_uri, $type) { + $parser = new \EasyRdf_Parser_Rdfa(); + $graph = new \EasyRdf_Graph(); + $parser->parse($graph, $this->drupalGet($url), 'rdfa', $base_uri); + return count($graph->allOfType($type)); + } + + /** + * Gets type of RDF Element. + * + * @param \Drupal\Core\Url $url + * URL of the document. + * @param string $base_uri + * The base URI for the html being parsed. + * @param string $resource_uri + * The URI of the resource from where to get element. + * + * @return string|null + * The type of resource or NULL if the resource has no type. + */ + protected function getElementRdfType(Url $url, $base_uri, $resource_uri) { + $parser = new \EasyRdf_Parser_Rdfa(); + $graph = new \EasyRdf_Graph(); + $parser->parse($graph, $this->drupalGet($url), 'rdfa', $base_uri); + return $graph->type($resource_uri); + } + + /** + * Checks if RDF Node property is blank. + * + * @param string $html + * The HTML to parse. + * @param string $base_uri + * The base URI for the html being parsed. + * @param string $resource_uri + * The URI of the resource which should have the given property. + * @param string $property + * The property being tested. + * + * @return bool + * TRUE if the given property is blank. + */ + protected function rdfElementIsBlankNode($html, $base_uri, $resource_uri, $property) { + $parser = new \EasyRdf_Parser_Rdfa(); + $graph = new \EasyRdf_Graph(); + $parser->parse($graph, $html, 'rdfa', $base_uri); + return $graph->get($resource_uri, $property)->isBnode(); + } + +} diff --git a/web/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php b/web/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php index d8ba6f018f01729913f89cfc4d7fe26fa398a508..57ab6811492ce2a8b830f58c1053cf0006aaad93 100644 --- a/web/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php +++ b/web/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php @@ -77,6 +77,9 @@ public function testCalculateDependencies() { $target_entity_type->expects($this->any()) ->method('getBundleEntityType') ->will($this->returnValue(NULL)); + $target_entity_type->expects($this->any()) + ->method('getBundleConfigDependency') + ->will($this->returnValue(['type' => 'module', 'name' => 'test_module'])); $this->entityTypeManager->expects($this->at(0)) ->method('getDefinition') @@ -86,7 +89,10 @@ public function testCalculateDependencies() { ->method('getDefinition') ->with($this->entityTypeId) ->will($this->returnValue($this->entityType)); - + $this->entityTypeManager->expects($this->at(2)) + ->method('getDefinition') + ->with($this->entityTypeId) + ->will($this->returnValue($this->entityType)); $entity = new RdfMapping($values, $this->entityTypeId); $dependencies = $entity->calculateDependencies()->getDependencies(); $this->assertArrayNotHasKey('config', $dependencies); diff --git a/web/core/modules/system/system.module b/web/core/modules/system/system.module index 0baa96a6b35c374692851ffc6691f2e3f16858f9..039d3725bacae9fb1c1841673aaee4a00bcf3c6a 100644 --- a/web/core/modules/system/system.module +++ b/web/core/modules/system/system.module @@ -7,6 +7,7 @@ use Drupal\Component\FileSecurity\FileSecurity; use Drupal\Component\Gettext\PoItem; +use Drupal\Component\Render\FormattableMarkup; use Drupal\Component\Render\PlainTextOutput; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Asset\AttachedAssetsInterface; @@ -15,6 +16,7 @@ use Drupal\Core\Database\Query\AlterableInterface; use Drupal\Core\Extension\Dependency; use Drupal\Core\Extension\Extension; +use Drupal\Core\Entity\ContentEntityTypeInterface; use Drupal\Core\Entity\Display\EntityFormDisplayInterface; use Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget; use Drupal\Core\File\Exception\FileException; @@ -27,7 +29,9 @@ use Drupal\Core\Queue\QueueGarbageCollectionInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Routing\StackedRouteMatchInterface; +use Drupal\Core\Site\Settings; use Drupal\Core\Url; +use Drupal\path_alias\PathAliasInterface; use Drupal\user\UserInterface; use GuzzleHttp\Exception\RequestException; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -80,22 +84,14 @@ /** * Return only visible regions. * - * @deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. - * Use \Drupal\block\BlockRepositoryInterface::REGIONS_VISIBLE instead. - * * @see system_region_list() - * @see https://www.drupal.org/node/2831620 */ const REGIONS_VISIBLE = 'visible'; /** * Return all regions. * - * @deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. - * Use \Drupal\block\BlockRepositoryInterface::REGIONS_ALL instead. - * * @see system_region_list() - * @see https://www.drupal.org/node/2831620 */ const REGIONS_ALL = 'all'; @@ -1460,10 +1456,8 @@ function system_modules_uninstalled($modules) { $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); foreach ($entity_definition_update_manager->getEntityTypes() as $entity_type) { - $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); - if ($revision_metadata_keys && array_key_exists('workspace', $revision_metadata_keys)) { - unset($revision_metadata_keys['workspace']); - $entity_type->set('revision_metadata_keys', $revision_metadata_keys); + if ($entity_type instanceof ContentEntityTypeInterface && $entity_type->hasRevisionMetadataKey('workspace')) { + $entity_type->setRevisionMetadataKey('workspace', NULL); $entity_definition_update_manager->updateEntityType($entity_type); } } @@ -1497,3 +1491,26 @@ function system_entity_form_display_presave(EntityFormDisplayInterface $display) } } } + +/** + * Implements hook_ENTITY_TYPE_presave(). + */ +function system_path_alias_presave(PathAliasInterface $path_alias) { + // Prevent path aliases from being saved if the "url_alias" migration was not + // performed yet. This avoids the risk of introducing duplicate aliases or get + // the new path alias schema in an inconsistent state. + if (Settings::get('system.path_alias_schema_check', TRUE) && drupal_get_installed_schema_version('system') < 8804) { + /** @var \Drupal\system\Access\DbUpdateAccessCheck $db_update_access */ + $db_update_access = \Drupal::service('access_check.db_update'); + if ($db_update_access->access(\Drupal::currentUser())->isAllowed()) { + $args = [':url' => Url::fromUri('base://update.php')->toString()]; + \Drupal::messenger()->addError(t('Path aliases cannot be saved until <a href=":url">database updates</a> are performed.', $args)); + } + else { + \Drupal::messenger()->addError(t('Path aliases cannot be saved until <em>database updates</em> are performed.')); + } + $message = 'Path alias "@alias" ("@path") could not be saved because the "system_update_8804" database update was not applied yet.'; + $args = ['@path' => $path_alias->getPath(), '@alias' => $path_alias->getAlias()]; + throw new \LogicException(new FormattableMarkup($message, $args)); + } +} diff --git a/web/core/modules/system/templates/menu-local-tasks.html.twig b/web/core/modules/system/templates/menu-local-tasks.html.twig index 245d73c28b4deb5fd00a25ef3a4c3c6641eed53c..65affc1223ce0213f3092fb56f7ebab637178729 100644 --- a/web/core/modules/system/templates/menu-local-tasks.html.twig +++ b/web/core/modules/system/templates/menu-local-tasks.html.twig @@ -9,7 +9,7 @@ * * Each item in these variables (primary and secondary) can be individually * themed in menu-local-task.html.twig. - + * * @ingroup themeable */ #} diff --git a/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-postupdate-enabled.php b/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-postupdate-enabled.php deleted file mode 100644 index a6243a138ca5f571800c5c00f3aa895671179237..0000000000000000000000000000000000000000 --- a/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-postupdate-enabled.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/** - * @file - * Partial database to mimic the installation of the update_test_post_update - * module. - */ - -use Drupal\Core\Database\Database; - -$connection = Database::getConnection(); - -// Set the schema version. -$connection->merge('key_value') - ->condition('collection', 'system.schema') - ->condition('name', 'update_test_postupdate') - ->fields([ - 'collection' => 'system.schema', - 'name' => 'update_test_postupdate', - 'value' => 'i:8000;', - ]) - ->execute(); - -// Update core.extension. -$extensions = $connection->select('config') - ->fields('config', ['data']) - ->condition('collection', '') - ->condition('name', 'core.extension') - ->execute() - ->fetchField(); -$extensions = unserialize($extensions); -$extensions['module']['update_test_postupdate'] = 8000; -$connection->update('config') - ->fields([ - 'data' => serialize($extensions), - ]) - ->condition('collection', '') - ->condition('name', 'core.extension') - ->execute(); diff --git a/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-postupdate-failing-enabled.php b/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-postupdate-failing-enabled.php deleted file mode 100644 index ab37f83af70662ebf28099087df60f2340d84518..0000000000000000000000000000000000000000 --- a/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-postupdate-failing-enabled.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -/** - * @file - * Partial database to mimic the installation of the update_test_failing module. - */ - -use Drupal\Core\Database\Database; - -$connection = Database::getConnection(); - -// Set the schema version. -$connection->merge('key_value') - ->condition('collection', 'system.schema') - ->condition('name', 'update_test_failing') - ->fields([ - 'collection' => 'system.schema', - 'name' => 'update_test_failing', - 'value' => 'i:8000;', - ]) - ->execute(); - -// Update core.extension. -$extensions = $connection->select('config') - ->fields('config', ['data']) - ->condition('collection', '') - ->condition('name', 'core.extension') - ->execute() - ->fetchField(); -$extensions = unserialize($extensions); -$extensions['module']['update_test_failing'] = 8000; -$connection->update('config') - ->fields([ - 'data' => serialize($extensions), - ]) - ->condition('collection', '') - ->condition('name', 'core.extension') - ->execute(); diff --git a/web/core/modules/system/tests/modules/entity_test_revlog/entity_test_revlog.install b/web/core/modules/system/tests/modules/entity_test_revlog/entity_test_revlog.install new file mode 100644 index 0000000000000000000000000000000000000000..f584611bb85447fb4d4bdffc6f016f8446391b34 --- /dev/null +++ b/web/core/modules/system/tests/modules/entity_test_revlog/entity_test_revlog.install @@ -0,0 +1,14 @@ +<?php + +/** + * @file + * Install, update and uninstall functions for the entity_test_revlog module. + */ + +/** + * Install the 'entity_test_mul_revlog_pub' entity type. + */ +function entity_test_revlog_update_8801() { + $entity_type = \Drupal::entityTypeManager()->getDefinition('entity_test_mul_revlog_pub'); + \Drupal::entityDefinitionUpdateManager()->installEntityType($entity_type); +} diff --git a/web/core/modules/system/tests/modules/entity_test_revlog/src/Entity/EntityTestMulWithRevisionLogPub.php b/web/core/modules/system/tests/modules/entity_test_revlog/src/Entity/EntityTestMulWithRevisionLogPub.php new file mode 100644 index 0000000000000000000000000000000000000000..bf1b13476ed407af1e4d878a702e4b4af324f069 --- /dev/null +++ b/web/core/modules/system/tests/modules/entity_test_revlog/src/Entity/EntityTestMulWithRevisionLogPub.php @@ -0,0 +1,45 @@ +<?php + +namespace Drupal\entity_test_revlog\Entity; + +use Drupal\Core\Entity\EntityPublishedInterface; +use Drupal\Core\Entity\EntityPublishedTrait; +use Drupal\Core\Entity\EntityTypeInterface; + +/** + * Defines the test entity class. + * + * This entity type does not define revision_metadata_keys on purpose to test + * the BC layer. + * + * @ContentEntityType( + * id = "entity_test_mul_revlog_pub", + * label = @Translation("Test entity - data table, revisions log, publishing status"), + * base_table = "entity_test_mul_revlog_pub", + * data_table = "entity_test_mul_revlog_pub_field_data", + * revision_table = "entity_test_mul_revlog_pub_revision", + * revision_data_table = "entity_test_mul_revlog_pub_field_revision", + * translatable = TRUE, + * entity_keys = { + * "id" = "id", + * "uuid" = "uuid", + * "revision" = "revision_id", + * "bundle" = "type", + * "label" = "name", + * "langcode" = "langcode", + * "published" = "status", + * }, + * ) + */ +class EntityTestMulWithRevisionLogPub extends EntityTestWithRevisionLog implements EntityPublishedInterface { + + use EntityPublishedTrait; + + /** + * {@inheritdoc} + */ + public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { + return parent::baseFieldDefinitions($entity_type) + EntityPublishedTrait::publishedBaseFieldDefinitions($entity_type); + } + +} diff --git a/web/core/modules/system/tests/modules/system_test/system_test.module b/web/core/modules/system/tests/modules/system_test/system_test.module index 7f0ba88cd037144657d3a4952fd3e2a93c5009e3..d98f32ca3004f95d9ae087506c3ad09773494e11 100644 --- a/web/core/modules/system/tests/modules/system_test/system_test.module +++ b/web/core/modules/system/tests/modules/system_test/system_test.module @@ -5,8 +5,10 @@ * Test module. */ +use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Extension\Extension; use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\path_alias\Entity\PathAlias; /** * Implements hook_help(). @@ -30,6 +32,22 @@ function system_test_modules_installed($modules) { \Drupal::messenger()->addStatus(t('hook_modules_installed fired for @module', ['@module' => $module])); } } + if (\Drupal::state()->get('system_test.path_alias_save') && in_array('path_alias', $modules)) { + try { + $path_alias = PathAlias::create([ + 'path' => '/user', + 'alias' => '/test', + ]); + $path_alias->save(); + } + catch (EntityStorageException $e) { + $root_exception = $e->getPrevious() ?: $e; + \Drupal::state()->set('system_test.path_alias_save_exception_thrown', [ + 'class' => get_class($root_exception), + 'message' => $root_exception->getMessage(), + ]); + } + } } /** diff --git a/web/core/modules/system/tests/modules/update_test_no_preexisting/update_test_no_preexisting.info.yml b/web/core/modules/system/tests/modules/update_test_no_preexisting/update_test_no_preexisting.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..303d7cde540f9cfe8482c9265a80b269cd05952f --- /dev/null +++ b/web/core/modules/system/tests/modules/update_test_no_preexisting/update_test_no_preexisting.info.yml @@ -0,0 +1,5 @@ +name: 'Update test' +type: module +description: 'Support module for update testing.' +package: Testing +version: VERSION diff --git a/web/core/modules/system/tests/modules/update_test_no_preexisting/update_test_no_preexisting.install b/web/core/modules/system/tests/modules/update_test_no_preexisting/update_test_no_preexisting.install new file mode 100644 index 0000000000000000000000000000000000000000..7344bc0631032469be162c550737ed5fd665b21e --- /dev/null +++ b/web/core/modules/system/tests/modules/update_test_no_preexisting/update_test_no_preexisting.install @@ -0,0 +1,13 @@ +<?php + +/** + * @file + * Install, update and uninstall functions for the update_test_no_preexisting module. + */ + +/** + * Dummy update_test_no_preexisting update 8001. + */ +function update_test_no_preexisting_update_8001() { + \Drupal::state()->set('update_test_no_preexisting_update_8001', TRUE); +} diff --git a/web/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php b/web/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php index 1f4cff34436c6310139de45a6863de911db4dbd4..7d0b2ecce36b4b48af018ff29219ed77fa069d20 100644 --- a/web/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php +++ b/web/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php @@ -318,12 +318,18 @@ protected function removeBaseFieldIndex() { * * @param string $type * (optional) The field type for the new field. Defaults to 'string'. + * @param bool $revisionable + * (optional) Whether the field should be revisionable. Defaults to FALSE. + * @param bool $translatable + * (optional) Whether the field should be translatable. Defaults to FALSE. */ - protected function addBundleField($type = 'string') { + protected function addBundleField($type = 'string', $revisionable = FALSE, $translatable = FALSE) { $definitions['new_bundle_field'] = FieldStorageDefinition::create($type) ->setName('new_bundle_field') ->setLabel(t('A new bundle field')) - ->setTargetEntityTypeId('entity_test_update'); + ->setTargetEntityTypeId('entity_test_update') + ->setRevisionable($revisionable) + ->setTranslatable($translatable); $this->state->set('entity_test_update.additional_field_storage_definitions', $definitions); $this->state->set('entity_test_update.additional_bundle_field_definitions.test_bundle', $definitions); } diff --git a/web/core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php b/web/core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php index 4333c1a30e23318aa5aacbde2b947487d0d6ccf1..12c5dd83ce12adabe212c09c7b8cf738a31f87aa 100644 --- a/web/core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php +++ b/web/core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php @@ -202,6 +202,46 @@ public function testAddingRequiredRevisionMetadataKeys() { 'revision_log_message' => 'revision_log_message', ]; $this->assertEquals($revision_metadata_keys, $entity_type->getRevisionMetadataKeys(TRUE)); + + // Ensure that the BC layer will break if a new revision metadata key is + // only added to the revision_metadata_keys property. + $definition = [ + 'id' => 'entity_test_mul_revlog', + ]; + $entity_type = new ContentEntityType($definition); + $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); + $revision_metadata_keys['new_revision_metadata_key'] = 'new_revision_metadata_key'; + $entity_type->set('revision_metadata_keys', $revision_metadata_keys); + $expected_revision_metadata_keys = [ + 'new_revision_metadata_key' => 'new_revision_metadata_key', + 'revision_default' => 'revision_default', + ]; + $this->assertEquals($expected_revision_metadata_keys, $entity_type->getRevisionMetadataKeys(TRUE)); + + // Ensure that the BC layer will be triggered if a new revision metadata key + // is added to both properties revision_metadata_keys and + // requiredRevisionMetadataKeys. + $definition = [ + 'id' => 'entity_test_mul_revlog', + ]; + $entity_type = new ContentEntityType($definition); + + $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); + $revision_metadata_keys['new_revision_metadata_key'] = 'new_revision_metadata_key'; + $entity_type->set('revision_metadata_keys', $revision_metadata_keys); + + $required_revision_metadata_keys = $entity_type->get('requiredRevisionMetadataKeys'); + $required_revision_metadata_keys['new_revision_metadata_key'] = 'new_revision_metadata_key'; + $entity_type->set('requiredRevisionMetadataKeys', $required_revision_metadata_keys); + + $expected_revision_metadata_keys = [ + 'new_revision_metadata_key' => 'new_revision_metadata_key', + 'revision_default' => 'revision_default', + 'revision_user' => 'revision_user', + 'revision_created' => 'revision_created', + 'revision_log_message' => 'revision_log_message', + ]; + $this->assertEquals($expected_revision_metadata_keys, $entity_type->getRevisionMetadataKeys(TRUE)); } /** diff --git a/web/core/modules/system/tests/src/Functional/Update/BrokenCacheUpdateTest.php b/web/core/modules/system/tests/src/Functional/Update/BrokenCacheUpdateTest.php index 300676a2a38f1912cf4ac319a9746986c9f31923..d66c31029c7d9142501c7089434b1fc5d1897bfe 100644 --- a/web/core/modules/system/tests/src/Functional/Update/BrokenCacheUpdateTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/BrokenCacheUpdateTest.php @@ -3,15 +3,16 @@ namespace Drupal\Tests\system\Functional\Update; use Drupal\Core\Database\Database; -use Drupal\FunctionalTests\Update\UpdatePathTestBase; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; /** * Ensures that a broken or out-of-date element info cache is not used. * * @group Update - * @group legacy */ -class BrokenCacheUpdateTest extends UpdatePathTestBase { +class BrokenCacheUpdateTest extends BrowserTestBase { + use UpdatePathTestTrait; /** * {@inheritdoc} @@ -21,10 +22,9 @@ class BrokenCacheUpdateTest extends UpdatePathTestBase { /** * {@inheritdoc} */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.6.0.bare.testing.php.gz', - ]; + protected function setUp() { + parent::setUp(); + $this->ensureUpdatesToRun(); } /** @@ -40,7 +40,8 @@ public function testUpdate() { ->execute(); // Create broken element info caches entries. - $insert = $connection->insert('cache_discovery'); + $insert = $connection->upsert('cache_discovery'); + $insert->key('cid'); $fields = [ 'cid' => 'element_info', 'data' => 'BROKEN', diff --git a/web/core/modules/system/tests/src/Functional/Update/NoPreExistingSchemaUpdateTest.php b/web/core/modules/system/tests/src/Functional/Update/NoPreExistingSchemaUpdateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5a723d69dd2c4632ae6d07de05cd1759d76d988b --- /dev/null +++ b/web/core/modules/system/tests/src/Functional/Update/NoPreExistingSchemaUpdateTest.php @@ -0,0 +1,55 @@ +<?php + +namespace Drupal\Tests\system\Functional\Update; + +use Drupal\Core\Database\Database; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; + +/** + * Tries to update a module which has no pre-existing schema. + * + * @group Update + * @group legacy + */ +class NoPreExistingSchemaUpdateTest extends BrowserTestBase { + use UpdatePathTestTrait; + + protected function setUp() { + parent::setUp(); + $connection = Database::getConnection(); + + // Enable the update_test_no_preexisting module by altering the + // core.extension configuration directly, so that the schema version + // information is missing. + $extensions = $connection->select('config') + ->fields('config', ['data']) + ->condition('name', 'core.extension') + ->execute() + ->fetchField(); + $extensions = unserialize($extensions); + $connection->update('config') + ->fields([ + 'data' => serialize(array_merge_recursive($extensions, ['module' => ['update_test_no_preexisting' => 0]])), + ]) + ->condition('name', 'core.extension') + ->execute(); + } + + /** + * Test the system module updates with no dependencies installed. + */ + public function testNoPreExistingSchema() { + $schema = \Drupal::keyValue('system.schema')->getAll(); + $this->assertArrayNotHasKey('update_test_no_preexisting', $schema); + $this->assertFalse(\Drupal::state()->get('update_test_no_preexisting_update_8001', FALSE)); + + $this->runUpdates(); + + $schema = \Drupal::keyValue('system.schema')->getAll(); + $this->assertArrayHasKey('update_test_no_preexisting', $schema); + $this->assertEquals('8001', $schema['update_test_no_preexisting']); + $this->assertTrue(\Drupal::state()->get('update_test_no_preexisting_update_8001', FALSE)); + } + +} diff --git a/web/core/modules/system/tests/src/Functional/Update/PathAliasToEntityUpdateTest.php b/web/core/modules/system/tests/src/Functional/Update/PathAliasToEntityUpdateTest.php index 7a860906e93848b5b6580a1e84fbbf57d3a22eb3..5842f992bd920a574ca00bce51582490681184c8 100644 --- a/web/core/modules/system/tests/src/Functional/Update/PathAliasToEntityUpdateTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/PathAliasToEntityUpdateTest.php @@ -31,10 +31,15 @@ protected function setDatabaseDumpFiles() { /** * Tests the conversion of path aliases to entities. * + * @param bool $perform_check + * Whether a schema check should be performed on "path_alias" save. + * * @see system_update_8803() * @see system_update_8804() + * + * @dataProvider providerConversionToEntities */ - public function testConversionToEntities() { + public function testConversionToEntities($perform_check) { $database = \Drupal::database(); $schema = $database->schema(); $this->assertTrue($schema->tableExists('url_alias')); @@ -56,8 +61,54 @@ public function testConversionToEntities() { $url_alias_count = 5; $this->assertCount($url_alias_count, $original_records); + // Enable or disable the "path_alias" save schema check. + drupal_rewrite_settings([ + 'settings' => [ + 'system.path_alias_schema_check' => (object) [ + 'value' => $perform_check, + 'required' => TRUE, + ], + ], + ]); + + // Enable our test module in a way that does not affect the subsequent + // updates run (::rebuildAll() would). + /** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */ + $module_installer = $this->container->get('module_installer'); + $module_installer->install(['system_test']); + $this->container = \Drupal::getContainer(); + + // Trigger a path alias save during the update. + /** @var \Drupal\Core\State\StateInterface $state */ + $state = $this->container->get('state'); + $state->set('system_test.path_alias_save', TRUE); + + // If the schema check is not performed, the path alias will be saved and we + // will get an integrity exception, so no point in checking for failed + // updates. If the schema check is performed, a logic exception will be + // thrown, which will be caught in our test code, so the update is expected + // to complete successfully. In this case we do want to check for failed + // updates. + $this->checkFailedUpdates = $perform_check; + $this->runUpdates(); + if (!$perform_check) { + $error_message = $this->cssSelect('.failure')[0]->getText(); + // In order to test against multiple database drivers assert that the + // expected exception occurs and the error contains the expected table + // name. The specifics of the error depend on the database driver. + $this->assertContains("Failed: Drupal\Core\Database\IntegrityConstraintViolationException", $error_message); + $this->assertContains("path_alias", $error_message); + // Nothing else to assert. + return; + } + + // Check that an exception was thrown on "path_alias" save. + $exception_info = $state->get('system_test.path_alias_save_exception_thrown'); + $this->assertIdentical($exception_info['class'], \LogicException::class); + $this->assertIdentical($exception_info['message'], 'Path alias "/test" ("/user") could not be saved because the "system_update_8804" database update was not applied yet.'); + /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */ $module_handler = $this->container->get('module_handler'); $this->assertTrue($module_handler->moduleExists('path_alias')); @@ -128,4 +179,14 @@ public function testConversionToEntities() { $this->assertEquals($original_records, $revision_table_records); } + /** + * Data provider for ::testConversionToEntities. + */ + public function providerConversionToEntities() { + return [ + 'Perform check on "path_alias" save' => [TRUE], + 'Do not perform check on "path_alias" save' => [FALSE], + ]; + } + } diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php index 8f10ef76ce711e993c414e3cc4f8a419f4374ed2..3a673962d6dca2052ce3f0e1ce703a456c37e59d 100644 --- a/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php @@ -2,31 +2,23 @@ namespace Drupal\Tests\system\Functional\Update; -use Drupal\FunctionalTests\Update\UpdatePathTestBase; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; /** * Modules can introduce new dependencies and enable them in update hooks. * * @group system - * @group legacy */ -class UpdatePathNewDependencyTest extends UpdatePathTestBase { +class UpdatePathNewDependencyTest extends BrowserTestBase { + use UpdatePathTestTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; - /** - * {@inheritdoc} - */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.6.0.bare.testing.php.gz', - ]; - } - /** * Test that a module can add services that depend on new modules. */ diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php index 473c392aa03e03bc491fb02daf6807212963ead3..28f727a7e6fbf018b8b213996ce52b98244facba 100644 --- a/web/core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php @@ -2,7 +2,8 @@ namespace Drupal\Tests\system\Functional\Update; -use Drupal\FunctionalTests\Update\UpdatePathTestBase; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; /** * Tests the presence of JavaScript at update.php. @@ -10,7 +11,8 @@ * @group Update * @group legacy */ -class UpdatePathTestJavaScriptTest extends UpdatePathTestBase { +class UpdatePathTestJavaScriptTest extends BrowserTestBase { + use UpdatePathTestTrait; /** * {@inheritdoc} @@ -20,10 +22,9 @@ class UpdatePathTestJavaScriptTest extends UpdatePathTestBase { /** * {@inheritdoc} */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz', - ]; + protected function setUp() { + parent::setUp(); + $this->ensureUpdatesToRun(); } /** diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php index 6be4f333cb4a6fcd57ff662cf90ab452b7de34cd..2f3287a3b3ce24ad294034382ee0481fe4cf472b 100644 --- a/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php @@ -2,13 +2,15 @@ namespace Drupal\Tests\system\Functional\Update; +use Drupal\FunctionalTests\Update\UpdatePathTestBase; + /** * Runs UpdatePathWithBrokenRoutingTest with a dump filled with content. * * @group Update * @group legacy */ -class UpdatePathWithBrokenRoutingFilledTest extends UpdatePathWithBrokenRoutingTest { +class UpdatePathWithBrokenRoutingFilledTest extends UpdatePathTestBase { /** * {@inheritdoc} @@ -19,8 +21,30 @@ class UpdatePathWithBrokenRoutingFilledTest extends UpdatePathWithBrokenRoutingT * {@inheritdoc} */ protected function setDatabaseDumpFiles() { - parent::setDatabaseDumpFiles(); - $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz'; + $this->databaseDumpFiles = [ + __DIR__ . '/../../../../tests/fixtures/update/drupal-8.8.0.filled.standard.php.gz', + __DIR__ . '/../../../../tests/fixtures/update/drupal-8.broken_routing.php', + ]; + } + + /** + * Tests running update.php with some form of broken routing. + */ + public function testWithBrokenRouting() { + // Simulate a broken router, and make sure the front page is + // inaccessible. + \Drupal::state()->set('update_script_test_broken_inbound', TRUE); + \Drupal::service('cache_tags.invalidator')->invalidateTags(['route_match', 'rendered']); + $this->drupalGet('<front>'); + $this->assertResponse(500); + + $this->runUpdates(); + + // Remove the simulation of the broken router, and make sure we can get to + // the front page again. + \Drupal::state()->set('update_script_test_broken_inbound', FALSE); + $this->drupalGet('<front>'); + $this->assertResponse(200); } } diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php index 17a70c0215b37ff500c333866ae1f27e23004f2d..1faee31db884885c12788f39bf01a944a958c8dc 100644 --- a/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php @@ -2,15 +2,17 @@ namespace Drupal\Tests\system\Functional\Update; -use Drupal\FunctionalTests\Update\UpdatePathTestBase; +use Drupal\Core\Url; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; /** * Tests the update path with a broken router. * * @group Update - * @group legacy */ -class UpdatePathWithBrokenRoutingTest extends UpdatePathTestBase { +class UpdatePathWithBrokenRoutingTest extends BrowserTestBase { + use UpdatePathTestTrait; /** * {@inheritdoc} @@ -20,11 +22,9 @@ class UpdatePathWithBrokenRoutingTest extends UpdatePathTestBase { /** * {@inheritdoc} */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz', - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.broken_routing.php', - ]; + protected function setUp() { + parent::setUp(); + $this->ensureUpdatesToRun(); } /** @@ -34,11 +34,11 @@ public function testWithBrokenRouting() { // Simulate a broken router, and make sure the front page is // inaccessible. \Drupal::state()->set('update_script_test_broken_inbound', TRUE); - \Drupal::service('cache_tags.invalidator')->invalidateTags(['route_match', 'rendered']); + $this->resetAll(); $this->drupalGet('<front>'); $this->assertResponse(500); - $this->runUpdates(); + $this->runUpdates(Url::fromRoute('system.db_update', [], ['path_processing' => FALSE])); // Remove the simulation of the broken router, and make sure we can get to // the front page again. diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php index 5c6b223d6fbb51c68f500bce87afbbda8dca9f3b..a645cb457c048fedf5ee16d67f0300dcf5973875 100644 --- a/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php @@ -2,15 +2,17 @@ namespace Drupal\Tests\system\Functional\Update; -use Drupal\FunctionalTests\Update\UpdatePathTestBase; +use Drupal\Core\Database\Database; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; /** * Tests hook_post_update() when there are failing update hooks. * * @group Update - * @group legacy */ -class UpdatePostUpdateFailingTest extends UpdatePathTestBase { +class UpdatePostUpdateFailingTest extends BrowserTestBase { + use UpdatePathTestTrait; /** * {@inheritdoc} @@ -20,11 +22,37 @@ class UpdatePostUpdateFailingTest extends UpdatePathTestBase { /** * {@inheritdoc} */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz', - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.update-test-postupdate-failing-enabled.php', - ]; + protected function setUp() { + parent::setUp(); + $connection = Database::getConnection(); + + // Set the schema version. + $connection->merge('key_value') + ->condition('collection', 'system.schema') + ->condition('name', 'update_test_failing') + ->fields([ + 'collection' => 'system.schema', + 'name' => 'update_test_failing', + 'value' => 'i:8000;', + ]) + ->execute(); + + // Update core.extension. + $extensions = $connection->select('config') + ->fields('config', ['data']) + ->condition('collection', '') + ->condition('name', 'core.extension') + ->execute() + ->fetchField(); + $extensions = unserialize($extensions); + $extensions['module']['update_test_failing'] = 8000; + $connection->update('config') + ->fields([ + 'data' => serialize($extensions), + ]) + ->condition('collection', '') + ->condition('name', 'core.extension') + ->execute(); } /** diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php index 1015e7a138ebb4304487737a38816f8adb6d1774..a1c5690c34e3f69c92494e6f3cbad16b897de9a1 100644 --- a/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php +++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php @@ -3,15 +3,17 @@ namespace Drupal\Tests\system\Functional\Update; use Drupal\Component\Render\FormattableMarkup; -use Drupal\FunctionalTests\Update\UpdatePathTestBase; +use Drupal\Core\Database\Database; +use Drupal\Tests\BrowserTestBase; +use Drupal\Tests\UpdatePathTestTrait; /** * Tests hook_post_update(). * * @group Update - * @group legacy */ -class UpdatePostUpdateTest extends UpdatePathTestBase { +class UpdatePostUpdateTest extends BrowserTestBase { + use UpdatePathTestTrait; /** * {@inheritdoc} @@ -21,19 +23,43 @@ class UpdatePostUpdateTest extends UpdatePathTestBase { /** * {@inheritdoc} */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz', - __DIR__ . '/../../../../tests/fixtures/update/drupal-8.update-test-postupdate-enabled.php', - ]; + protected function setUp() { + parent::setUp(); + $connection = Database::getConnection(); + + // Set the schema version. + $connection->merge('key_value') + ->condition('collection', 'system.schema') + ->condition('name', 'update_test_postupdate') + ->fields([ + 'collection' => 'system.schema', + 'name' => 'update_test_postupdate', + 'value' => 'i:8000;', + ]) + ->execute(); + + // Update core.extension. + $extensions = $connection->select('config') + ->fields('config', ['data']) + ->condition('collection', '') + ->condition('name', 'core.extension') + ->execute() + ->fetchField(); + $extensions = unserialize($extensions); + $extensions['module']['update_test_postupdate'] = 8000; + $connection->update('config') + ->fields([ + 'data' => serialize($extensions), + ]) + ->condition('collection', '') + ->condition('name', 'core.extension') + ->execute(); } /** * {@inheritdoc} */ protected function doSelectionTest() { - parent::doSelectionTest(); - // Ensure that normal and post_update updates are merged together on the // selection page. $this->assertRaw('<ul><li>8001 - Normal update_N() function. </li><li>First update.</li><li>Second update.</li><li>Test0 update.</li><li>Test1 update.</li><li>Testing batch processing in post updates update.</li></ul>'); diff --git a/web/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermLocalizedTranslation.php b/web/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermLocalizedTranslation.php index 844fb858b518867e4082a8255150b346fae1450f..d8308c72b4fae40ae4b9de09bf034f416ec55858 100644 --- a/web/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermLocalizedTranslation.php +++ b/web/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermLocalizedTranslation.php @@ -70,7 +70,13 @@ public function prepareRow(Row $row) { $query->condition('lt.language', $language); $query->addField('lt', 'translation'); $results = $query->execute()->fetchAssoc(); - $row->setSourceProperty($other_property . '_translated', $results['translation']); + if ($results) { + $row->setSourceProperty($other_property . '_translated', $results['translation']); + } + else { + // The translation does not exist. + $row->setSourceProperty($other_property . '_translated', NULL); + } parent::prepareRow($row); } diff --git a/web/core/modules/taxonomy/taxonomy.module b/web/core/modules/taxonomy/taxonomy.module index efb1850377fdf4b3166d65eba1390349a79e13dd..50a2fd83a64c615bc12e17d80e5ff9c133e7ad69 100644 --- a/web/core/modules/taxonomy/taxonomy.module +++ b/web/core/modules/taxonomy/taxonomy.module @@ -268,7 +268,7 @@ function template_preprocess_taxonomy_term(&$variables) { /** @var \Drupal\taxonomy\TermInterface $term */ $term = $variables['term']; - $variables['url'] = $term->toUrl()->toString(); + $variables['url'] = !$term->isNew() ? $term->toUrl()->toString() : NULL; // Make name field available separately. Skip this custom preprocessing if // the field display is configurable and skipping has been enabled. diff --git a/web/core/modules/taxonomy/taxonomy.post_update.php b/web/core/modules/taxonomy/taxonomy.post_update.php index 6b1c6bde08411e828f09d6e987d1f825c59f328b..250c1871147161b19a6998c4a148be39d062955e 100644 --- a/web/core/modules/taxonomy/taxonomy.post_update.php +++ b/web/core/modules/taxonomy/taxonomy.post_update.php @@ -249,7 +249,7 @@ function taxonomy_post_update_configure_status_field_widget(&$sandbox = NULL) { ], ]); return TRUE; - }; + } return FALSE; }); } diff --git a/web/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php b/web/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php index 9709b65efc92692876950a0a8a3a1e7ccc8a65f6..9d23245091a2f1fd760e2c596176c9b5005af976 100644 --- a/web/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php +++ b/web/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php @@ -145,4 +145,27 @@ public function testTaxonomyVocabularyTree() { $this->assertEqual(5, count($ancestors), 'The term has five ancestors including the term itself.'); } + /** + * Tests that a Term is renderable when unsaved (preview). + */ + public function testTermPreview() { + $entity_manager = \Drupal::entityTypeManager(); + $vocabulary = $this->createVocabulary(); + + // Create a unsaved term. + $term = $entity_manager->getStorage('taxonomy_term')->create([ + 'vid' => $vocabulary->id(), + 'name' => 'Inator', + ]); + + // Confirm we can get the view of unsaved term. + $render_array = $entity_manager->getViewBuilder('taxonomy_term') + ->view($term); + $this->assertTrue(!empty($render_array), 'Term view builder is built.'); + + // Confirm we can render said view. + $rendered = \Drupal::service('renderer')->renderPlain($render_array); + $this->assertTrue(!empty(trim($rendered)), 'Term is able to be rendered.'); + } + } diff --git a/web/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermTest.php b/web/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermTest.php index aa4269afc5bdbc4781b5a91f369d91f70d061342..07e3ea64b4a19c1ed998090ed05284756dfe7125 100644 --- a/web/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermTest.php +++ b/web/core/modules/taxonomy/tests/src/Kernel/Views/ArgumentValidatorTermTest.php @@ -61,7 +61,7 @@ public function testArgumentValidatorTerm() { $view->initHandlers(); // Test the single validator for term IDs. - $view->argument['tid']->validator->options['type'] = 'tid'; + $view->argument['tid']->options['validate_options']['multiple'] = 0; // Pass in a single valid term. foreach ($this->terms as $term) { @@ -78,7 +78,7 @@ public function testArgumentValidatorTerm() { $view->argument['tid']->argument_validated = NULL; // Test the multiple validator for term IDs. - $view->argument['tid']->validator->options['type'] = 'tids'; + $view->argument['tid']->options['validate_options']['multiple'] = 1; $view->argument['tid']->options['break_phrase'] = TRUE; // Pass in a single term. diff --git a/web/core/modules/toolbar/css/toolbar.module.css b/web/core/modules/toolbar/css/toolbar.module.css index aad54b0a0e5229a64a7bcf45146caf96c84eb39c..4f871ba89ffce06738e641932473f127970d0473 100644 --- a/web/core/modules/toolbar/css/toolbar.module.css +++ b/web/core/modules/toolbar/css/toolbar.module.css @@ -79,7 +79,7 @@ right: 0; left: 0; } -/* .toolbar-loading is required by toolbar JavaScript to pre-render markup +/* .toolbar-loading is required by Toolbar JavaScript to pre-render markup * style to avoid extra reflow & flicker. */ @media (min-width: 61em) { .toolbar-loading.toolbar-horizontal .toolbar .toolbar-bar .toolbar-tab:last-child .toolbar-tray { diff --git a/web/core/modules/update/src/Form/UpdateManagerUpdate.php b/web/core/modules/update/src/Form/UpdateManagerUpdate.php index c42928e8d240e686c6a6dfba5c6aa0c0067acb63..cd245480cbee9e49105d76ad723efcaa0577654c 100644 --- a/web/core/modules/update/src/Form/UpdateManagerUpdate.php +++ b/web/core/modules/update/src/Form/UpdateManagerUpdate.php @@ -8,6 +8,7 @@ use Drupal\Core\Link; use Drupal\Core\State\StateInterface; use Drupal\Core\Url; +use Drupal\update\ModuleVersion; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -133,7 +134,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { $recommended_release = $project['releases'][$project['recommended']]; $recommended_version = '{{ release_version }} (<a href="{{ release_link }}" title="{{ project_title }}">{{ release_notes }}</a>)'; - if ($recommended_release['version_major'] != $project['existing_major']) { + $recommended_version_parser = ModuleVersion::createFromVersionString($recommended_release['version']); + if ($recommended_version_parser->getMajorVersion() != $project['existing_major']) { $recommended_version .= '<div title="{{ major_update_warning_title }}" class="update-major-version-warning">{{ major_update_warning_text }}</div>'; } diff --git a/web/core/modules/update/src/ModuleVersion.php b/web/core/modules/update/src/ModuleVersion.php new file mode 100644 index 0000000000000000000000000000000000000000..987674107f549f7c5cf33078ee8bc9ea62fe5314 --- /dev/null +++ b/web/core/modules/update/src/ModuleVersion.php @@ -0,0 +1,131 @@ +<?php + +namespace Drupal\update; + +/** + * Provides a module version value object. + * + * @internal + * + * @see https://www.drupal.org/drupalorg/docs/apis/update-status-xml. + */ +final class ModuleVersion { + + /** + * The '8.x-' prefix is used on contrib module version numbers. + * + * @var string + */ + const CORE_PREFIX = '8.x-'; + + /** + * The major version. + * + * @var string + */ + protected $majorVersion; + + /** + * The version extra string. + * + * For example, if the module version is '2.0.3-alpha1', then the version + * extra string is 'alpha1'. + * + * @var string|null + */ + protected $versionExtra; + + /** + * Constructs a module version object from a version string. + * + * @param string $version_string + * The version string. + * + * @return \Drupal\update\ModuleVersion + * The module version instance. + */ + public static function createFromVersionString($version_string) { + $original_version = $version_string; + if (strpos($version_string, static::CORE_PREFIX) === 0 && $version_string !== '8.x-dev') { + $version_string = preg_replace('/8\.x-/', '', $version_string, 1); + } + else { + // Ensure the version string has no unsupported core prefixes. + $dot_x_position = strpos($version_string, '.x-'); + if ($dot_x_position === 1 || $dot_x_position === 2) { + $after_core_prefix = explode('.x-', $version_string)[1]; + if ($after_core_prefix !== 'dev') { + throw new \UnexpectedValueException("Unexpected version core prefix in $version_string. The only core prefix expected in \Drupal\update\ModuleVersion is: 8.x-"); + } + } + } + $version_parts = explode('.', $version_string); + $major_version = $version_parts[0]; + $version_parts_count = count($version_parts); + $last_part_split = explode('-', $version_parts[count($version_parts) - 1]); + $version_extra = count($last_part_split) === 1 ? NULL : $last_part_split[1]; + if ($version_parts_count > 3 || $version_parts_count < 2 + || !is_numeric($major_version) + || ($version_parts_count === 3 && !is_numeric($version_parts[1])) + // The only case where a non-numeric version part other the extra part is + // allowed is in development versions like 8.x-1.x-dev, 1.2.x-dev or + // 1.x-dev. + || (!is_numeric($last_part_split[0]) && $last_part_split !== 'x' && $version_extra !== 'dev')) { + throw new \UnexpectedValueException("Unexpected version number in: $original_version"); + } + return new static($major_version, $version_extra); + } + + /** + * Constructs a ModuleVersion object. + * + * @param string $major_version + * The major version. + * @param string|null $version_extra + * The extra version string. + */ + private function __construct($major_version, $version_extra) { + $this->majorVersion = $major_version; + $this->versionExtra = $version_extra; + } + + /** + * Constructs a module version object from a support branch. + * + * This can be used to determine the major version of the branch. + * ::getVersionExtra() will always return NULL for branches. + * + * @param string $branch + * The support branch. + * + * @return \Drupal\update\ModuleVersion + * The module version instance. + */ + public static function createFromSupportBranch($branch) { + if (substr($branch, -1) !== '.') { + throw new \UnexpectedValueException("Invalid support branch: $branch"); + } + return static::createFromVersionString($branch . '0'); + } + + /** + * Gets the major version. + * + * @return string + * The major version. + */ + public function getMajorVersion() { + return $this->majorVersion; + } + + /** + * Gets the version extra string at the end of the version number. + * + * @return string|null + * The version extra string if available, or otherwise NULL. + */ + public function getVersionExtra() { + return $this->versionExtra; + } + +} diff --git a/web/core/modules/update/src/ProjectCoreCompatibility.php b/web/core/modules/update/src/ProjectCoreCompatibility.php new file mode 100644 index 0000000000000000000000000000000000000000..42f5a061b55f900edf9733dcdd09f79831e53311 --- /dev/null +++ b/web/core/modules/update/src/ProjectCoreCompatibility.php @@ -0,0 +1,229 @@ +<?php + +namespace Drupal\update; + +use Composer\Semver\Semver; +use Composer\Semver\VersionParser; +use Drupal\Core\StringTranslation\StringTranslationTrait; + +/** + * Utility class to set core compatibility messages for project releases. + * + * @internal + * This class implements logic used by update_calculate_project_status(). It + * should not be called directly. + */ +final class ProjectCoreCompatibility { + + use StringTranslationTrait; + + /** + * The currently installed version of Drupal core. + * + * @var string + */ + protected $existingCoreVersion; + + /** + * Cache of core versions that are available for updates. + * + * @var string[] + */ + protected $possibleCoreUpdateVersions; + + /** + * Cache of core compatibility messages per core version constraint. + * + * Keys are core version constraint strings, values are human-readable + * messages about the versions of core that version constraint maps to. + * + * This list is cached since many project releases will use the same core + * compatibility constraint. + * + * @var string[] + */ + protected $compatibilityMessages = []; + + /** + * Constructs a ProjectCoreCompatibility object. + * + * @param array $core_data + * The project data for Drupal core as returned by + * \Drupal\update\UpdateManagerInterface::getProjects() and then processed + * by update_process_project_info() and + * update_calculate_project_update_status(). + * @param array $core_releases + * The Drupal core available releases. + * + * @see \Drupal\update\UpdateManagerInterface::getProjects() + * @see update_process_project_info() + * @see update_calculate_project_update_status() + */ + public function __construct(array $core_data, array $core_releases) { + if (isset($core_data['existing_version'])) { + $this->existingCoreVersion = $core_data['existing_version']; + $this->possibleCoreUpdateVersions = $this->getPossibleCoreUpdateVersions($core_releases); + } + } + + /** + * Gets the core versions that should be considered for compatibility ranges. + * + * @param array $core_releases + * The Drupal core available releases. + * + * @return string[] + * The core version numbers that are possible to update the site to. + */ + protected function getPossibleCoreUpdateVersions(array $core_releases) { + if (!isset($core_releases[$this->existingCoreVersion])) { + // If we can't determine the existing version of core then we can't + // calculate the core compatibility of a given release based on core + // versions after the existing version. + return []; + } + $core_release_versions = array_keys($core_releases); + $possible_core_update_versions = Semver::satisfiedBy($core_release_versions, '>= ' . $this->existingCoreVersion); + $possible_core_update_versions = Semver::sort($possible_core_update_versions); + $possible_core_update_versions = array_filter($possible_core_update_versions, function ($version) { + return VersionParser::parseStability($version) === 'stable'; + }); + return $possible_core_update_versions; + } + + /** + * Sets core compatibility messages for project releases. + * + * @param array &$project_data + * The project data as returned by + * \Drupal\update\UpdateManagerInterface::getProjects() and then processed + * by update_process_project_info() and + * update_calculate_project_update_status(). If set, the following keys are + * used in this method: + * - recommended (string): A project version number. + * - latest_version (string): A project version number. + * - also (string[]): Project version numbers. + * - releases (array[]): An array where the keys are project version numbers + * and the values are arrays of project release information. + * - security updates (array[]): An array of project release information. + * + * @see \Drupal\update\UpdateManagerInterface::getProjects() + * @see update_process_project_info() + * @see update_calculate_project_update_status() + */ + public function setReleaseMessage(array &$project_data) { + if (empty($this->possibleCoreUpdateVersions)) { + return; + } + + // Get the various releases that will need to have core compatibility + // messages added to them. + $releases_to_set = []; + $versions = []; + if (!empty($project_data['recommended'])) { + $versions[] = $project_data['recommended']; + } + if (!empty($project_data['latest_version'])) { + $versions[] = $project_data['latest_version']; + } + if (!empty($project_data['also'])) { + $versions = array_merge($versions, $project_data['also']); + } + foreach ($versions as $version) { + if (isset($project_data['releases'][$version])) { + $releases_to_set[] = &$project_data['releases'][$version]; + } + } + if (!empty($project_data['security updates'])) { + foreach ($project_data['security updates'] as &$security_update) { + $releases_to_set[] = &$security_update; + } + } + foreach ($releases_to_set as &$release) { + if (!empty($release['core_compatibility'])) { + $release['core_compatible'] = $this->isCoreCompatible($release['core_compatibility']); + $release['core_compatibility_message'] = $this->createMessageFromCoreCompatibility($release['core_compatibility']); + } + } + } + + /** + * Determines if a release is compatible with the currently installed core. + * + * @param string $core_compatibility_constraint + * A semantic version constraint. + * + * @return bool + * TRUE if the given constraint is satisfied by the currently installed + * version of Drupal core, otherwise FALSE. + */ + protected function isCoreCompatible($core_compatibility_constraint) { + return Semver::satisfies($this->existingCoreVersion, $core_compatibility_constraint); + } + + /** + * Creates core a compatibility message from a semantic version constraint. + * + * @param string $core_compatibility_constraint + * A semantic version constraint. + * + * @return string + * The core compatibility message. + */ + protected function createMessageFromCoreCompatibility($core_compatibility_constraint) { + if (!isset($this->compatibilityMessages[$core_compatibility_constraint])) { + $core_compatibility_ranges = $this->getCompatibilityRanges($core_compatibility_constraint); + $range_messages = []; + foreach ($core_compatibility_ranges as $core_compatibility_range) { + if (count($core_compatibility_range) === 2) { + $range_messages[] = $this->t('@low_version_number to @high_version_number', ['@low_version_number' => $core_compatibility_range[0], '@high_version_number' => $core_compatibility_range[1]]); + } + else { + $range_messages[] = $core_compatibility_range[0]; + } + } + $this->compatibilityMessages[$core_compatibility_constraint] = $this->t('Requires Drupal core:') . ' ' . implode(', ', $range_messages); + } + return $this->compatibilityMessages[$core_compatibility_constraint]; + } + + /** + * Gets the compatibility ranges for a semantic version constraint. + * + * @param string $core_compatibility_constraint + * A semantic version constraint. + * + * @return array[] + * An array compatibility ranges. If a range array has 2 elements then this + * denotes a range of compatibility between and including the 2 versions. If + * the range has 1 element then it denotes compatibility with a single + * version. + */ + protected function getCompatibilityRanges($core_compatibility_constraint) { + $compatibility_ranges = []; + foreach ($this->possibleCoreUpdateVersions as $possible_core_update_version) { + if (Semver::satisfies($possible_core_update_version, $core_compatibility_constraint)) { + if (empty($range)) { + $range[] = $possible_core_update_version; + } + else { + $range[1] = $possible_core_update_version; + } + } + else { + // If core version does not satisfy the constraint and there is a non + // empty range, add it to the list of ranges. + if (!empty($range)) { + $compatibility_ranges[] = $range; + // Start a new range. + $range = []; + } + } + } + if (!empty($range)) { + $compatibility_ranges[] = $range; + } + return $compatibility_ranges; + } + +} diff --git a/web/core/modules/update/src/ProjectSecurityData.php b/web/core/modules/update/src/ProjectSecurityData.php new file mode 100644 index 0000000000000000000000000000000000000000..171b130e35f777439c3f4bf1fc92df2e030bf982 --- /dev/null +++ b/web/core/modules/update/src/ProjectSecurityData.php @@ -0,0 +1,211 @@ +<?php + +namespace Drupal\update; + +/** + * Calculates a project's security coverage information. + * + * @internal + * This class implements logic to determine security coverage for Drupal core + * according to Drupal core security policy. It should not be called directly. + */ +final class ProjectSecurityData { + + /** + * The number of minor versions of Drupal core that receive security coverage. + * + * For example, if this value is 2 and the existing version is 9.0.1, the + * 9.0.x branch will receive security coverage until the release of version + * 9.2.0. + */ + const CORE_MINORS_WITH_SECURITY_COVERAGE = 2; + + /** + * Define constants for versions with security coverage end dates. + * + * Two types of constants are supported: + * - SECURITY_COVERAGE_END_DATE_[VERSION_MAJOR]_[VERSION_MINOR]: A date in + * 'Y-m-d' or 'Y-m' format. + * - SECURITY_COVERAGE_ENDING_WARN_DATE_[VERSION_MAJOR]_[VERSION_MINOR]: A + * date in 'Y-m-d' format. + * + * @see \Drupal\update\ProjectSecurityRequirement::getDateEndRequirement() + */ + const SECURITY_COVERAGE_END_DATE_8_8 = '2020-12-02'; + + const SECURITY_COVERAGE_ENDING_WARN_DATE_8_8 = '2020-06-02'; + + const SECURITY_COVERAGE_END_DATE_8_9 = '2021-11'; + + /** + * The existing (currently installed) version of the project. + * + * Because this class only handles the Drupal core project, values will be + * semantic version numbers such as 8.8.0, 8.8.0-alpha1, or 9.0.0. + * + * @var string|null + */ + protected $existingVersion; + + /** + * Releases as returned by update_get_available(). + * + * @var array + * + * Each release item in the array has metadata about that release. This class + * uses the keys: + * - status (string): The status of the release. + * - version (string): The version number of the release. + * + * @see update_get_available() + */ + protected $releases; + + /** + * Constructs a ProjectSecurityData object. + * + * @param string $existing_version + * The existing (currently installed) version of the project. + * @param array $releases + * Project releases as returned by update_get_available(). + */ + private function __construct($existing_version = NULL, array $releases = []) { + $this->existingVersion = $existing_version; + $this->releases = $releases; + } + + /** + * Creates a ProjectSecurityData object from project data and releases. + * + * @param array $project_data + * Project data from Drupal\update\UpdateManagerInterface::getProjects() and + * processed by update_process_project_info(). + * @param array $releases + * Project releases as returned by update_get_available(). + * + * @return static + */ + public static function createFromProjectDataAndReleases(array $project_data, array $releases) { + if (!($project_data['project_type'] === 'core' && $project_data['name'] === 'drupal')) { + // Only Drupal core has an explicit coverage range. + return new static(); + } + return new static($project_data['existing_version'], $releases); + } + + /** + * Gets the security coverage information for a project. + * + * Currently only Drupal core is supported. + * + * @return array + * The security coverage information, or an empty array if no security + * information is available for the project. If security coverage is based + * on release of a specific version, the array will have the following + * keys: + * - security_coverage_end_version (string): The minor version the existing + * version will receive security coverage until. + * - additional_minors_coverage (int): The number of additional minor + * versions the existing version will receive security coverage. + * If the security coverage is based on a specific date, the array will have + * the following keys: + * - security_coverage_end_date (string): The month or date security + * coverage will end for the existing version. It can be in either + * 'YYYY-MM' or 'YYYY-MM-DD' format. + * - (optional) security_coverage_ending_warn_date (string): The date, in + * the format 'YYYY-MM-DD', after which a warning should be displayed + * about upgrading to another version. + */ + public function getCoverageInfo() { + if (empty($this->releases[$this->existingVersion])) { + // If the existing version does not have a release, we cannot get the + // security coverage information. + return []; + } + $info = []; + $existing_release_version = ModuleVersion::createFromVersionString($this->existingVersion); + + // Check if the installed version has a specific end date defined. + $version_suffix = $existing_release_version->getMajorVersion() . '_' . $this->getSemanticMinorVersion($this->existingVersion); + if (defined("self::SECURITY_COVERAGE_END_DATE_$version_suffix")) { + $info['security_coverage_end_date'] = constant("self::SECURITY_COVERAGE_END_DATE_$version_suffix"); + $info['security_coverage_ending_warn_date'] = + defined("self::SECURITY_COVERAGE_ENDING_WARN_DATE_$version_suffix") + ? constant("self::SECURITY_COVERAGE_ENDING_WARN_DATE_$version_suffix") + : NULL; + } + elseif ($security_coverage_until_version = $this->getSecurityCoverageUntilVersion()) { + $info['security_coverage_end_version'] = $security_coverage_until_version; + $info['additional_minors_coverage'] = $this->getAdditionalSecurityCoveredMinors($security_coverage_until_version); + } + return $info; + } + + /** + * Gets the release the current minor will receive security coverage until. + * + * @todo In https://www.drupal.org/node/2608062 determine how we will know + * what the final minor release of a particular major version will be. This + * method should not return a version beyond that minor. + * + * @return string|null + * The version the existing version will receive security coverage until or + * NULL if this cannot be determined. + */ + private function getSecurityCoverageUntilVersion() { + $existing_release_version = ModuleVersion::createFromVersionString($this->existingVersion); + if (!empty($existing_release_version->getVersionExtra())) { + // Only full releases receive security coverage. + return NULL; + } + + return $existing_release_version->getMajorVersion() . '.' + . ($this->getSemanticMinorVersion($this->existingVersion) + static::CORE_MINORS_WITH_SECURITY_COVERAGE) + . '.0'; + } + + /** + * Gets the number of additional minor security covered releases. + * + * @param string $security_covered_version + * The version until which the existing version receives security coverage. + * + * @return int|null + * The number of additional minor releases that receive security coverage, + * or NULL if this cannot be determined. + */ + private function getAdditionalSecurityCoveredMinors($security_covered_version) { + $security_covered_version_major = ModuleVersion::createFromVersionString($security_covered_version)->getMajorVersion(); + $security_covered_version_minor = $this->getSemanticMinorVersion($security_covered_version); + foreach ($this->releases as $release) { + $release_version = ModuleVersion::createFromVersionString($release['version']); + if ($release_version->getMajorVersion() === $security_covered_version_major && $release['status'] === 'published' && !$release_version->getVersionExtra()) { + // The releases are ordered with the most recent releases first. + // Therefore if we have found an official, published release with the + // same major version as $security_covered_version then this release + // can be used to determine the latest minor. + $latest_minor = $this->getSemanticMinorVersion($release['version']); + break; + } + } + // If $latest_minor is set, we know that $latest_minor and + // $security_covered_version_minor have the same major version. Therefore we + // can simply subtract to determine the number of additional minor security + // covered releases. + return isset($latest_minor) ? $security_covered_version_minor - $latest_minor : NULL; + } + + /** + * Gets the minor version for a semantic version string. + * + * @param string $version + * The semantic version string. + * + * @return int + * The minor version as an integer. + */ + private function getSemanticMinorVersion($version) { + return (int) (explode('.', $version)[1]); + } + +} diff --git a/web/core/modules/update/src/ProjectSecurityRequirement.php b/web/core/modules/update/src/ProjectSecurityRequirement.php new file mode 100644 index 0000000000000000000000000000000000000000..b14acf5af7415a213fb008a70329516e8ff884f3 --- /dev/null +++ b/web/core/modules/update/src/ProjectSecurityRequirement.php @@ -0,0 +1,282 @@ +<?php + +namespace Drupal\update; + +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\Core\Url; + +/** + * Class for generating a project's security requirement. + * + * @see update_requirements() + * + * @internal + * This class implements logic to determine security coverage for Drupal core + * according to Drupal core security policy. It should not be called directly. + */ +final class ProjectSecurityRequirement { + + use StringTranslationTrait; + + /** + * The project title. + * + * @var string|null + */ + protected $projectTitle; + + /** + * Security coverage information for the project. + * + * @var array + * + * @see \Drupal\update\ProjectSecurityData::getCoverageInfo() + */ + private $securityCoverageInfo; + + /** + * The next version after the installed version in the format [MAJOR].[MINOR]. + * + * @var string|null + */ + private $nextMajorMinorVersion; + + /** + * The existing (currently installed) version in the format [MAJOR].[MINOR]. + * + * @var string|null + */ + private $existingMajorMinorVersion; + + /** + * Constructs a ProjectSecurityRequirement object. + * + * @param string|null $project_title + * The project title. + * @param array $security_coverage_info + * Security coverage information as set by + * \Drupal\update\ProjectSecurityData::getCoverageInfo(). + * @param string|null $existing_major_minor_version + * The existing (currently installed) version in the format [MAJOR].[MINOR]. + * @param string|null $next_major_minor_version + * The next version after the installed version in the format + * [MAJOR].[MINOR]. + */ + private function __construct($project_title = NULL, array $security_coverage_info = [], $existing_major_minor_version = NULL, $next_major_minor_version = NULL) { + $this->projectTitle = $project_title; + $this->securityCoverageInfo = $security_coverage_info; + $this->existingMajorMinorVersion = $existing_major_minor_version; + $this->nextMajorMinorVersion = $next_major_minor_version; + } + + /** + * Creates a ProjectSecurityRequirement object from project data. + * + * @param array $project_data + * Project data from Drupal\update\UpdateManagerInterface::getProjects(). + * The 'security_coverage_info' key should be set by + * calling \Drupal\update\ProjectSecurityData::getCoverageInfo() before + * calling this method. The following keys are used in this method: + * - existing_version (string): The version of the project that is installed + * on the site. + * - project_type (string): The type of project. + * - name (string): The project machine name. + * - title (string): The project title. + * @param array $security_coverage_info + * The security coverage information as returned by + * \Drupal\update\ProjectSecurityData::getCoverageInfo(). + * + * @return static + * + * @see \Drupal\update\UpdateManagerInterface::getProjects() + * @see \Drupal\update\ProjectSecurityData::getCoverageInfo() + * @see update_process_project_info() + */ + public static function createFromProjectDataAndSecurityCoverageInfo(array $project_data, array $security_coverage_info) { + if ($project_data['project_type'] !== 'core' || $project_data['name'] !== 'drupal' || empty($security_coverage_info)) { + return new static(); + } + if (isset($project_data['existing_version'])) { + list($major, $minor) = explode('.', $project_data['existing_version']); + $existing_version = "$major.$minor"; + $next_version = "$major." . ((int) $minor + 1); + return new static($project_data['title'], $security_coverage_info, $existing_version, $next_version); + } + return new static($project_data['title'], $security_coverage_info); + } + + /** + * Gets the security coverage requirement, if any. + * + * @return array + * Requirements array as specified by hook_requirements(), or an empty array + * if no requirements can be determined. + */ + public function getRequirement() { + if (isset($this->securityCoverageInfo['security_coverage_end_version'])) { + $requirement = $this->getVersionEndRequirement(); + } + elseif (isset($this->securityCoverageInfo['security_coverage_end_date'])) { + $requirement = $this->getDateEndRequirement(); + } + else { + return []; + } + $requirement['title'] = $this->t('Drupal core security coverage'); + return $requirement; + } + + /** + * Gets the requirements based on security coverage until a specific version. + * + * @return array + * Requirements array as specified by hook_requirements(). + */ + private function getVersionEndRequirement() { + $requirement = []; + if ($security_coverage_message = $this->getVersionEndCoverageMessage()) { + $requirement['description'] = $security_coverage_message; + if ($this->securityCoverageInfo['additional_minors_coverage'] > 0) { + $requirement['value'] = $this->t( + 'Covered until @end_version', + ['@end_version' => $this->securityCoverageInfo['security_coverage_end_version']] + ); + $requirement['severity'] = $this->securityCoverageInfo['additional_minors_coverage'] > 1 ? REQUIREMENT_INFO : REQUIREMENT_WARNING; + } + else { + $requirement['value'] = $this->t('Coverage has ended'); + $requirement['severity'] = REQUIREMENT_ERROR; + } + } + return $requirement; + } + + /** + * Gets the message for additional minor version security coverage. + * + * @return array[] + * A render array containing security coverage message. + * + * @see \Drupal\update\ProjectSecurityData::getCoverageInfo() + */ + private function getVersionEndCoverageMessage() { + if ($this->securityCoverageInfo['additional_minors_coverage'] > 0) { + // If the installed minor version will receive security coverage until + // newer minor versions are released, inform the user. + if ($this->securityCoverageInfo['additional_minors_coverage'] === 1) { + // If the installed minor version will only receive security coverage + // for 1 newer minor core version, encourage the site owner to update + // soon. + $message['coverage_message'] = [ + '#markup' => $this->t( + '<a href=":update_status_report">Update to @next_minor or higher</a> soon to continue receiving security updates.', + [ + ':update_status_report' => Url::fromRoute('update.status')->toString(), + '@next_minor' => $this->nextMajorMinorVersion, + ] + ), + '#suffix' => ' ', + ]; + } + } + else { + // Because the current minor version no longer has security coverage, + // advise the site owner to update. + $message['coverage_message'] = [ + '#markup' => $this->getVersionNoSecurityCoverageMessage(), + '#suffix' => ' ', + ]; + } + $message['release_cycle_link'] = [ + '#markup' => $this->getReleaseCycleLink(), + ]; + return $message; + } + + /** + * Gets the security coverage requirement based on an end date. + * + * @return array + * Requirements array as specified by hook_requirements(). + */ + private function getDateEndRequirement() { + $requirement = []; + /** @var \Drupal\Component\Datetime\Time $time */ + $time = \Drupal::service('datetime.time'); + /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */ + $date_formatter = \Drupal::service('date.formatter'); + // 'security_coverage_end_date' will either be in format 'Y-m-d' or 'Y-m'. + if (substr_count($this->securityCoverageInfo['security_coverage_end_date'], '-') === 2) { + $date_format = 'Y-m-d'; + $full_security_coverage_end_date = $this->securityCoverageInfo['security_coverage_end_date']; + } + else { + $date_format = 'Y-m'; + // If the date does not include a day, use '15'. When calling + // \DateTime::createFromFormat() the current day will be used if one is + // not provided. This may cause the month to be wrong at the beginning or + // end of the month. '15' will never be displayed because we are using the + // 'Y-m' format. + $full_security_coverage_end_date = $this->securityCoverageInfo['security_coverage_end_date'] . '-15'; + } + + $comparable_request_date = $date_formatter->format($time->getRequestTime(), 'custom', $date_format); + if ($this->securityCoverageInfo['security_coverage_end_date'] <= $comparable_request_date) { + // Security coverage is over. + $requirement['value'] = $this->t('Coverage has ended'); + $requirement['severity'] = REQUIREMENT_ERROR; + $requirement['description']['coverage_message'] = [ + '#markup' => $this->getVersionNoSecurityCoverageMessage(), + '#suffix' => ' ', + ]; + } + else { + $security_coverage_end_timestamp = \DateTime::createFromFormat('Y-m-d', $full_security_coverage_end_date)->getTimestamp(); + $output_date_format = $date_format === 'Y-m-d' ? 'Y-M-d' : 'Y-M'; + $formatted_end_date = $date_formatter + ->format($security_coverage_end_timestamp, 'custom', $output_date_format); + $translation_arguments = ['@date' => $formatted_end_date]; + $requirement['value'] = $this->t('Covered until @date', $translation_arguments); + $requirement['severity'] = REQUIREMENT_INFO; + // 'security_coverage_ending_warn_date' will always be in the format + // 'Y-m-d'. + $request_date = $date_formatter->format($time->getRequestTime(), 'custom', 'Y-m-d'); + if (!empty($this->securityCoverageInfo['security_coverage_ending_warn_date']) && $this->securityCoverageInfo['security_coverage_ending_warn_date'] <= $request_date) { + $requirement['description']['coverage_message'] = [ + '#markup' => $this->t('Update to a supported minor version soon to continue receiving security updates.'), + '#suffix' => ' ', + ]; + $requirement['severity'] = REQUIREMENT_WARNING; + } + } + $requirement['description']['release_cycle_link'] = ['#markup' => $this->getReleaseCycleLink()]; + return $requirement; + } + + /** + * Gets the formatted message for a project with no security coverage. + * + * @return string + * The message for a version with no security coverage. + */ + private function getVersionNoSecurityCoverageMessage() { + return $this->t( + '<a href=":update_status_report">Update to a supported minor</a> as soon as possible to continue receiving security updates.', + [':update_status_report' => Url::fromRoute('update.status')->toString()] + ); + } + + /** + * Gets a link the release cycle page on drupal.org. + * + * @return string + * A link to the release cycle page on drupal.org. + */ + private function getReleaseCycleLink() { + return $this->t( + 'Visit the <a href=":url">release cycle overview</a> for more information on supported releases.', + [':url' => 'https://www.drupal.org/core/release-cycle-overview'] + ); + } + +} diff --git a/web/core/modules/update/src/UpdateFetcher.php b/web/core/modules/update/src/UpdateFetcher.php index 2b03c9c1011b00c89fb185c7dad7d3a2c843dd3a..05cce763a67d38b4884e499c523a9be6a4cb02af 100644 --- a/web/core/modules/update/src/UpdateFetcher.php +++ b/web/core/modules/update/src/UpdateFetcher.php @@ -77,7 +77,7 @@ public function fetchProjectData(array $project, $site_key = '') { public function buildFetchUrl(array $project, $site_key = '') { $name = $project['name']; $url = $this->getFetchBaseUrl($project); - $url .= '/' . $name . '/' . \Drupal::CORE_COMPATIBILITY; + $url .= '/' . $name . '/current'; // Only append usage information if we have a site key and the project is // enabled. We do not want to record usage statistics for disabled projects. diff --git a/web/core/modules/update/templates/update-version.html.twig b/web/core/modules/update/templates/update-version.html.twig index c21c4f0ba46fe24cf8300891ecd5f153bf3d8efc..decc9df6ec70c60a46c8d93030a765ff6973903c 100644 --- a/web/core/modules/update/templates/update-version.html.twig +++ b/web/core/modules/update/templates/update-version.html.twig @@ -6,11 +6,21 @@ * Available variables: * - attributes: HTML attributes suitable for a container element. * - title: The title of the project. + * - core_compatibility_details: Render array of core compatibility details. * - version: A list of data about the latest released version, containing: * - version: The version number. * - date: The date of the release. * - download_link: The URL for the downloadable file. * - release_link: The URL for the release notes. + * - core_compatible: A flag indicating whether the project is compatible + * with the currently installed version of Drupal core. This flag is not + * set for the Drupal core project itself. + * - core_compatibility_message: A message indicating the versions of Drupal + * core with which this project is compatible. This message is also + * contained within the 'core_compatibility_details' variable documented + * above. This message is not set for the Drupal core project itself. + * + * @see template_preprocess_update_version() * * @ingroup themeable */ @@ -24,12 +34,19 @@ </div> <div class="layout-column layout-column--half"> <ul class="project-update__version-links"> - <li class="project-update__download-link"> - <a href="{{ version.download_link }}">{{ 'Download'|t }}</a> - </li> + {% if version.core_compatible is not defined or version.core_compatible %} + <li class="project-update__download-link"> + <a href="{{ version.download_link }}">{{ 'Download'|t }}</a> + </li> + {% endif %} <li class="project-update__release-notes-link"> <a href="{{ version.release_link }}">{{ 'Release notes'|t }}</a> </li> + {% if core_compatibility_details %} + <li class="project-update__compatibility-details"> + {{ core_compatibility_details }} + </li> + {% endif %} </ul> </div> </div> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0-supported.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0-supported.xml new file mode 100644 index 0000000000000000000000000000000000000000..64feb6c8e7e33a72b4209945d3afe16bf01cb87c --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0-supported.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>AAA Update test</title> +<short_name>aaa_update_test</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>8.x-1.,8.x-2.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/aaa_update_test</link> + <terms> + <term><name>Projects</name><value>Modules</value></term> + </terms> +<releases> + <release> + <name>aaa_update_test 8.x-2.0</name> + <version>8.x-2.0</version> + <tag>8.x-2.0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-2.0.tar.gz</download_link> + <date>1250422521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-2.0-beta1</name> + <version>8.x-2.0-beta1</version> + <tag>8.x-2.0-beta1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-0-beta1-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-2.0-beta1.tar.gz</download_link> + <date>1250422521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-2.0-alpha1</name> + <version>8.x-2.0-alpha1</version> + <tag>8.x-2.0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-0-alpha1-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-2.0-alpha1.tar.gz</download_link> + <date>1250422521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.1</name> + <version>8.x-1.1</version> + <tag>8.x-1.1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> + <date>1250404525</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Unsupported</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.0</name> + <version>8.x-1.0</version> + <tag>8.x-1.0</tag> + <status>unpublished</status> + <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> + <date>1250404521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0-unsupported.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0-unsupported.xml new file mode 100644 index 0000000000000000000000000000000000000000..e6ca5f1fb6b4bc04c2ee26fdc75a54162fc8458f --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0-unsupported.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This XML file is the exact same as the file aaa_update_test.1_0-supported.xml +except 'supported_branches' in this file does not contain the '8.x-1.' branch. +Therefore, all the releases that start with '8.x-1.' are in an unsupported +branch. +--> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>AAA Update test</title> +<short_name>aaa_update_test</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>8.x-2.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/aaa_update_test</link> + <terms> + <term><name>Projects</name><value>Modules</value></term> + </terms> +<releases> + <release> + <name>aaa_update_test 8.x-2.0</name> + <version>8.x-2.0</version> + <tag>8.x-2.0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-2.0.tar.gz</download_link> + <date>1250422521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-2.0-beta1</name> + <version>8.x-2.0-beta1</version> + <tag>8.x-2.0-beta1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-0-beta1-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-2.0-beta1.tar.gz</download_link> + <date>1250422521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-2.0-alpha1</name> + <version>8.x-2.0-alpha1</version> + <tag>8.x-2.0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-0-alpha1-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-2.0-alpha1.tar.gz</download_link> + <date>1250422521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.1</name> + <version>8.x-1.1</version> + <tag>8.x-1.1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> + <date>1250404525</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Unsupported</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.0</name> + <version>8.x-1.0</version> + <tag>8.x-1.0</tag> + <status>unpublished</status> + <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> + <date>1250404521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0.xml index 82362fe84652daa772536aa3fcb9c424a0c5a712..8b7d5806a01d7026d32375447b217c3aad37c8ce 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_0.xml @@ -3,28 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-alpha1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-alpha1.xml index 61776abbdf7412045b549f5c69b5d249399c9006..1bedfeb36eb55cedd1f071de925fb9c8b5b8066d 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-alpha1.xml @@ -3,29 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> - <api_version>8.x</api_version> - <recommended_major>1</recommended_major> - <supported_majors>1</supported_majors> - <default_major>1</default_major> + <supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,14 +41,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1073781824</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-beta1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-beta1.xml index 4cb6e450a56a707603afac757fdc32baf87b52d6..9dd1b02e8e74c53dcf4490abaf6eff5712f3c81f 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1-beta1.xml @@ -3,29 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,15 +41,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -53,14 +54,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1073781824</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1.xml index 14e9e7c1699e071e070670f1a100c831782a3e44..7bd0bd8d74ede9602dd339a47d199ae654336fb4 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_1.xml @@ -3,28 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -34,15 +41,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -52,15 +54,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,14 +67,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-alpha1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-alpha1.xml index f9541c8f5f4f37b6e13c83ee8875c32b17c81440..151944a78be0718c3fc6a9a6a34440c6c1d4884e 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-alpha1.xml @@ -3,29 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.2-alpha1</name> <version>8.x-1.2-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-alpha1.tar.gz</download_link> <date>1250413521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,14 +41,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -52,15 +54,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,15 +67,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -88,14 +80,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-beta1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-beta1.xml index e166b3af98339bf6857e0c73aad25f3c1a1fb457..c10a3d1b6b5ca3cb73b2c1acf5b75245fc7dcb9f 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2-beta1.xml @@ -3,29 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.2-beta1</name> <version>8.x-1.2-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-beta1.tar.gz</download_link> <date>1250412521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,15 +41,10 @@ <name>aaa_update_test 8.x-1.2-alpha1</name> <version>8.x-1.2-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-alpha1.tar.gz</download_link> <date>1250413521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -53,14 +54,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,15 +67,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -88,15 +80,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -106,14 +93,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2.xml index d3d30934f744e4f49c02874c91a58bd29046d595..2d6c446def98798f31ed170cde5181555f9f902f 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.1_2.xml @@ -3,28 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2.tar.gz</download_link> <date>1250421521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -34,15 +41,10 @@ <name>aaa_update_test 8.x-1.2-beta1</name> <version>8.x-1.2-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-beta1.tar.gz</download_link> <date>1250412521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -52,15 +54,10 @@ <name>aaa_update_test 8.x-1.2-alpha1</name> <version>8.x-1.2-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-alpha1.tar.gz</download_link> <date>1250413521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,14 +67,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -87,15 +80,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -105,15 +93,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -123,14 +106,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-alpha1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-alpha1.xml index 799abdbd3dd0a741004b29ace92c95aa6218bdd2..a438a02d83a2370a65bbbfac6d8d90c2d62d5fc0 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-alpha1.xml @@ -3,29 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1,2</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.,8.x-2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-2.0-alpha1</name> <version>8.x-2.0-alpha1</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-2.0-alpha1.tar.gz</download_link> <date>1250422521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,14 +41,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2.tar.gz</download_link> <date>1250421521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -52,15 +54,10 @@ <name>aaa_update_test 8.x-1.2-beta1</name> <version>8.x-1.2-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-beta1.tar.gz</download_link> <date>1250412521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,15 +67,10 @@ <name>aaa_update_test 8.x-1.2-alpha1</name> <version>8.x-1.2-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-alpha1.tar.gz</download_link> <date>1250413521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -88,14 +80,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -105,15 +93,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -123,15 +106,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -141,14 +119,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-beta1.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-beta1.xml index e82a27f051df9a992d4cc99c3d4a8be9be29dc6d..fe29617beea8f6c6640d565956d6abdf438f2e7c 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0-beta1.xml @@ -3,29 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1,2</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.,8.x-2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-2.0-beta1</name> <version>8.x-2.0-beta1</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-2.0-beta1.tar.gz</download_link> - <date>1250422521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073782824</filesize> + <date>1250442521</date> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,15 +41,10 @@ <name>aaa_update_test 8.x-2.0-alpha1</name> <version>8.x-2.0-alpha1</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-2.0-alpha1.tar.gz</download_link> <date>1250422521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -53,14 +54,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2.tar.gz</download_link> <date>1250421521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,15 +67,10 @@ <name>aaa_update_test 8.x-1.2-beta1</name> <version>8.x-1.2-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-beta1.tar.gz</download_link> <date>1250412521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -88,15 +80,10 @@ <name>aaa_update_test 8.x-1.2-alpha1</name> <version>8.x-1.2-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-alpha1.tar.gz</download_link> <date>1250413521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -106,14 +93,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -123,15 +106,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -141,15 +119,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -159,14 +132,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0.xml index 240f0db4fb381450caaa84e188939e29d982ccfb..4ef7f99609d5322367185e11a111f825268a6257 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.2_0.xml @@ -3,28 +3,35 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1,2</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.,8.x-2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> <term><name>Projects</name><value>Modules</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>aaa_update_test 8.x-3.0</name> + <version>8.x-3.0</version> + <tag>DRUPAL-8--3-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-3-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8.x-3.0.tar.gz</download_link> + <date>1250426521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>aaa_update_test 8.x-2.0</name> <version>8.x-2.0</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-2.0.tar.gz</download_link> <date>1250422521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -34,15 +41,10 @@ <name>aaa_update_test 8.x-2.0-beta1</name> <version>8.x-2.0-beta1</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-2.0-beta1.tar.gz</download_link> <date>1250422521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073782824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -52,15 +54,10 @@ <name>aaa_update_test 8.x-2.0-alpha1</name> <version>8.x-2.0-alpha1</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-2.0-alpha1.tar.gz</download_link> <date>1250422521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -70,14 +67,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2.tar.gz</download_link> <date>1250421521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -87,15 +80,10 @@ <name>aaa_update_test 8.x-1.2-beta1</name> <version>8.x-1.2-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-beta1.tar.gz</download_link> <date>1250412521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -105,15 +93,10 @@ <name>aaa_update_test 8.x-1.2-alpha1</name> <version>8.x-1.2-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.2-alpha1.tar.gz</download_link> <date>1250413521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -123,14 +106,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073751824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -140,15 +119,10 @@ <name>aaa_update_test 8.x-1.1-beta1</name> <version>8.x-1.1-beta1</version> <tag>DRUPAL-8--1-1-beta1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-beta1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-beta1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -158,15 +132,10 @@ <name>aaa_update_test 8.x-1.1-alpha1</name> <version>8.x-1.1-alpha1</version> <tag>DRUPAL-8--1-1-alpha1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-alpha1-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.1-alpha1.tar.gz</download_link> <date>1250414521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073761824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -176,14 +145,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8.x-1.0.tar.gz</download_link> <date>1250404521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073781824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.8.x-1.2.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.8.x-1.2.xml new file mode 100644 index 0000000000000000000000000000000000000000..670fc5c5d2cdd0a431fb161d0b700eda2228457f --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.8.x-1.2.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>AAA Update test</title> + <short_name>aaa_update_test</short_name> + <dc:creator>Drupal</dc:creator> + <api_version>8.x</api_version> + <supported_branches>8.x-1.</supported_branches> + <project_status>published</project_status> + <link>http://example.com/project/aaa_update_test</link> + <terms> + <term><name>Projects</name><value>Modules</value></term> + </terms> + <releases> + <release> + <name>aaa_update_test 8.x-1.3-beta1</name> + <version>8.x-1.3-beta1</version> + <tag>DRUPAL-8--1-3-beta1</tag> + <core_compatibility>8.0.0 || 8.1.1</core_compatibility> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-3-beta1-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-1-3-beta1.tar.gz</download_link> + <date>1250624521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.2</name> + <version>8.x-1.2</version> + <tag>DRUPAL-8--1-2</tag> + <core_compatibility>^8</core_compatibility> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-1-2.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.1</name> + <version>8.x-1.1</version> + <tag>DRUPAL-8--1-1</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-1-1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.0</name> + <version>8.x-1.0</version> + <tag>DRUPAL-8--1-0</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.core_compatibility.8.x-1.2_8.x-2.2.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.core_compatibility.8.x-1.2_8.x-2.2.xml new file mode 100644 index 0000000000000000000000000000000000000000..3cad5b1c4c9413fa23e057a05b89fc6e7f2cd90a --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.core_compatibility.8.x-1.2_8.x-2.2.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>AAA Update test</title> + <short_name>aaa_update_test</short_name> + <dc:creator>Drupal</dc:creator> + <supported_branches>8.x-1.,8.x-2.</supported_branches> + <project_status>published</project_status> + <link>http://example.com/project/aaa_update_test</link> + <terms> + <term><name>Projects</name><value>Modules</value></term> + </terms> + <releases> + <release> + <name>aaa_update_test 8.x-2.2</name> + <version>8.x-2.2</version> + <tag>8.x-2.2</tag> + <core_compatibility>^8.1.1</core_compatibility> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-2-2-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-2-2.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security update</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.2</name> + <version>8.x-1.2</version> + <tag>8.x-2.2</tag> + <core_compatibility>^8.1.0</core_compatibility> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-1-2.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security update</value></term> + </terms> + </release> + <release> + <name>aaa_update_test 8.x-1.0</name> + <version>8.x-1.0</version> + <tag>8.x-2.2</tag> + <status>published</status> + <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> + <download_link>http://example.com/aaa_update_test-8-x-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.1_8.x-1.2.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.1_8.x-1.2.xml index 560c82bf05b5bfdc72bbce5619645833aba5adbb..21e1642f22ab67ba9cf2236f5e8145bec8033ab5 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.1_8.x-1.2.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.1_8.x-1.2.xml @@ -3,10 +3,7 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> - <api_version>8.x</api_version> - <recommended_major>1</recommended_major> - <supported_majors>1</supported_majors> - <default_major>1</default_major> + <supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> @@ -17,14 +14,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-2</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-2.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,14 +28,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,14 +43,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2.xml index 0ebb766dd2f6e3d818f77cedf9f29e4e4d3fe56e..78060f3dbab28b2783f374211dde61d0617f984d 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2.xml @@ -3,10 +3,7 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> - <api_version>8.x</api_version> - <recommended_major>1</recommended_major> - <supported_majors>1</supported_majors> - <default_major>1</default_major> + <supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> @@ -17,14 +14,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-2</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-2.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,14 +28,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -53,14 +42,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2_8.x-2.2.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2_8.x-2.2.xml index ee5265901a448bef3ece100fc4e3cbc08c0b86ea..a820b29ac7db28b0ee3568c843c3d166f9639005 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2_8.x-2.2.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-1.2_8.x-2.2.xml @@ -3,10 +3,7 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> - <api_version>8.x</api_version> - <recommended_major>2</recommended_major> - <supported_majors>1,2</supported_majors> - <default_major>2</default_major> + <supported_branches>8.x-1.,8.x-2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> @@ -17,15 +14,10 @@ <name>aaa_update_test 8.x-3.0-beta2</name> <version>8.x-3.0-beta2</version> <tag>8.x-3.0-beta2</tag> - <version_major>3</version_major> - <version_patch>0</version_patch> - <version_extra>beta2</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-3-0-beta2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-3-0-beta2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -38,15 +30,10 @@ <name>aaa_update_test 8.x-3.0-beta1</name> <version>8.x-3.0-beta1</version> <tag>8.x-3.0-beta1</tag> - <version_major>3</version_major> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-3-0-beta1</release_link> <download_link>http://example.com/aaa_update_test--8-x-3-0-beta1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Insecure</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -60,14 +47,10 @@ <name>aaa_update_test 8.x-2.2</name> <version>8.x-2.2</version> <tag>DRUPAL-8--2-2</tag> - <version_major>2</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-2-2.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -78,14 +61,10 @@ <name>aaa_update_test 8.x-2.1</name> <version>8.x-2.1</version> <tag>DRUPAL-8--2-1</tag> - <version_major>2</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-1-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-2-1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -97,14 +76,10 @@ <name>aaa_update_test 8.x-2.0</name> <version>8.x-2.0</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-2-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -115,14 +90,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-2</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-2.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -133,14 +104,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -151,14 +118,10 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-2.2_1.x_secure.xml b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-2.2_1.x_secure.xml index a42b58d5c540512b854f9992070474155d3c6fbc..a696eacc50bafd72878d13a971738532c488d19f 100644 --- a/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-2.2_1.x_secure.xml +++ b/web/core/modules/update/tests/modules/update_test/aaa_update_test.sec.8.x-2.2_1.x_secure.xml @@ -3,10 +3,7 @@ <title>AAA Update test</title> <short_name>aaa_update_test</short_name> <dc:creator>Drupal</dc:creator> - <api_version>8.x</api_version> - <recommended_major>2</recommended_major> - <supported_majors>1,2</supported_majors> - <default_major>2</default_major> + <supported_branches>8.x-1.,8.x-2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/aaa_update_test</link> <terms> @@ -17,14 +14,10 @@ <name>aaa_update_test 8.x-2.2</name> <version>8.x-2.2</version> <tag>DRUPAL-8--2-2</tag> - <version_major>2</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-2-2.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,14 +28,10 @@ <name>aaa_update_test 8.x-2.1</name> <version>8.x-2.1</version> <tag>DRUPAL-8--2-1</tag> - <version_major>2</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-1-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-2-1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,14 +43,10 @@ <name>aaa_update_test 8.x-2.0</name> <version>8.x-2.0</version> <tag>DRUPAL-8--2-0</tag> - <version_major>2</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-2-0-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-2-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -72,14 +57,10 @@ <name>aaa_update_test 8.x-1.2</name> <version>8.x-1.2</version> <tag>DRUPAL-8--1-2</tag> - <version_major>1</version_major> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-2-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-2.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -89,14 +70,10 @@ <name>aaa_update_test 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-1-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -106,15 +83,11 @@ <name>aaa_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-8--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/aaa_update_test-8-x-1-0-release</release_link> <download_link>http://example.com/aaa_update_test-8-x-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> - <terms> + <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> </terms> diff --git a/web/core/modules/update/tests/modules/update_test/bbb_update_test.1_0.xml b/web/core/modules/update/tests/modules/update_test/bbb_update_test.1_0.xml index 8d705b5f9697cd7a170bfff79b65c4281798df16..43ebaf14ced023272df047a19b055c43d909417c 100644 --- a/web/core/modules/update/tests/modules/update_test/bbb_update_test.1_0.xml +++ b/web/core/modules/update/tests/modules/update_test/bbb_update_test.1_0.xml @@ -3,10 +3,7 @@ <title>BBB Update test</title> <short_name>bbb_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/bbb_update_test</link> <terms> @@ -17,14 +14,10 @@ <name>bbb_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-7--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/bbb_update_test-7-x-1-0-release</release_link> <download_link>http://example.com/bbb_update_test-8.x-1.0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/ccc_update_test.1_0.xml b/web/core/modules/update/tests/modules/update_test/ccc_update_test.1_0.xml index 82764c2c33d58f3576ace4a672bf4d1eb12db704..3076229a4bb193eb3439e9fa79df56c33d32c27b 100644 --- a/web/core/modules/update/tests/modules/update_test/ccc_update_test.1_0.xml +++ b/web/core/modules/update/tests/modules/update_test/ccc_update_test.1_0.xml @@ -3,10 +3,7 @@ <title>CCC Update test</title> <short_name>ccc_update_test</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/ccc_update_test</link> <terms> @@ -17,14 +14,10 @@ <name>ccc_update_test 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-7--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/ccc_update_test-7-x-1-0-release</release_link> <download_link>http://example.com/ccc_update_test-8.x-1.0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.0.0-alpha1.xml b/web/core/modules/update/tests/modules/update_test/drupal.0.0-alpha1.xml index e463b72e3da638fb7f8c981cdfcc66e2b1e0e9d9..a39ed092c7a0c3f06ae567959d19b706a1603c18 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.0.0-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.0.0-alpha1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.0.0-beta1.xml b/web/core/modules/update/tests/modules/update_test/drupal.0.0-beta1.xml index b3dc3bf2aaad6ebd002df6317a99d6aec9f8fd5d..7dd0ae59059360ee80d6166a5cd5ac7c2d643b98 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.0.0-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.0.0-beta1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,16 +41,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.0.0.xml b/web/core/modules/update/tests/modules/update_test/drupal.0.0.xml index ac450660d53834db25bb784b29c98b40f071149b..126301f4c34ea4cab7075b9edee225e37cb78ca3 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.0.0.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.0.0.xml @@ -3,29 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,16 +41,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.0.1-alpha1.xml b/web/core/modules/update/tests/modules/update_test/drupal.0.1-alpha1.xml index 150136c67d6ea67bba780245365d63b15653042b..6e714b6267d205ab4cce35772e26911a13e6b9d9 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.0.1-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.0.1-alpha1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +41,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,16 +67,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.0.1-beta1.xml b/web/core/modules/update/tests/modules/update_test/drupal.0.1-beta1.xml index 25c9f7023eb5b44ad2ab6a097e81bdab9fa95405..ae59519164f9e7881bfee49505a12896e786a0e5 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.0.1-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.0.1-beta1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,16 +41,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -55,15 +54,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,16 +67,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -92,16 +80,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.0.1.xml b/web/core/modules/update/tests/modules/update_test/drupal.0.1.xml index ea00c15c9013817e447a5230658417746dcd006b..f4224a0d36bcf55a41aa3d67841b55bb9f849b72 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.0.1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.0.1.xml @@ -3,29 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,16 +41,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,15 +67,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -91,16 +80,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -110,16 +93,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.0-alpha1.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.0-alpha1.xml index fe734a844b3244bad9c74570fa2ec387fb3d27d8..c409676ea24427c25cc27648ec3d4b5065cfefad 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.1.0-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.0-alpha1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.1.0-alpha1</name> <version>8.1.0-alpha1</version> <tag>DRUPAL-8-1-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +41,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,16 +67,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -92,15 +80,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -110,16 +93,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -129,16 +106,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.0-beta1.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.0-beta1.xml index fa65c5e92e158834fdad31d8597682c830035fbd..b4b5e8a77ebf5d6cf2bbd2fd6e00ba3eeaf55d8f 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.1.0-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.0-beta1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.1.0-beta1</name> <version>8.1.0-beta1</version> <tag>DRUPAL-8-1-0-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,16 +41,10 @@ <name>Drupal 8.1.0-alpha1</name> <version>8.1.0-alpha1</version> <tag>DRUPAL-8-1-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -55,15 +54,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,16 +67,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -92,16 +80,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -111,15 +93,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -129,16 +106,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -148,16 +119,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.0-unsupported.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.0-unsupported.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d7f1bf6cdde586ff1275cdd15f71114638d849e --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.0-unsupported.xml @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This XML file is the exact same as the file drupal.1.xml except +'supported_branches' in this file does not contain the '8.0.' branch. Therefore, +all the releases that start with '8.0.' are in an unsupported branch. +--> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>8.1.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>8.1.0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0-beta1</name> + <version>8.1.0-beta1</version> + <tag>8.1.0-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> + <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0-alpha1</name> + <version>8.1.0-alpha1</version> + <tag>8.1.0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.3</name> + <version>8.0.3</version> + <tag>8.0.3</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-3-release</release_link> + <download_link>http://example.com/drupal-8-0-3.tar.gz</download_link> + <date>1250424585</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Unsupported</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.2</name> + <version>8.0.2</version> + <tag>8.0.2</tag> + <status>unpublished</status> + <release_link>http://example.com/drupal-8-0-2-release</release_link> + <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1</name> + <version>8.0.1</version> + <tag>8.0.1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-release</release_link> + <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1-beta1</name> + <version>8.0.1-beta1</version> + <tag>8.0.1-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> + <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1-alpha1</name> + <version>8.0.1-alpha1</version> + <tag>8.0.1-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>8.0.0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0-beta1</name> + <version>8.0.0-beta1</version> + <tag>8.0.0-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> + <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0-alpha1</name> + <version>8.0.0-alpha1</version> + <tag>8.0.0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.0.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.0.xml index 0e6a40c72cdd4763dbd9566dd8723d79ba48d8b3..3ca5ec64ec840cd2de7473559071986bb01c0c2f 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.1.0.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.0.xml @@ -3,29 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,16 +41,10 @@ <name>Drupal 8.1.0-beta1</name> <version>8.1.0-beta1</version> <tag>DRUPAL-8-1-0-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,37 @@ <name>Drupal 8.1.0-alpha1</name> <version>8.1.0-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.3</name> + <version>8.0.3</version> + <tag>8.0.3</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-3-release</release_link> + <download_link>http://example.com/drupal-8-0-3.tar.gz</download_link> + <date>1250424585</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Unsupported</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.2</name> + <version>8.0.2</version> + <tag>8.0.2</tag> + <status>unpublished</status> + <release_link>http://example.com/drupal-8-0-2-release</release_link> + <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> + <date>1250424581</date> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,15 +94,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -91,16 +107,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -110,16 +120,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -129,15 +133,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -147,16 +146,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -166,16 +159,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1-core_compatibility.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1-core_compatibility.xml new file mode 100644 index 0000000000000000000000000000000000000000..63d64ad4e22a2f9a10d30ecb22f4161f993acd7a --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1-core_compatibility.xml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>8.0.,8.1.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 8.1.1-alpha1</name> + <version>8.1.1-alpha1</version> + <tag>DRUPAL-8-1-1-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-1-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-1-1-alpha1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>DRUPAL-8-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0-beta1</name> + <version>8.1.0-beta1</version> + <tag>DRUPAL-8-0-1-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> + <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0-alpha1</name> + <version>8.1.0-alpha1</version> + <tag>DRUPAL-8-1-0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1</name> + <version>8.0.1</version> + <tag>DRUPAL-8-0-1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-release</release_link> + <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1-beta1</name> + <version>8.0.1-beta1</version> + <tag>DRUPAL-8-0-1-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> + <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1-alpha1</name> + <version>8.0.1-alpha1</version> + <tag>DRUPAL-8-0-1-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>DRUPAL-8-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0-beta1</name> + <version>8.0.0-beta1</version> + <tag>DRUPAL-8-0-0-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> + <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0-alpha1</name> + <version>8.0.0-alpha1</version> + <tag>DRUPAL-8-0-0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1.xml index 0356c8d978920fbe23a30b85a7a09db9c87dcb42..2b872e17d3c1207edbab29b50205c15ef1a7be2d 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.1-alpha1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.1.1-alpha1</name> <version>8.1.1-alpha1</version> <tag>DRUPAL-8-1-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-1-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +41,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,10 @@ <name>Drupal 8.1.0-beta1</name> <version>8.1.0-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,16 +67,10 @@ <name>Drupal 8.1.0-alpha1</name> <version>8.1.0-alpha1</version> <tag>DRUPAL-8-1-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -92,15 +80,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -110,16 +93,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -129,16 +106,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -148,15 +119,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -166,16 +132,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -185,16 +145,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.1-beta1.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.1-beta1.xml index abeef7ea4162cea7c231fdb6f3c61318e572cd0a..cd73a57aef5d9ceb12d2df4ef61def8f2b5cff9d 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.1.1-beta1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.1-beta1.xml @@ -3,30 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.1.1-beta1</name> <version>8.1.1-beta1</version> <tag>DRUPAL-8-1-1-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-1-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,16 +41,10 @@ <name>Drupal 8.1.1-alpha1</name> <version>8.1.1-alpha1</version> <tag>DRUPAL-8-1-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-1-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -55,15 +54,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,16 +67,10 @@ <name>Drupal 8.1.0-beta1</name> <version>8.1.0-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -92,16 +80,10 @@ <name>Drupal 8.1.0-alpha1</name> <version>8.1.0-alpha1</version> <tag>DRUPAL-8-1-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -111,15 +93,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -129,16 +106,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -148,16 +119,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -167,15 +132,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -185,16 +145,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -204,16 +158,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.1-core_compatibility.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.1-core_compatibility.xml new file mode 100644 index 0000000000000000000000000000000000000000..e295cb61528fac6c36d88ab2d71e2bf3b9dbb61e --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.1-core_compatibility.xml @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>8.0.,8.1.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 8.1.1</name> + <version>8.1.1</version> + <tag>DRUPAL-8-1-1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-1-release</release_link> + <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.1-beta1</name> + <version>8.1.1-beta1</version> + <tag>DRUPAL-8-1-1-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-1-beta1-release</release_link> + <download_link>http://example.com/drupal-8-1-1-beta1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.1-alpha1</name> + <version>8.1.1-alpha1</version> + <tag>DRUPAL-8-1-1-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-1-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-1-1-alpha1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>DRUPAL-8-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0-beta1</name> + <version>8.1.0-beta1</version> + <tag>DRUPAL-8-0-1-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> + <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0-alpha1</name> + <version>8.1.0-alpha1</version> + <tag>DRUPAL-8-1-0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1</name> + <version>8.0.1</version> + <tag>DRUPAL-8-0-1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-release</release_link> + <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1-beta1</name> + <version>8.0.1-beta1</version> + <tag>DRUPAL-8-0-1-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> + <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1-alpha1</name> + <version>8.0.1-alpha1</version> + <tag>DRUPAL-8-0-1-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>DRUPAL-8-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0-beta1</name> + <version>8.0.0-beta1</version> + <tag>DRUPAL-8-0-0-beta1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> + <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0-alpha1</name> + <version>8.0.0-alpha1</version> + <tag>DRUPAL-8-0-0-alpha1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.1.1.xml b/web/core/modules/update/tests/modules/update_test/drupal.1.1.xml index a588bdc466a453d888cabf9630f0237d01cec526..0164ec4fdfaf9d59726f041f11e042ca6535c8a4 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.1.1.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.1.1.xml @@ -3,29 +3,35 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> <term><name>Projects</name><value>Drupal project</value></term> </terms> <releases> + <release> + <!-- This release is not in a supported branch; therefore it should not be recommended. --> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> <release> <name>Drupal 8.1.1</name> <version>8.1.1</version> <tag>DRUPAL-8-1-1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-1-release</release_link> <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,16 +41,10 @@ <name>Drupal 8.1.1-beta1</name> <version>8.1.1-beta1</version> <tag>DRUPAL-8-1-1-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-1-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -54,16 +54,10 @@ <name>Drupal 8.1.1-alpha1</name> <version>8.1.1-alpha1</version> <tag>DRUPAL-8-1-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-1-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -73,15 +67,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -91,16 +80,10 @@ <name>Drupal 8.1.0-beta1</name> <version>8.1.0-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -110,16 +93,10 @@ <name>Drupal 8.1.0-alpha1</name> <version>8.1.0-alpha1</version> <tag>DRUPAL-8-1-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -129,15 +106,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -147,16 +119,10 @@ <name>Drupal 8.0.1-beta1</name> <version>8.0.1-beta1</version> <tag>DRUPAL-8-0-1-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -166,16 +132,10 @@ <name>Drupal 8.0.1-alpha1</name> <version>8.0.1-alpha1</version> <tag>DRUPAL-8-0-1-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -185,15 +145,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -203,16 +158,10 @@ <name>Drupal 8.0.0-beta1</name> <version>8.0.0-beta1</version> <tag>DRUPAL-8-0-0-beta1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -222,16 +171,10 @@ <name>Drupal 8.0.0-alpha1</name> <version>8.0.0-alpha1</version> <tag>DRUPAL-8-0-0-alpha1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link> <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.9.xml b/web/core/modules/update/tests/modules/update_test/drupal.9.xml index c17b426a7502a9aeae66ca6b4e02cf51141c696c..e5fd89e84f872c8e21923b0e6ef18c56ca5e4a1b 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.9.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.9.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>9.x</api_version> -<recommended_major>9</recommended_major> -<supported_majors>9</supported_majors> -<default_major>9</default_major> +<supported_branches>9.0.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,15 +14,10 @@ <name>Drupal 9.0.0</name> <version>9.0.0</version> <tag>DRUPAL-9-0-0</tag> - <version_major>9</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-9-0-0-release</release_link> <download_link>http://example.com/drupal-9-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.dev.xml b/web/core/modules/update/tests/modules/update_test/drupal.dev.xml index 4ab26bd2db6e91f25798e203fa2b6f17a0c61823..55a5c66c7acfa51045f7145e69fec0cdcb613a83 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.dev.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.dev.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,15 +14,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -35,15 +27,10 @@ <name>Drupal 8.0.x-dev</name> <version>8.0.x-dev</version> <tag>DRUPAL-8-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_extra>dev</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-0-x-dev-release</release_link> <download_link>http://example.com/drupal-8.0.x-dev.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> </terms> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.1_0.2.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.1_0.2.xml index ba954ae42792ce7a074b10f0299ae12dcf420419..17a9b06f76b78869648632f4403178ef818abdec 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.1_0.2.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.1_0.2.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,15 +14,10 @@ <name>Drupal 8.0.2</name> <version>8.0.2</version> <tag>DRUPAL-8-0-2</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-2-release</release_link> <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +28,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -56,15 +43,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2-b.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2-b.xml index a971ca73ebe29669655061f2bb503524e90b2f2b..e3e8f6ab72b9d81e9f9b5c673d35aff270bc5cf6 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2-b.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2-b.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.,8.2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,16 +14,10 @@ <name>drupal 8.2.0-rc2</name> <version>8.2.0-rc2</version> <tag>8.2.0-rc2</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>rc2</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-rc2-release</release_link> <download_link>http://example.com/drupal-8-2-0-rc2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -39,16 +30,10 @@ <name>drupal 8.2.0-rc1</name> <version>8.2.0-rc1</version> <tag>8.2.0-rc1</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>rc1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-rc1-release</release_link> <download_link>http://example.com/drupal-8-2-0-rc1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -61,16 +46,10 @@ <name>drupal 8.2.0-beta2</name> <version>8.2.0-beta2</version> <tag>8.2.0-beta2</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>beta2</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-beta2-release</release_link> <download_link>http://example.com/drupal-8-2-0-beta2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -83,16 +62,10 @@ <name>drupal 8.2.0-beta1</name> <version>8.2.0-beta1</version> <tag>8.2.0-beta1</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-2-0-beta1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -105,16 +78,10 @@ <name>drupal 8.2.0-alpha2</name> <version>8.2.0-alpha2</version> <tag>8.2.0-alpha2</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha2</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-alpha2-release</release_link> <download_link>http://example.com/drupal-8-2-0-alpha2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -127,16 +94,10 @@ <name>drupal 8.2.0-alpha1</name> <version>8.2.0-alpha1</version> <tag>8.2.0-alpha1</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8.2.0-alpha1</release_link> <download_link>http://example.com/drupal-8-2-0-alpha1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -149,15 +110,10 @@ <name>Drupal 8.1.2</name> <version>8.1.2</version> <tag>DRUPAL-8-1-2</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-2-release</release_link> <download_link>http://example.com/drupal-8-1-2.tar.gz</download_link> <date>1250424526</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -168,15 +124,10 @@ <name>Drupal 8.1.1</name> <version>8.1.1</version> <tag>DRUPAL-8-1-1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-1-release</release_link> <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> <date>1250424525</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -187,15 +138,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424524</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -206,15 +152,10 @@ <name>Drupal 8.0.2</name> <version>8.0.2</version> <tag>DRUPAL-8-0-2</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-2-release</release_link> <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> <date>1250424523</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -225,15 +166,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424522</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -244,15 +180,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2.xml index bc422deb6f29d81fec479b25fa921effa8e19e24..dd723e98485812e113ef69b3c1a6c172d0366b87 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2-rc2.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.,8.2.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,16 +14,10 @@ <name>drupal 8.2.0-rc2</name> <version>8.2.0-rc2</version> <tag>8.2.0-rc2</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>rc2</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-rc2-release</release_link> <download_link>http://example.com/drupal-8-2-0-rc2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -40,16 +31,10 @@ <name>drupal 8.2.0-rc1</name> <version>8.2.0-rc1</version> <tag>8.2.0-rc1</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>rc1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-rc1-release</release_link> <download_link>http://example.com/drupal-8-2-0-rc1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Insecure</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -63,16 +48,10 @@ <name>drupal 8.2.0-beta2</name> <version>8.2.0-beta2</version> <tag>8.2.0-beta2</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>beta2</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-beta2-release</release_link> <download_link>http://example.com/drupal-8-2-0-beta2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -86,16 +65,10 @@ <name>drupal 8.2.0-beta1</name> <version>8.2.0-beta1</version> <tag>8.2.0-beta1</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>beta1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-beta1-release</release_link> <download_link>http://example.com/drupal-8-2-0-beta1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Insecure</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -109,16 +82,10 @@ <name>drupal 8.2.0-alpha2</name> <version>8.2.0-alpha2</version> <tag>8.2.0-alpha2</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha2</version_extra> <status>published</status> <release_link>http://example.com/drupal-8-2-0-alpha2-release</release_link> <download_link>http://example.com/drupal-8-2-0-alpha2.tar.gz</download_link> <date>1533298080</date> - <mdhash>2387284145e34a19fc45e03c258a2831</mdhash> - <filesize>16209911</filesize> <terms> <term><name>Release type</name><value>Bug fixes</value></term> <term><name>Release type</name><value>New features</value></term> @@ -132,16 +99,10 @@ <name>drupal 8.2.0-alpha1</name> <version>8.2.0-alpha1</version> <tag>8.2.0-alpha1</tag> - <version_major>8</version_major> - <version_minor>2</version_minor> - <version_patch>0</version_patch> - <version_extra>alpha1</version_extra> <status>published</status> <release_link>http://example.com/drupal-8.2.0-alpha1</release_link> <download_link>http://example.com/drupal-8-2-0-alpha1.tar.gz</download_link> <date>1533270485</date> - <mdhash>3d70ae568dd8f7100082b8c58bc8d1fe</mdhash> - <filesize>16209123</filesize> <terms> <term><name>Release type</name><value>Insecure</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -155,15 +116,10 @@ <name>Drupal 8.1.2</name> <version>8.1.2</version> <tag>DRUPAL-8-1-2</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-2-release</release_link> <download_link>http://example.com/drupal-8-1-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -174,15 +130,10 @@ <name>Drupal 8.1.1</name> <version>8.1.1</version> <tag>DRUPAL-8-1-1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-1-release</release_link> <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -193,15 +144,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -212,15 +158,10 @@ <name>Drupal 8.0.2</name> <version>8.0.2</version> <tag>DRUPAL-8-0-2</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-2-release</release_link> <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -231,15 +172,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -250,15 +186,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2.xml index 0b9bbce63222af998d34d43f2ed38b5fb0260315..f77cec76dec9fd52e3d0639a555b3aa0e53f4171 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.0.2.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,15 +14,10 @@ <name>Drupal 8.0.2</name> <version>8.0.2</version> <tag>DRUPAL-8-0-2</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-2-release</release_link> <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +28,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -55,15 +42,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2.xml index 8665e46b36112592d602cfc554690216cfe892c2..8884a876d2c60e62dd8eec91206430aadebe1ed5 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,15 +14,10 @@ <name>Drupal 8.1.2</name> <version>8.1.2</version> <tag>DRUPAL-8-1-2</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-2-release</release_link> <download_link>http://example.com/drupal-8-1-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +28,10 @@ <name>Drupal 8.1.1</name> <version>8.1.1</version> <tag>DRUPAL-8-1-1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-1-release</release_link> <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -55,15 +42,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -74,15 +56,10 @@ <name>Drupal 8.0.2</name> <version>8.0.2</version> <tag>DRUPAL-8-0-2</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-2-release</release_link> <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -92,15 +69,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -110,15 +82,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure-unsupported.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure-unsupported.xml new file mode 100644 index 0000000000000000000000000000000000000000..102c4211d988ba1fb8428bb5ee85520f3157d679 --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure-unsupported.xml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +This XML file is the exact same as the file drupal.sec.1.2_insecure.xml except +'supported_branches' in this file does not contain the '8.0.' branch. Therefore, +all the releases that start with '8.0.' are in an unsupported branch. +--> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>8.1.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 8.1.2</name> + <version>8.1.2</version> + <tag>8.1.2</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-2-release</release_link> + <download_link>http://example.com/drupal-8-1-2.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security update</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.1</name> + <version>8.1.1</version> + <tag>8.1.1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-1-release</release_link> + <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>8.1.0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.2</name> + <version>8.0.2</version> + <tag>8.0.2</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-2-release</release_link> + <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.1</name> + <version>8.0.1</version> + <tag>8.0.1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-1-release</release_link> + <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> + <date>1250424581</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>8.0.0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> +</releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure.xml index dadad421bc27ae81b62e37f1e7a020352de9e3e1..7f915dd476d8d09d8d13243b2308ee6f28895263 100644 --- a/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure.xml +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.1.2_insecure.xml @@ -3,10 +3,7 @@ <title>Drupal</title> <short_name>drupal</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>8</recommended_major> -<supported_majors>8</supported_majors> -<default_major>8</default_major> +<supported_branches>8.0.,8.1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/drupal</link> <terms> @@ -17,15 +14,10 @@ <name>Drupal 8.1.2</name> <version>8.1.2</version> <tag>DRUPAL-8-1-2</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-2-release</release_link> <download_link>http://example.com/drupal-8-1-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -36,15 +28,10 @@ <name>Drupal 8.1.1</name> <version>8.1.1</version> <tag>DRUPAL-8-1-1</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-1-release</release_link> <download_link>http://example.com/drupal-8-1-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -55,15 +42,10 @@ <name>Drupal 8.1.0</name> <version>8.1.0</version> <tag>DRUPAL-8-1-0</tag> - <version_major>8</version_major> - <version_minor>1</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-1-0-release</release_link> <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -74,15 +56,10 @@ <name>Drupal 8.0.2</name> <version>8.0.2</version> <tag>DRUPAL-8-0-2</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>2</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-2-release</release_link> <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link> <date>1250424641</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>4294967296</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -93,15 +70,10 @@ <name>Drupal 8.0.1</name> <version>8.0.1</version> <tag>DRUPAL-8-0-1</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-1-release</release_link> <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link> <date>1250424581</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>2147483648</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> @@ -112,15 +84,10 @@ <name>Drupal 8.0.0</name> <version>8.0.0</version> <tag>DRUPAL-8-0-0</tag> - <version_major>8</version_major> - <version_minor>0</version_minor> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/drupal-8-0-0-release</release_link> <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> <date>1250424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d900f23fd56fe258d483455930783c1076f12a9 --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>Drupal</title> + <short_name>drupal</short_name> + <dc:creator>Drupal</dc:creator> + <api_version>8.x</api_version> + <recommended_major>8</recommended_major> + <supported_majors>8</supported_majors> + <default_major>8</default_major> + <project_status>published</project_status> + <link>http://example.com/project/drupal</link> + <terms><term><name>Projects</name><value>Drupal project</value></term></terms> + <releases> + <release> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>drupal 8.2.0-beta2</name> + <version>8.2.0-beta2</version> + <tag>8.2.0-beta2</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-beta2-release</release_link> + <download_link>http://example.com/drupal-8-2-0-beta2.tar.gz</download_link> + <date>1533298080</date> + <terms> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>New features</value></term> + </terms> + <security> + Beta releases are not covered by Drupal security advisories. + </security> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>DRUPAL-8-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>DRUPAL-8-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0_3.0-rc1.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0_3.0-rc1.xml new file mode 100644 index 0000000000000000000000000000000000000000..363cad4d6ff717965760b23ca4a0e4f34a6942c8 --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0_3.0-rc1.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>Drupal</title> + <short_name>drupal</short_name> + <dc:creator>Drupal</dc:creator> + <api_version>8.x</api_version> + <recommended_major>8</recommended_major> + <supported_majors>8</supported_majors> + <default_major>8</default_major> + <project_status>published</project_status> + <link>http://example.com/project/drupal</link> + <terms><term><name>Projects</name><value>Drupal project</value></term></terms> + <releases> + <release> + <name>drupal 8.3.0-rc1</name> + <version>8.3.0-rc1</version> + <tag>8.3.0-rc1</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-3-0-rc1-release</release_link> + <download_link>http://example.com/drupal-8-3-0-rc1.tar.gz</download_link> + <date>1533270485</date> + <terms> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>New features</value></term> + </terms> + <security> + RC releases are not covered by Drupal security advisories. + </security> + </release> + <release> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>drupal 8.2.0-beta2</name> + <version>8.2.0-beta2</version> + <tag>8.2.0-beta2</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-beta2-release</release_link> + <download_link>http://example.com/drupal-8-2-0-beta2.tar.gz</download_link> + <date>1533298080</date> + <terms> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>New features</value></term> + </terms> + <security> + Beta releases are not covered by Drupal security advisories. + </security> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>DRUPAL-8-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>DRUPAL-8-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0_9.0.0.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0_9.0.0.xml new file mode 100644 index 0000000000000000000000000000000000000000..4c8b79b5639219adf24b55dd15b29db21c67e6cd --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.2.0_9.0.0.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>Drupal</title> + <short_name>drupal</short_name> + <dc:creator>Drupal</dc:creator> + <api_version>8.x</api_version> + <recommended_major>8</recommended_major> + <supported_majors>8</supported_majors> + <default_major>8</default_major> + <project_status>published</project_status> + <link>http://example.com/project/drupal</link> + <terms><term><name>Projects</name><value>Drupal project</value></term></terms> + <releases> + <release> + <name>Drupal 9.0.0</name> + <version>9.0.0</version> + <tag>DRUPAL-9-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-9-0-0-release</release_link> + <download_link>http://example.com/drupal-9-0-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.3.0</name> + <version>8.3.0</version> + <tag>DRUPAL-8-3-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-3-0-release</release_link> + <download_link>http://example.com/drupal-8-3-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.2.0</name> + <version>8.2.0</version> + <tag>DRUPAL-8-2-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-release</release_link> + <download_link>http://example.com/drupal-8-2-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>drupal 8.2.0-beta2</name> + <version>8.2.0-beta2</version> + <tag>8.2.0-beta2</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-2-0-beta2-release</release_link> + <download_link>http://example.com/drupal-8-2-0-beta2.tar.gz</download_link> + <date>1533298080</date> + <terms> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>New features</value></term> + </terms> + <security> + Beta releases are not covered by Drupal security advisories. + </security> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>DRUPAL-8-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>DRUPAL-8-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.9.0.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.9.0.xml new file mode 100644 index 0000000000000000000000000000000000000000..46659eb49ac3d5d234725d7a9285206d625d0c4d --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.9.0.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>Drupal</title> + <short_name>drupal</short_name> + <dc:creator>Drupal</dc:creator> + <api_version>8.x</api_version> + <recommended_major>8</recommended_major> + <supported_majors>8,9</supported_majors> + <default_major>8</default_major> + <project_status>published</project_status> + <link>http://example.com/project/drupal</link> + <terms><term><name>Projects</name><value>Drupal project</value></term></terms> + <releases> + <release> + <name>Drupal 8.9.0</name> + <version>8.9.0</version> + <tag>DRUPAL-8-9-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-9-0-release</release_link> + <download_link>http://example.com/drupal-8-9-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>drupal 8.9.0-beta2</name> + <version>8.9.0-beta2</version> + <tag>8.9.0-beta2</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-9-0-beta2-release</release_link> + <download_link>http://example.com/drupal-8-9-0-beta2.tar.gz</download_link> + <date>1533298080</date> + <terms> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>New features</value></term> + </terms> + <security> + Beta releases are not covered by Drupal security advisories. + </security> + </release> + <release> + <name>Drupal 8.8.0</name> + <version>8.8.0</version> + <tag>DRUPAL-8-8-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-8-0-release</release_link> + <download_link>http://example.com/drupal-8-8-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.1.0</name> + <version>8.1.0</version> + <tag>DRUPAL-8-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-1-0-release</release_link> + <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 8.0.0</name> + <version>8.0.0</version> + <tag>DRUPAL-8-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-8-0-0-release</release_link> + <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/drupal.sec.9.9.0.xml b/web/core/modules/update/tests/modules/update_test/drupal.sec.9.9.0.xml new file mode 100644 index 0000000000000000000000000000000000000000..703c9079af4c6a3459f89a12afc8256e000e81b6 --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/drupal.sec.9.9.0.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title>Drupal</title> + <short_name>drupal</short_name> + <dc:creator>Drupal</dc:creator> + <api_version>9.x</api_version> + <recommended_major>8</recommended_major> + <supported_majors>8,9</supported_majors> + <default_major>9</default_major> + <project_status>published</project_status> + <link>http://example.com/project/drupal</link> + <terms><term><name>Projects</name><value>Drupal project</value></term></terms> + <releases> + <release> + <name>Drupal 9.9.0</name> + <version>9.9.0</version> + <tag>DRUPAL-9-9-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-9-9-0-release</release_link> + <download_link>http://example.com/drupal-9-9-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>drupal 9.9.0-beta2</name> + <version>9.9.0-beta2</version> + <tag>9.9.0-beta2</tag> + <status>published</status> + <release_link>http://example.com/drupal-9-9-0-beta2-release</release_link> + <download_link>http://example.com/drupal-9-9-0-beta2.tar.gz</download_link> + <date>1533298080</date> + <terms> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>New features</value></term> + </terms> + <security> + Beta releases are not covered by Drupal security advisories. + </security> + </release> + <release> + <name>Drupal 9.8.0</name> + <version>9.8.0</version> + <tag>DRUPAL-9-8-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-release</release_link> + <download_link>http://example.com/drupal-9-8-0.tar.gz</download_link> + <date>1250424641</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 9.1.0</name> + <version>9.1.0</version> + <tag>DRUPAL-9-1-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-9-1-0-release</release_link> + <download_link>http://example.com/drupal-9-1-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + <release> + <name>Drupal 9.0.0</name> + <version>9.0.0</version> + <tag>DRUPAL-9-0-0</tag> + <status>published</status> + <release_link>http://example.com/drupal-9-0-0-release</release_link> + <download_link>http://example.com/drupal-9-0-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term> + <name>Release type</name> + <value>New features</value> + </term> + <term> + <name>Release type</name> + <value>Bug fixes</value> + </term> + </terms> + </release> + </releases> +</project> diff --git a/web/core/modules/update/tests/modules/update_test/src/Datetime/TestTime.php b/web/core/modules/update/tests/modules/update_test/src/Datetime/TestTime.php new file mode 100644 index 0000000000000000000000000000000000000000..de9e5b86e43b102c28e9c1f27cd34003925793e5 --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/src/Datetime/TestTime.php @@ -0,0 +1,22 @@ +<?php + +namespace Drupal\update_test\Datetime; + +use Drupal\Component\Datetime\Time; + +/** + * Test service for altering the request time. + */ +class TestTime extends Time { + + /** + * {@inheritdoc} + */ + public function getRequestTime() { + if ($mock_date = \Drupal::state()->get('update_test.mock_date', NULL)) { + return \DateTime::createFromFormat('Y-m-d', $mock_date)->getTimestamp(); + } + return parent::getRequestTime(); + } + +} diff --git a/web/core/modules/update/tests/modules/update_test/update_test.services.yml b/web/core/modules/update/tests/modules/update_test/update_test.services.yml new file mode 100644 index 0000000000000000000000000000000000000000..23ce3db411ec8e8c383929ae83efe6a428456eff --- /dev/null +++ b/web/core/modules/update/tests/modules/update_test/update_test.services.yml @@ -0,0 +1,4 @@ +services: + datetime.time: + class: Drupal\update_test\Datetime\TestTime + arguments: ['@request_stack'] diff --git a/web/core/modules/update/tests/modules/update_test/update_test_basetheme.1_1-sec.xml b/web/core/modules/update/tests/modules/update_test/update_test_basetheme.1_1-sec.xml index 3529e1976316e5bb82b0f7b910170ed56f785bf2..9d00048ecb87d50d4ac44315ebe17a418126a965 100644 --- a/web/core/modules/update/tests/modules/update_test/update_test_basetheme.1_1-sec.xml +++ b/web/core/modules/update/tests/modules/update_test/update_test_basetheme.1_1-sec.xml @@ -3,10 +3,7 @@ <title>Update test base theme</title> <short_name>update_test_basetheme</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/update_test_basetheme</link> <terms> @@ -17,14 +14,10 @@ <name>update_test_basetheme 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-7--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/update_test_basetheme-7-x-1-1-release</release_link> <download_link>http://example.com/update_test_basetheme-8.x-1.1.tar.gz</download_link> <date>1250624521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073763241</filesize> <terms> <term><name>Release type</name><value>Security update</value></term> <term><name>Release type</name><value>New features</value></term> @@ -35,14 +28,10 @@ <name>update_test_basetheme 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-7--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/update_test_basetheme-7-x-1-0-release</release_link> <download_link>http://example.com/update_test_basetheme-8.x-1.0.tar.gz</download_link> <date>1250524521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/update_test_new_module.1_1.xml b/web/core/modules/update/tests/modules/update_test/update_test_new_module.1_1.xml index f9039b2e3faef518c5d60832d7646186a339420f..88e1ec98999c91600cbda9c535052f89bd0e3497 100644 --- a/web/core/modules/update/tests/modules/update_test/update_test_new_module.1_1.xml +++ b/web/core/modules/update/tests/modules/update_test/update_test_new_module.1_1.xml @@ -3,10 +3,7 @@ <title>Update test new module</title> <short_name>update_test_new_module</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/update_test_new_module</link> <terms> @@ -17,14 +14,10 @@ <name>update_test_new_module 8.x-1.1</name> <version>8.x-1.1</version> <tag>DRUPAL-8--1-1</tag> - <version_major>1</version_major> - <version_patch>1</version_patch> <status>published</status> <release_link>http://example.com/update_test_new_module-8-x-1-1-release</release_link> <download_link>core/modules/update/tests/update_test_new_module/8.x-1.1/update_test_new_module.tar.gz</download_link> <date>1300424521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/modules/update_test/update_test_subtheme.1_0.xml b/web/core/modules/update/tests/modules/update_test/update_test_subtheme.1_0.xml index c791b7f1fbcea51b26bb5a55081bbc5bc6cd8706..4cde86254ea8429a9cbafd72468d58b83c2d8176 100644 --- a/web/core/modules/update/tests/modules/update_test/update_test_subtheme.1_0.xml +++ b/web/core/modules/update/tests/modules/update_test/update_test_subtheme.1_0.xml @@ -3,10 +3,7 @@ <title>Update test subtheme</title> <short_name>update_test_subtheme</short_name> <dc:creator>Drupal</dc:creator> -<api_version>8.x</api_version> -<recommended_major>1</recommended_major> -<supported_majors>1</supported_majors> -<default_major>1</default_major> +<supported_branches>8.x-1.</supported_branches> <project_status>published</project_status> <link>http://example.com/project/update_test_subtheme</link> <terms> @@ -17,14 +14,10 @@ <name>update_test_subtheme 8.x-1.0</name> <version>8.x-1.0</version> <tag>DRUPAL-7--1-0</tag> - <version_major>1</version_major> - <version_patch>0</version_patch> <status>published</status> <release_link>http://example.com/update_test_subtheme-7-x-1-0-release</release_link> <download_link>http://example.com/update_test_subtheme-8.x-1.0.tar.gz</download_link> <date>1250524521</date> - <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash> - <filesize>1073741824</filesize> <terms> <term><name>Release type</name><value>New features</value></term> <term><name>Release type</name><value>Bug fixes</value></term> diff --git a/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php b/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php index f2c82a0bb2ce0cbdf4409edac1d4c9cd18ca96ac..2d7d7805197de50cce05dfa055c5942d1bd36bf7 100644 --- a/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php +++ b/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php @@ -28,14 +28,21 @@ protected function setUp() { // Create a local cache so the module is not downloaded from drupal.org. $cache_directory = _update_manager_cache_directory(TRUE); - $validArchiveFile = __DIR__ . '/../../update_test_new_module/8.x-1.0/update_test_new_module.tar.gz'; - copy($validArchiveFile, $cache_directory . '/update_test_new_module.tar.gz'); + foreach (['.tar.gz', '.zip'] as $extension) { + $filename = 'update_test_new_module' . $extension; + copy( + __DIR__ . '/../../update_test_new_module/8.x-1.0/' . $filename, + $cache_directory . '/' . $filename + ); + } } /** * Tests the Update Manager module upload via authorize.php functionality. + * + * @dataProvider archiveFileUrlProvider */ - public function testViaAuthorize() { + public function testViaAuthorize($url) { // Ensure the that we can select which file transfer backend to use. \Drupal::state()->set('test_uploaders_via_prompt', TRUE); @@ -44,8 +51,7 @@ public function testViaAuthorize() { $this->assertNoText('Update test new module'); $edit = [ - // This project has been cached in the test's setUp() method. - 'project_url' => 'https://ftp.drupal.org/files/projects/update_test_new_module.tar.gz', + 'project_url' => $url, ]; $this->drupalPostForm('admin/modules/install', $edit, t('Install')); $edit = [ @@ -60,4 +66,20 @@ public function testViaAuthorize() { $this->assertText('Update test new module'); } + /** + * Data provider method for testViaAuthorize(). + * + * Each of these release URLs has been cached in the setUp() method. + */ + public function archiveFileUrlProvider() { + return [ + 'tar.gz' => [ + 'url' => 'https://ftp.drupal.org/files/projects/update_test_new_module.tar.gz', + ], + 'zip' => [ + 'url' => 'https://ftp.drupal.org/files/projects/update_test_new_module.zip', + ], + ]; + } + } diff --git a/web/core/modules/update/tests/src/Functional/UpdateContribTest.php b/web/core/modules/update/tests/src/Functional/UpdateContribTest.php index 8497ed81bde1be1580b1429452d0282330c7687a..aed4795daa965a1490af1e10b20e4cbb1889f893 100644 --- a/web/core/modules/update/tests/src/Functional/UpdateContribTest.php +++ b/web/core/modules/update/tests/src/Functional/UpdateContribTest.php @@ -266,6 +266,10 @@ public function testNormalUpdateAvailable() { $this->clickLink('Check manually'); $this->checkForMetaRefresh(); $assert_session->pageTextNotContains('Security update required!'); + // The XML test fixtures for this method all contain the '8.x-3.0' + // release but because '8.x-3.0' is not in a supported branch it will + // not be in the available updates. + $this->assertNoRaw('8.x-3.0'); // Set a CSS selector in order for assertions to target the 'Modules' // table and not Drupal core updates. $this->updateTableLocator = 'table.update:nth-of-type(2)'; @@ -546,6 +550,46 @@ public function testHookUpdateStatusAlter() { $this->assertNoText(t('Security update')); } + /** + * Tests that core compatibility messages are displayed. + */ + public function testCoreCompatibilityMessage() { + $system_info = [ + '#all' => [ + 'version' => '8.0.0', + ], + 'aaa_update_test' => [ + 'project' => 'aaa_update_test', + 'version' => '8.x-1.0', + 'hidden' => FALSE, + ], + ]; + $this->config('update_test.settings')->set('system_info', $system_info)->save(); + + // Confirm that messages are displayed for recommended and latest updates. + // @todo In https://www.drupal.org/project/drupal/issues/3112962: + // Change the calls to 'refreshUpdateStatus()' to use: + // - '1.1' instead of '1.1-core_compatibility'. + // - '1.1-alpha1' instead of '1.1-alpha1-core_compatibility'. + // Delete the files: + // - core/modules/update/tests/modules/update_test/drupal.1.1-alpha1-core_compatibility.xml + // - core/modules/update/tests/modules/update_test/drupal.1.1-core_compatibility.xml + $this->refreshUpdateStatus(['drupal' => '1.1-core_compatibility', 'aaa_update_test' => '8.x-1.2']); + $this->assertCoreCompatibilityMessage('8.x-1.2', '8.0.0 to 8.1.1', 'Recommended version:'); + $this->assertCoreCompatibilityMessage('8.x-1.3-beta1', '8.0.0, 8.1.1', 'Latest version:'); + + // Change the available core releases and confirm that the messages change. + $this->refreshUpdateStatus(['drupal' => '1.1-alpha1-core_compatibility', 'aaa_update_test' => '8.x-1.2']); + $this->assertCoreCompatibilityMessage('8.x-1.2', '8.0.0 to 8.1.0', 'Recommended version:'); + $this->assertCoreCompatibilityMessage('8.x-1.3-beta1', '8.0.0', 'Latest version:'); + + // Confirm that messages are displayed for security and 'Also available' + // updates. + $this->refreshUpdateStatus(['drupal' => '1.1-core_compatibility', 'aaa_update_test' => 'core_compatibility.8.x-1.2_8.x-2.2']); + $this->assertCoreCompatibilityMessage('8.x-1.2', '8.1.0 to 8.1.1', 'Security update:', FALSE); + $this->assertCoreCompatibilityMessage('8.x-2.2', '8.1.1', 'Also available:', FALSE); + } + /** * Tests update status of security releases. * @@ -672,4 +716,121 @@ public function securityUpdateAvailabilityProvider() { ]; } + /** + * Tests messages when a project release is unpublished. + * + * This test confirms that revoked messages are displayed regardless of + * whether the installed version is in a supported branch or not. This test + * relies on 2 test XML fixtures that are identical except for the + * 'supported_branches' value: + * - aaa_update_test.1_0-supported.xml + * 'supported_branches' is '8.x-1.,8.x-2.'. + * - aaa_update_test.1_0-unsupported.xml + * 'supported_branches' is '8.x-2.'. + * They both have an '8.x-1.0' release that is unpublished and an '8.x-2.0' + * release that is published and is the expected update. + */ + public function testRevokedRelease() { + $system_info = [ + 'aaa_update_test' => [ + 'project' => 'aaa_update_test', + 'version' => '8.x-1.0', + 'hidden' => FALSE, + ], + ]; + $this->config('update_test.settings')->set('system_info', $system_info)->save(); + $this->refreshUpdateStatus([ + 'drupal' => '0.0', + $this->updateProject => '1_0-supported', + ]); + // @todo Change the version label to 'Recommended version:' in + // https://www.drupal.org/node/3114408. + $this->confirmRevokedStatus('8.x-1.0', '8.x-2.0', 'Also available:'); + + $this->refreshUpdateStatus([ + 'drupal' => '0.0', + $this->updateProject => '1_0-unsupported', + ]); + $this->confirmRevokedStatus('8.x-1.0', '8.x-2.0', 'Recommended version:'); + } + + /** + * Tests messages when a project release is marked unsupported. + * + * This test confirms unsupported messages are displayed regardless of whether + * the installed version is in a supported branch or not. This test relies on + * 2 test XML fixtures that are identical except for the 'supported_branches' + * value: + * - aaa_update_test.1_0-supported.xml + * 'supported_branches' is '8.x-1.,8.x-2.'. + * - aaa_update_test.1_0-unsupported.xml + * 'supported_branches' is '8.x-2.'. + * They both have an '8.x-1.1' release that has the 'Release type' value of + * 'unsupported' and an '8.x-2.0' release that has the 'Release type' value of + * 'supported' and is the expected update. + */ + public function testUnsupportedRelease() { + $system_info = [ + 'aaa_update_test' => [ + 'project' => 'aaa_update_test', + 'version' => '8.x-1.1', + 'hidden' => FALSE, + ], + ]; + $this->config('update_test.settings')->set('system_info', $system_info)->save(); + $this->refreshUpdateStatus([ + 'drupal' => '0.0', + $this->updateProject => '1_0-supported', + ]); + // @todo Change the version label to 'Recommended version:' in + // https://www.drupal.org/node/3114408. + $this->confirmUnsupportedStatus('8.x-1.1', '8.x-2.0', 'Also available:'); + + $this->refreshUpdateStatus([ + 'drupal' => '0.0', + $this->updateProject => '1_0-unsupported', + ]); + $this->confirmUnsupportedStatus('8.x-1.1', '8.x-2.0', 'Recommended version:'); + } + + /** + * Asserts that a core compatibility message is correct for an update. + * + * @param string $version + * The version of the update. + * @param string $expected_range + * The expected core compatibility range. + * @param string $expected_release_title + * The expected release title. + * @param bool $is_compatible + * If the update is compatible with the installed version of Drupal. + */ + protected function assertCoreCompatibilityMessage($version, $expected_range, $expected_release_title, $is_compatible = TRUE) { + $update_element = $this->findUpdateElementByLabel($expected_release_title); + $this->assertTrue($update_element->hasLink($version)); + $compatibility_details = $update_element->find('css', '.project-update__compatibility-details details'); + $this->assertContains("Requires Drupal core: $expected_range", $compatibility_details->getText()); + $details_summary_element = $compatibility_details->find('css', 'summary'); + if ($is_compatible) { + $download_version = str_replace('.', '-', $version); + // If an update is compatible with the installed version of Drupal core, + // it should have a download link and the details element should be closed + // by default. + $this->assertFalse($compatibility_details->hasAttribute('open')); + $this->assertSame('Compatible', $details_summary_element->getText()); + $this->assertEquals( + $update_element->findLink('Download')->getAttribute('href'), + "http://example.com/{$this->updateProject}-$download_version.tar.gz" + ); + } + else { + // If an update is not compatible with the installed version of Drupal + // core, it should not have a download link and the details element should + // be open by default. + $this->assertTrue($compatibility_details->hasAttribute('open')); + $this->assertSame('Not compatible', $details_summary_element->getText()); + $this->assertFalse($update_element->hasLink('Download')); + } + } + } diff --git a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php index 26e9d5d96973f1b76c06daad147c3ac08e8b1e07..d6c198f42ecb0632b041930e8934cbafecec5dfa 100644 --- a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php +++ b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php @@ -62,6 +62,13 @@ protected function setSystemInfo($version) { /** * Tests the Update Manager module when no updates are available. + * + * The XML fixture file 'drupal.1.0.xml' which is one of the XML files this + * test uses also contains 2 extra releases that are newer than '8.0.1'. These + * releases will not show as available updates because of the following + * reasons: + * - '8.0.2' is an unpublished release. + * - '8.0.3' is marked as 'Release type' 'Unsupported'. */ public function testNoUpdatesAvailable() { foreach ([0, 1] as $minor_version) { @@ -70,6 +77,10 @@ public function testNoUpdatesAvailable() { $this->setSystemInfo("8.$minor_version.$patch_version" . $extra_version); $this->refreshUpdateStatus(['drupal' => "$minor_version.$patch_version" . $extra_version]); $this->standardTests(); + // The XML test fixtures for this method all contain the '8.2.0' + // release but because '8.2.0' is not in a supported branch it will + // not be in the available updates. + $this->assertNoRaw('8.2.0'); $this->assertText(t('Up to date')); $this->assertNoText(t('Update available')); $this->assertNoText(t('Security update required!')); @@ -98,6 +109,10 @@ public function testNormalUpdateAvailable() { $this->clickLink(t('Check manually')); $this->checkForMetaRefresh(); $this->assertNoText(t('Security update required!')); + // The XML test fixtures for this method all contain the '8.2.0' release + // but because '8.2.0' is not in a supported branch it will not be in + // the available updates. + $this->assertNoRaw('8.2.0'); switch ($minor_version) { case 0: // Both stable and unstable releases are available. @@ -231,6 +246,11 @@ public function testSecurityUpdateAvailability($site_patch_version, array $expec * - 8.0.2 Insecure * - 8.0.1 Insecure * - 8.0.0 Insecure + * - drupal.sec.1.2_insecure-unsupported + * This file has the exact releases as drupal.sec.1.2_insecure.xml. It has a + * different value for 'supported_branches' that does not contain '8.0.'. + * It is used to ensure that the "Security update required!" is displayed + * even if the currently installed version is in an unsupported branch. * - drupal.sec.0.2-rc2-b.xml * - 8.2.0-rc2 * - 8.2.0-rc1 @@ -305,6 +325,15 @@ public function securityUpdateAvailabilityProvider() { 'expected_update_message_type' => static::SECURITY_UPDATE_REQUIRED, 'fixture' => 'sec.1.2_insecure', ], + // No security release available for site minor release 0. + // Site minor is not a supported branch. + // Security release available for next minor. + '0.0, 1.2, insecure-unsupported' => [ + 'site_patch_version' => '0.0', + 'expected_security_releases' => ['1.2'], + 'expected_update_message_type' => static::SECURITY_UPDATE_REQUIRED, + 'fixture' => 'sec.1.2_insecure-unsupported', + ], // All releases for minor 0 are secure. // Security release available for next minor. '0.0, 1.2, secure' => [ @@ -357,6 +386,225 @@ public function securityUpdateAvailabilityProvider() { return $test_cases; } + /** + * Tests the security coverage messages for Drupal core versions. + * + * @param string $installed_version + * The installed Drupal version to test. + * @param string $fixture + * The test fixture that contains the test XML. + * @param string $requirements_section_heading + * The requirements section heading. + * @param string $message + * The expected coverage message. + * @param string $mock_date + * The mock date to use if needed in the format CCYY-MM-DD. If an empty + * string is provided, no mock date will be used. + * + * @dataProvider securityCoverageMessageProvider + */ + public function testSecurityCoverageMessage($installed_version, $fixture, $requirements_section_heading, $message, $mock_date) { + \Drupal::state()->set('update_test.mock_date', $mock_date); + $this->setSystemInfo($installed_version); + $this->refreshUpdateStatus(['drupal' => $fixture]); + $this->drupalGet('admin/reports/status'); + + if (empty($requirements_section_heading)) { + $this->assertSession()->pageTextNotContains('Drupal core security coverage'); + return; + } + + $all_requirements_details = $this->getSession()->getPage()->findAll( + 'css', + 'details.system-status-report__entry:contains("Drupal core security coverage")' + ); + // Ensure we only have 1 security message section. + $this->assertCount(1, $all_requirements_details); + $requirements_details = $all_requirements_details[0]; + // Ensure that messages are under the correct heading which could be + // 'Checked', 'Warnings found', or 'Errors found'. + $requirements_section_element = $requirements_details->getParent(); + $this->assertCount(1, $requirements_section_element->findAll('css', "h3:contains('$requirements_section_heading')")); + $actual_message = $requirements_details->find('css', 'div.system-status-report__entry__value')->getText(); + $this->assertNotEmpty($actual_message); + $this->assertEquals($message, $actual_message); + } + + /** + * Dataprovider for testSecurityCoverageMessage(). + * + * These test cases rely on the following fixtures containing the following + * releases: + * - drupal.sec.2.0_3.0-rc1.xml + * - 8.2.0 + * - 8.3.0-rc1 + * - drupal.sec.2.0.xml + * - 8.2.0 + * - drupal.sec.2.0_9.0.0.xml + * - 8.2.0 + * - 9.0.0 + * - drupal.sec.9.0.xml + * - 8.9.0 + * - drupal.sec.9.9.0.xml + * - 9.9.0 + */ + public function securityCoverageMessageProvider() { + $release_coverage_message = 'Visit the release cycle overview for more information on supported releases.'; + $coverage_ended_message = 'Coverage has ended'; + $update_asap_message = 'Update to a supported minor as soon as possible to continue receiving security updates.'; + $update_soon_message = 'Update to a supported minor version soon to continue receiving security updates.'; + $test_cases = [ + '8.0.0, unsupported' => [ + 'installed_version' => '8.0.0', + 'fixture' => 'sec.2.0_3.0-rc1', + 'requirements_section_heading' => 'Errors found', + 'message' => "$coverage_ended_message $update_asap_message $release_coverage_message", + 'mock_date' => '', + ], + '8.1.0, supported with 3rc' => [ + 'installed_version' => '8.1.0', + 'fixture' => 'sec.2.0_3.0-rc1', + 'requirements_section_heading' => 'Warnings found', + 'message' => "Covered until 8.3.0 Update to 8.2 or higher soon to continue receiving security updates. $release_coverage_message", + 'mock_date' => '', + ], + '8.1.0, supported' => [ + 'installed_version' => '8.1.0', + 'fixture' => 'sec.2.0', + 'requirements_section_heading' => 'Warnings found', + 'message' => "Covered until 8.3.0 Update to 8.2 or higher soon to continue receiving security updates. $release_coverage_message", + 'mock_date' => '', + ], + '8.2.0, supported with 3rc' => [ + 'installed_version' => '8.2.0', + 'fixture' => 'sec.2.0_3.0-rc1', + 'requirements_section_heading' => 'Checked', + 'message' => "Covered until 8.4.0 $release_coverage_message", + 'mock_date' => '', + ], + '8.2.0, supported' => [ + 'installed_version' => '8.2.0', + 'fixture' => 'sec.2.0', + 'requirements_section_heading' => 'Checked', + 'message' => "Covered until 8.4.0 $release_coverage_message", + 'mock_date' => '', + ], + // Ensure we don't show messages for pre-release or dev versions. + '8.2.0-beta2, no message' => [ + 'installed_version' => '8.2.0-beta2', + 'fixture' => 'sec.2.0_3.0-rc1', + 'requirements_section_heading' => '', + 'message' => '', + 'mock_date' => '', + ], + '8.1.0-dev, no message' => [ + 'installed_version' => '8.1.0-dev', + 'fixture' => 'sec.2.0_3.0-rc1', + 'requirements_section_heading' => '', + 'message' => '', + 'mock_date' => '', + ], + // Ensures the message is correct if the next major version has been + // released and the additional minors indicated by + // CORE_MINORS_WITH_SECURITY_COVERAGE minors have been released. + '8.0.0, 9 unsupported' => [ + 'installed_version' => '8.0.0', + 'fixture' => 'sec.2.0_9.0.0', + 'requirements_section_heading' => 'Errors found', + 'message' => "$coverage_ended_message $update_asap_message $release_coverage_message", + 'mock_date' => '', + ], + // Ensures the message is correct if the next major version has been + // released and the additional minors indicated by + // CORE_MINORS_WITH_SECURITY_COVERAGE minors have not been released. + '8.2.0, 9 warning' => [ + 'installed_version' => '8.2.0', + 'fixture' => 'sec.2.0_9.0.0', + 'requirements_section_heading' => 'Warnings found', + 'message' => "Covered until 8.4.0 Update to 8.3 or higher soon to continue receiving security updates. $release_coverage_message", + 'mock_date' => '', + ], + ]; + + // Drupal 8.8.x test cases. + $test_cases += [ + // Ensure that a message is displayed during 8.8's active support. + '8.8.0, supported' => [ + 'installed_version' => '8.8.0', + 'fixture' => 'sec.9.0', + 'requirements_section_heading' => 'Checked', + 'message' => "Covered until 2020-Dec-02 $release_coverage_message", + 'mock_date' => '2020-06-01', + ], + // Ensure a warning is displayed if less than six months remain until the + // end of 8.8's security coverage. + '8.8.0, supported, 6 months warn' => [ + 'installed_version' => '8.8.0', + 'fixture' => 'sec.9.0', + 'requirements_section_heading' => 'Warnings found', + 'message' => "Covered until 2020-Dec-02 $update_soon_message $release_coverage_message", + 'mock_date' => '2020-06-02', + ], + ]; + // Ensure that the message does not change, including on the last day of + // security coverage. + $test_cases['8.8.0, supported, last day warn'] = $test_cases['8.8.0, supported, 6 months warn']; + $test_cases['8.8.0, supported, last day warn']['mock_date'] = '2020-12-01'; + + // Ensure that if the 8.8 support window is finished a message is + // displayed. + $test_cases['8.8.0, support over'] = [ + 'installed_version' => '8.8.0', + 'fixture' => 'sec.9.0', + 'requirements_section_heading' => 'Errors found', + 'message' => "$coverage_ended_message $update_asap_message $release_coverage_message", + 'mock_date' => '2020-12-02', + ]; + + // Drupal 8.9 LTS test cases. + $test_cases['8.9.0, lts supported'] = [ + 'installed_version' => '8.9.0', + 'fixture' => 'sec.9.0', + 'requirements_section_heading' => 'Checked', + 'message' => "Covered until 2021-Nov $release_coverage_message", + 'mock_date' => '2021-01-01', + ]; + // Ensure that the message does not change, including on the last day of + // security coverage. + $test_cases['8.9.0, lts supported, last day'] = $test_cases['8.9.0, lts supported']; + $test_cases['8.9.0, lts supported, last day']['mock_date'] = '2021-10-31'; + + // Ensure that if LTS support window is finished a message is displayed. + $test_cases['8.9.0, lts support over'] = [ + 'installed_version' => '8.9.0', + 'fixture' => 'sec.9.0', + 'requirements_section_heading' => 'Errors found', + 'message' => "$coverage_ended_message $update_asap_message $release_coverage_message", + 'mock_date' => '2021-11-01', + ]; + + // Drupal 9 test cases. + $test_cases += [ + // Ensure the end dates for 8.8 and 8.9 only apply to major version 8. + '9.9.0' => [ + 'installed_version' => '9.9.0', + 'fixture' => 'sec.9.9.0', + 'requirements_section_heading' => 'Checked', + 'message' => "Covered until 9.11.0 $release_coverage_message", + 'mock_date' => '', + ], + '9.8.0' => [ + 'installed_version' => '9.8.0', + 'fixture' => 'sec.9.9.0', + 'requirements_section_heading' => 'Warnings found', + 'message' => "Covered until 9.10.0 Update to 9.9 or higher soon to continue receiving security updates. $release_coverage_message", + 'mock_date' => '', + ], + ]; + return $test_cases; + + } + /** * Ensures proper results where there are date mismatches among modules. */ @@ -572,6 +820,52 @@ public function testLocalActions() { $this->assertUrl('admin/reports/updates/install'); } + /** + * Tests messages when a project release is unpublished. + * + * This test confirms that revoked messages are displayed regardless of + * whether the installed version is in a supported branch or not. This test + * relies on 2 test XML fixtures that are identical except for the + * 'supported_branches' value: + * - drupal.1.0.xml + * 'supported_branches' is '8.0.,8.1.'. + * - drupal.1.0-unsupported.xml + * 'supported_branches' is '8.1.'. + * They both have an '8.0.2' release that is unpublished and an '8.1.0' + * release that is published and is the expected update. + */ + public function testRevokedRelease() { + foreach (['1.0', '1.0-unsupported'] as $fixture) { + $this->setSystemInfo('8.0.2'); + $this->refreshUpdateStatus([$this->updateProject => $fixture]); + $this->standardTests(); + $this->confirmRevokedStatus('8.0.2', '8.1.0', 'Recommended version:'); + } + } + + /** + * Tests messages when a project release is marked unsupported. + * + * This test confirms unsupported messages are displayed regardless of whether + * the installed version is in a supported branch or not. This test relies on + * 2 test XML fixtures that are identical except for the 'supported_branches' + * value: + * - drupal.1.0.xml + * 'supported_branches' is '8.0.,8.1.'. + * - drupal.1.0-unsupported.xml + * 'supported_branches' is '8.1.'. + * They both have an '8.0.3' release that that has the 'Release type' value of + * 'unsupported' and an '8.1.0' release that has the 'Release type' value of + * 'supported' and is the expected update. + */ + public function testUnsupportedRelease() { + foreach (['1.0', '1.0-unsupported'] as $fixture) { + $this->setSystemInfo('8.0.3'); + $this->refreshUpdateStatus([$this->updateProject => $fixture]); + $this->standardTests(); + $this->confirmUnsupportedStatus('8.0.3', '8.1.0', 'Recommended version:'); + } + } /** * {@inheritdoc} diff --git a/web/core/modules/update/tests/src/Functional/UpdateTestBase.php b/web/core/modules/update/tests/src/Functional/UpdateTestBase.php index 89cfdf4f6e287bf1ca0f309d78dc87655ad24932..5ca84d922bb32bda33614ab447c89395bc1f9d4a 100644 --- a/web/core/modules/update/tests/src/Functional/UpdateTestBase.php +++ b/web/core/modules/update/tests/src/Functional/UpdateTestBase.php @@ -195,7 +195,7 @@ protected function assertSecurityUpdates($project_path_part, array $expected_sec */ protected function assertVersionUpdateLinks($label, $version, $download_version = NULL) { $download_version = $download_version ?? $version; - $update_element = $this->getSession()->getPage()->find('css', $this->updateTableLocator . " .project-update__version:contains(\"$label\")"); + $update_element = $this->findUpdateElementByLabel($label); // In the release notes URL the periods are replaced with dashes. $url_version = str_replace('.', '-', $version); @@ -204,4 +204,91 @@ protected function assertVersionUpdateLinks($label, $version, $download_version $this->assertEquals($update_element->findLink('Release notes')->getAttribute('href'), "http://example.com/{$this->updateProject}-$url_version-release"); } + /** + * Confirms messages are correct when a release has been unpublished/revoked. + * + * @param string $revoked_version + * The revoked version that is currently installed. + * @param string $newer_version + * The expected newer version to recommend. + * @param string $new_version_label + * The expected label for the newer version (for example 'Recommended + * version:' or 'Also available:'). + */ + protected function confirmRevokedStatus($revoked_version, $newer_version, $new_version_label) { + $this->drupalGet('admin/reports/updates'); + $this->clickLink(t('Check manually')); + $this->checkForMetaRefresh(); + $this->assertUpdateTableTextContains('Revoked!'); + $this->assertUpdateTableTextContains($revoked_version); + $this->assertUpdateTableElementContains('error.svg'); + $this->assertUpdateTableTextContains('Release revoked: Your currently installed release has been revoked, and is no longer available for download. Disabling everything included in this release or upgrading is strongly recommended!'); + $this->assertVersionUpdateLinks($new_version_label, $newer_version); + } + + /** + * Confirms messages are correct when a release has been marked unsupported. + * + * @param string $unsupported_version + * The unsupported version that is currently installed. + * @param string $newer_version + * The expected newer version to recommend. + * @param string $new_version_label + * The expected label for the newer version (for example 'Recommended + * version:' or 'Also available:'). + */ + protected function confirmUnsupportedStatus($unsupported_version, $newer_version, $new_version_label) { + $this->drupalGet('admin/reports/updates'); + $this->clickLink(t('Check manually')); + $this->checkForMetaRefresh(); + $this->assertUpdateTableTextContains('Not supported!'); + $this->assertUpdateTableTextContains($unsupported_version); + $this->assertUpdateTableElementContains('error.svg'); + $this->assertUpdateTableTextContains('Release not supported: Your currently installed release is now unsupported, and is no longer available for download. Disabling everything included in this release or upgrading is strongly recommended!'); + $this->assertVersionUpdateLinks($new_version_label, $newer_version); + } + + /** + * Asserts that the update table text contains the specified text. + * + * @param string $text + * The expected text. + * + * @see \Behat\Mink\WebAssert::elementTextContains() + */ + protected function assertUpdateTableTextContains($text) { + $this->assertSession() + ->elementTextContains('css', $this->updateTableLocator, $text); + } + + /** + * Asserts that the update table element HTML contains the specified text. + * + * @param string $text + * The expected text. + * + * @see \Behat\Mink\WebAssert::elementContains() + */ + protected function assertUpdateTableElementContains($text) { + $this->assertSession() + ->elementContains('css', $this->updateTableLocator, $text); + } + + /** + * Finds an update page element by label. + * + * @param string $label + * The label for the update, for example "Recommended version:" or + * "Latest version:". + * + * @return \Behat\Mink\Element\NodeElement + * The update element. + */ + protected function findUpdateElementByLabel($label) { + $update_elements = $this->getSession()->getPage() + ->findAll('css', $this->updateTableLocator . " .project-update__version:contains(\"$label\")"); + $this->assertCount(1, $update_elements); + return $update_elements[0]; + } + } diff --git a/web/core/modules/update/tests/src/Unit/ModuleVersionTest.php b/web/core/modules/update/tests/src/Unit/ModuleVersionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..7eaabed00829eb5b6c6fe250f7823b7b1a9b9f85 --- /dev/null +++ b/web/core/modules/update/tests/src/Unit/ModuleVersionTest.php @@ -0,0 +1,400 @@ +<?php + +namespace Drupal\Tests\update\Unit; + +use Drupal\Tests\UnitTestCase; +use Drupal\update\ModuleVersion; + +/** + * @coversDefaultClass \Drupal\update\ModuleVersion + * + * @group update + */ +class ModuleVersionTest extends UnitTestCase { + + /** + * @covers ::getMajorVersion + * + * @dataProvider providerVersionInfos + * + * @param string $version + * The version string to test. + * @param array $expected_version_info + * The expected version information. + */ + public function testGetMajorVersion($version, array $expected_version_info) { + $version = ModuleVersion::createFromVersionString($version); + $this->assertSame($expected_version_info['major'], $version->getMajorVersion()); + } + + /** + * @covers ::getVersionExtra + * + * @dataProvider providerVersionInfos + * + * @param string $version + * The version string to test. + * @param array $expected_version_info + * The expected version information. + */ + public function testGetVersionExtra($version, array $expected_version_info) { + $version = ModuleVersion::createFromVersionString($version); + $this->assertSame($expected_version_info['extra'], $version->getVersionExtra()); + } + + /** + * Data provider for expected version information. + * + * @return array + * Arrays of version information. + */ + public function providerVersionInfos() { + // Data provider values are: + // - The version number to test. + // - Array of expected version information with the following keys: + // -'major': The expected result from ::getMajorVersion(). + // -'extra': The expected result from ::getVersionExtra(). + return [ + '8.x-1.3' => [ + '8.x-1.3', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '8.x-1.0' => [ + '8.x-1.0', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '8.x-1.0-alpha1' => [ + '8.x-1.0-alpha1', + [ + 'major' => '1', + 'extra' => 'alpha1', + ], + ], + '8.x-1.3-alpha1' => [ + '8.x-1.3-alpha1', + [ + 'major' => '1', + 'extra' => 'alpha1', + ], + ], + '0.1' => [ + '0.1', + [ + 'major' => '0', + 'extra' => NULL, + ], + ], + '1.0' => [ + '1.0', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '1.3' => [ + '1.3', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '1.0-alpha1' => [ + '1.0-alpha1', + [ + 'major' => '1', + 'extra' => 'alpha1', + ], + ], + '1.3-alpha1' => [ + '1.3-alpha1', + [ + 'major' => '1', + 'extra' => 'alpha1', + ], + ], + '0.2.0' => [ + '0.2.0', + [ + 'major' => '0', + 'extra' => NULL, + ], + ], + '1.2.0' => [ + '1.2.0', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '1.0.3' => [ + '1.0.3', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '1.2.3' => [ + '1.2.3', + [ + 'major' => '1', + 'extra' => NULL, + ], + ], + '1.2.0-alpha1' => [ + '1.2.0-alpha1', + [ + 'major' => '1', + 'extra' => 'alpha1', + ], + ], + '1.2.3-alpha1' => [ + '1.2.3-alpha1', + [ + 'major' => '1', + 'extra' => 'alpha1', + ], + ], + '8.x-1.x-dev' => [ + '8.x-1.x-dev', + [ + 'major' => '1', + 'extra' => 'dev', + ], + ], + '8.x-8.x-dev' => [ + '8.x-8.x-dev', + [ + 'major' => '8', + 'extra' => 'dev', + ], + ], + '1.x-dev' => [ + '1.x-dev', + [ + 'major' => '1', + 'extra' => 'dev', + ], + ], + '8.x-dev' => [ + '8.x-dev', + [ + 'major' => '8', + 'extra' => 'dev', + ], + ], + '1.0.x-dev' => [ + '1.0.x-dev', + [ + 'major' => '1', + 'extra' => 'dev', + ], + ], + '1.2.x-dev' => [ + '1.2.x-dev', + [ + 'major' => '1', + 'extra' => 'dev', + ], + ], + ]; + } + + /** + * @covers ::createFromVersionString + * + * @dataProvider providerInvalidVersionNumber + * + * @param string $version + * The version string to test. + */ + public function testInvalidVersionNumber($version) { + $this->expectException(\UnexpectedValueException::class); + $this->expectExceptionMessage("Unexpected version number in: $version"); + ModuleVersion::createFromVersionString($version); + } + + /** + * Data provider for testInvalidVersionNumber(). + */ + public function providerInvalidVersionNumber() { + return static::createKeyedTestCases([ + '', + '8', + 'x', + 'xx', + '8.x-', + '8.x', + '.x', + '.0', + '.1', + '.1.0', + '1.0.', + 'x.1', + '1.x.0', + '1.1.x', + '1.1.x-extra', + 'x.1.1', + '1.1.1.1', + '1.1.1.0', + ]); + } + + /** + * @covers ::createFromVersionString + * + * @dataProvider providerInvalidVersionCorePrefix + * + * @param string $version + * The version string to test. + */ + public function testInvalidVersionCorePrefix($version) { + $this->expectException(\UnexpectedValueException::class); + $this->expectExceptionMessage("Unexpected version core prefix in $version. The only core prefix expected in \Drupal\update\ModuleVersion is: 8.x-"); + ModuleVersion::createFromVersionString($version); + } + + /** + * Data provider for testInvalidVersionCorePrefix(). + */ + public function providerInvalidVersionCorePrefix() { + return static::createKeyedTestCases([ + '6.x-1.0', + '7.x-1.x', + '9.x-1.x', + '10.x-1.x', + ]); + } + + /** + * @covers ::createFromSupportBranch + * + * @dataProvider providerInvalidBranchCorePrefix + * + * @param string $branch + * The branch to test. + */ + public function testInvalidBranchCorePrefix($branch) { + $this->expectException(\UnexpectedValueException::class); + $this->expectExceptionMessage("Unexpected version core prefix in {$branch}0. The only core prefix expected in \Drupal\update\ModuleVersion is: 8.x-"); + ModuleVersion::createFromSupportBranch($branch); + } + + /** + * Data provider for testInvalidBranchCorePrefix(). + */ + public function providerInvalidBranchCorePrefix() { + return static::createKeyedTestCases([ + '6.x-1.', + '7.x-1.', + '9.x-1.', + '10.x-1.', + ]); + } + + /** + * @covers ::createFromSupportBranch + * + * @dataProvider providerCreateFromSupportBranch + * + * @param string $branch + * The branch to test. + * @param string $expected_major + * The expected major version. + */ + public function testCreateFromSupportBranch($branch, $expected_major) { + $version = ModuleVersion::createFromSupportBranch($branch); + $this->assertInstanceOf(ModuleVersion::class, $version); + $this->assertSame($expected_major, $version->getMajorVersion()); + // Version extra can't be determined from a branch. + $this->assertSame(NULL, $version->getVersionExtra()); + } + + /** + * Data provider for testCreateFromSupportBranch(). + */ + public function providerCreateFromSupportBranch() { + // Data provider values are: + // - The version number to test. + // - Array of expected version information with the following keys: + // -'major': The expected result from ::getMajorVersion(). + // -'extra': The expected result from ::getVersionExtra(). + return [ + '0.' => [ + '0.', + '0', + ], + '1.' => [ + '1.', + '1', + ], + '0.1.' => [ + '0.1.', + '0', + ], + '1.2.' => [ + '1.2.', + '1', + ], + '8.x-1.' => [ + '8.x-1.', + '1', + ], + ]; + } + + /** + * @covers ::createFromSupportBranch + * + * @dataProvider provideInvalidBranch + * + * @param string $branch + * The branch to test. + */ + public function testInvalidBranch($branch) { + $this->expectException(\UnexpectedValueException::class); + $this->expectExceptionMessage("Invalid support branch: $branch"); + ModuleVersion::createFromSupportBranch($branch); + } + + /** + * Data provider for testInvalidBranch(). + */ + public function provideInvalidBranch() { + return self::createKeyedTestCases([ + '8.x-1.0', + '8.x-2.x', + '2.x-1.0', + '1.1', + '1.x', + '1.1.x', + '1.1.1', + '1.1.1.1', + ]); + } + + /** + * Creates test case arrays for data provider methods. + * + * @param string[] $test_arguments + * The test arguments. + * + * @return array + * An array with $test_arguments as keys and each element of $test_arguments + * as a single item array + */ + protected static function createKeyedTestCases(array $test_arguments) { + return array_combine( + $test_arguments, + array_map(function ($test_argument) { + return [$test_argument]; + }, $test_arguments) + ); + } + +} diff --git a/web/core/modules/update/tests/src/Unit/ProjectCoreCompatibilityTest.php b/web/core/modules/update/tests/src/Unit/ProjectCoreCompatibilityTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b1d28156320a172016d19932645a6fae1959025a --- /dev/null +++ b/web/core/modules/update/tests/src/Unit/ProjectCoreCompatibilityTest.php @@ -0,0 +1,143 @@ +<?php + +namespace Drupal\Tests\update\Unit; + +use Drupal\Tests\UnitTestCase; +use Drupal\update\ProjectCoreCompatibility; + +/** + * @coversDefaultClass \Drupal\update\ProjectCoreCompatibility + * + * @group update + */ +class ProjectCoreCompatibilityTest extends UnitTestCase { + + /** + * @covers ::setReleaseMessage + * @dataProvider providerSetProjectCoreCompatibilityRanges + */ + public function testSetProjectCoreCompatibilityRanges(array $project_data, $core_data, array $core_releases, array $expected_releases, array $expected_security_updates) { + $project_compatibility = new ProjectCoreCompatibility($core_data, $core_releases); + $project_compatibility->setStringTranslation($this->getStringTranslationStub()); + $project_compatibility->setReleaseMessage($project_data); + $this->assertSame($expected_releases, $project_data['releases']); + $this->assertSame($expected_security_updates, $project_data['security updates']); + } + + /** + * Data provider for testSetProjectCoreCompatibilityRanges(). + */ + public function providerSetProjectCoreCompatibilityRanges() { + $test_cases['no 9 releases'] = [ + 'project_data' => [ + 'recommended' => '1.0.1', + 'latest_version' => '1.2.3', + 'also' => [ + '1.2.4', + '1.2.5', + '1.2.6', + ], + 'releases' => [ + '1.0.1' => [ + 'core_compatibility' => '8.x', + ], + '1.2.3' => [ + 'core_compatibility' => '^8.9 || ^9', + ], + '1.2.4' => [ + 'core_compatibility' => '^8.9.2 || ^9', + ], + '1.2.6' => [], + ], + 'security updates' => [ + '1.2.5' => [ + 'core_compatibility' => '8.9.0 || 8.9.2 || ^9.0.1', + ], + ], + ], + 'core_data' => [ + 'existing_version' => '8.8.0', + ], + 'core_releases' => [ + '8.8.0-alpha1' => [], + '8.8.0-beta1' => [], + '8.8.0-rc1' => [], + '8.8.0' => [], + '8.8.1' => [], + '8.8.2' => [], + '8.9.0' => [], + '8.9.1' => [], + '8.9.2' => [], + ], + 'expected_releases' => [ + '1.0.1' => [ + 'core_compatibility' => '8.x', + 'core_compatible' => TRUE, + 'core_compatibility_message' => 'Requires Drupal core: 8.8.0 to 8.9.2', + ], + '1.2.3' => [ + 'core_compatibility' => '^8.9 || ^9', + 'core_compatible' => FALSE, + 'core_compatibility_message' => 'Requires Drupal core: 8.9.0 to 8.9.2', + ], + '1.2.4' => [ + 'core_compatibility' => '^8.9.2 || ^9', + 'core_compatible' => FALSE, + 'core_compatibility_message' => 'Requires Drupal core: 8.9.2', + ], + '1.2.6' => [], + ], + 'expected_security_updates' => [ + '1.2.5' => [ + 'core_compatibility' => '8.9.0 || 8.9.2 || ^9.0.1', + 'core_compatible' => FALSE, + 'core_compatibility_message' => 'Requires Drupal core: 8.9.0, 8.9.2', + ], + ], + ]; + // Ensure that when only Drupal 9 pre-releases none of the expected ranges + // change. + $test_cases['with 9 pre releases'] = $test_cases['no 9 releases']; + $test_cases['with 9 pre releases']['core_releases'] += [ + '9.0.0-alpha1' => [], + '9.0.0-beta1' => [], + '9.0.0-rc1' => [], + ]; + // Ensure that when the Drupal 9 full release are added the expected ranges + // do change. + $test_cases['with 9 full releases'] = $test_cases['with 9 pre releases']; + $test_cases['with 9 full releases']['core_releases'] += [ + '9.0.0' => [], + '9.0.1' => [], + '9.0.2' => [], + ]; + $test_cases['with 9 full releases']['expected_releases'] = [ + '1.0.1' => [ + 'core_compatibility' => '8.x', + 'core_compatible' => TRUE, + 'core_compatibility_message' => 'Requires Drupal core: 8.8.0 to 8.9.2', + ], + '1.2.3' => [ + 'core_compatibility' => '^8.9 || ^9', + 'core_compatible' => FALSE, + 'core_compatibility_message' => 'Requires Drupal core: 8.9.0 to 9.0.2', + ], + '1.2.4' => [ + 'core_compatibility' => '^8.9.2 || ^9', + 'core_compatible' => FALSE, + 'core_compatibility_message' => 'Requires Drupal core: 8.9.2 to 9.0.2', + ], + '1.2.6' => [], + ]; + $test_cases['with 9 full releases']['expected_security_updates'] = [ + '1.2.5' => [ + 'core_compatibility' => '8.9.0 || 8.9.2 || ^9.0.1', + 'core_compatible' => FALSE, + 'core_compatibility_message' => 'Requires Drupal core: 8.9.0, 8.9.2, 9.0.1 to 9.0.2', + ], + ]; + return $test_cases; + } + +} + diff --git a/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php b/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php index 1d01d0f5fe34f42721ba2a0ca1aba0976f12fcf8..9ac53a3491d73458aab66957254eeb32a18d24c2 100644 --- a/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php +++ b/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php @@ -5,10 +5,6 @@ use Drupal\Tests\UnitTestCase; use Drupal\update\UpdateFetcher; -if (!defined('DRUPAL_CORE_COMPATIBILITY')) { - define('DRUPAL_CORE_COMPATIBILITY', '8.x'); -} - /** * Tests update functionality unrelated to the database. * @@ -71,20 +67,20 @@ public function providerTestUpdateBuildFetchUrl() { $project['info']['project status url'] = 'http://www.example.com'; $project['includes'] = ['module1' => 'Module 1', 'module2' => 'Module 2']; $site_key = ''; - $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY; + $expected = "http://www.example.com/{$project['name']}/current"; $data[] = [$project, $site_key, $expected]; // For disabled projects it shouldn't add the site key either. $site_key = 'site_key'; $project['project_type'] = 'disabled'; - $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY; + $expected = "http://www.example.com/{$project['name']}/current"; $data[] = [$project, $site_key, $expected]; // For enabled projects, test adding the site key. $project['project_type'] = ''; - $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY; + $expected = "http://www.example.com/{$project['name']}/current"; $expected .= '?site_key=site_key'; $expected .= '&list=' . rawurlencode('module1,module2'); @@ -92,7 +88,7 @@ public function providerTestUpdateBuildFetchUrl() { // Test when the URL contains a question mark. $project['info']['project status url'] = 'http://www.example.com/?project='; - $expected = 'http://www.example.com/?project=/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY; + $expected = "http://www.example.com/?project=/{$project['name']}/current"; $expected .= '&site_key=site_key'; $expected .= '&list=' . rawurlencode('module1,module2'); diff --git a/web/core/modules/update/update.compare.inc b/web/core/modules/update/update.compare.inc index 5ffc6b407ab26879c4bd8e77df8fbfcfbfa04389..f762faaa7c8ff6a0873e7cc1040da155b701fd03 100644 --- a/web/core/modules/update/update.compare.inc +++ b/web/core/modules/update/update.compare.inc @@ -5,6 +5,9 @@ * Code required only when comparing available updates to existing data. */ +use Drupal\update\ModuleVersion; +use Drupal\update\ProjectCoreCompatibility; + /** * Determines version and type information for currently installed projects. * @@ -79,6 +82,7 @@ function update_process_project_info(&$projects) { * @see \Drupal\update\UpdateManager::getProjects() * @see update_process_project_info() * @see \Drupal\update\UpdateManagerInterface::projectStorage() + * @see \Drupal\update\ProjectCoreCompatibility::setReleaseMessage() */ function update_calculate_project_data($available) { // Retrieve the projects from storage, if present. @@ -90,9 +94,32 @@ function update_calculate_project_data($available) { } $projects = \Drupal::service('update.manager')->getProjects(); update_process_project_info($projects); + if (isset($projects['drupal']) && !empty($available['drupal'])) { + // Calculate core status first so that it is complete before + // \Drupal\update\ProjectCoreCompatibility::setReleaseMessage() is called + // for each module below. + update_calculate_project_update_status($projects['drupal'], $available['drupal']); + if (isset($available['drupal']['releases'])) { + $project_core_compatibility = new ProjectCoreCompatibility($projects['drupal'], $available['drupal']['releases']); + } + } + foreach ($projects as $project => $project_info) { if (isset($available[$project])) { + if ($project === 'drupal') { + continue; + } update_calculate_project_update_status($projects[$project], $available[$project]); + // Inject the list of compatible core versions to show administrator(s) + // which versions of core a given available update can be installed with. + // Since individual releases of a project can be compatible with different + // versions of core, and even multiple major versions of core (for + // example, 8.9.x and 9.0.x), this list will hopefully help + // administrator(s) know which available updates they can upgrade a given + // project to. + if (isset($project_core_compatibility)) { + $project_core_compatibility->setReleaseMessage($projects[$project]); + } } else { $projects[$project]['status'] = UPDATE_UNKNOWN; @@ -119,12 +146,14 @@ function update_calculate_project_data($available) { * with an error and the next project is considered. * * If the project itself is valid, the function decides what major release - * series to consider. The project defines what the currently supported major - * versions are for each version of core, so the first step is to make sure the - * current version is still supported. If so, that's the target version. If the - * current version is unsupported, the project maintainer's recommended major - * version is used. There's also a check to make sure that this function never - * recommends an earlier release than the currently installed major version. + * series to consider. The project defines its currently supported branches in + * its Drupal.org for the project, so the first step is to make sure the + * development branch of the current version is still supported. If so, then the + * major version of the current version is used. If the current version is not + * in a supported branch, the next supported branch is used to determine the + * major version to use. There's also a check to make sure that this function + * never recommends an earlier release than the currently installed major + * version. * * Given a target major version, the available releases are scanned looking for * the specific release to recommend (avoiding beta releases and development @@ -232,35 +261,51 @@ function update_calculate_project_update_status(&$project_data, $available) { } // Figure out the target major version. - $existing_major = $project_data['existing_major']; - $supported_majors = []; - if (isset($available['supported_majors'])) { - $supported_majors = explode(',', $available['supported_majors']); + try { + $existing_major = ModuleVersion::createFromVersionString($project_data['existing_version'])->getMajorVersion(); + } + catch (UnexpectedValueException $exception) { + // If the version has an unexpected value we can't determine updates. + return; } - elseif (isset($available['default_major'])) { - // Older release history XML file without supported or recommended. - $supported_majors[] = $available['default_major']; + $supported_branches = []; + if (isset($available['supported_branches'])) { + $supported_branches = explode(',', $available['supported_branches']); } - if (in_array($existing_major, $supported_majors)) { + $is_in_supported_branch = function ($version) use ($supported_branches) { + foreach ($supported_branches as $supported_branch) { + if (strpos($version, $supported_branch) === 0) { + return TRUE; + } + } + return FALSE; + }; + if ($is_in_supported_branch($project_data['existing_version'])) { // Still supported, stay at the current major version. $target_major = $existing_major; } - elseif (isset($available['recommended_major'])) { - // Since 'recommended_major' is defined, we know this is the new XML - // format. Therefore, we know the current release is unsupported since - // its major version was not in the 'supported_majors' list. We should - // find the best release from the recommended major version. - $target_major = $available['recommended_major']; + elseif ($supported_branches) { + // We know the current release is unsupported since it is not in + // 'supported_branches' list. We should use the next valid supported + // branch for the target major version. $project_data['status'] = UPDATE_NOT_SUPPORTED; - } - elseif (isset($available['default_major'])) { - // Older release history XML file without recommended, so recommend - // the currently defined "default_major" version. - $target_major = $available['default_major']; + foreach ($supported_branches as $supported_branch) { + try { + $target_major = ModuleVersion::createFromSupportBranch($supported_branch)->getMajorVersion(); + + } + catch (UnexpectedValueException $exception) { + continue; + } + } + if (!isset($target_major)) { + // If there are no valid support branches, use the current major. + $target_major = $existing_major; + } } else { - // Malformed XML file? Stick with the current version. + // Malformed XML file? Stick with the current branch. $target_major = $existing_major; } @@ -273,9 +318,6 @@ function update_calculate_project_update_status(&$project_data, $available) { // what they have is unsupported and let them figure it out. $target_major = max($existing_major, $target_major); - $release_patch_changed = ''; - $patch = ''; - // If the project is marked as UPDATE_FETCH_PENDING, it means that the // data we currently have (if any) is stale, and we've got a task queued // up to (re)fetch the data. In that case, we mark it as such, merge in @@ -293,7 +335,17 @@ function update_calculate_project_update_status(&$project_data, $available) { $project_data['reason'] = t('No available releases found'); return; } + + $recommended_version_without_extra = ''; + $recommended_release = NULL; + foreach ($available['releases'] as $version => $release) { + try { + $release_module_version = ModuleVersion::createFromVersionString($release['version']); + } + catch (UnexpectedValueException $exception) { + continue; + } // First, if this is the existing release, check a few conditions. if ($project_data['existing_version'] === $version) { if (isset($release['terms']['Release type']) && @@ -327,26 +379,23 @@ function update_calculate_project_update_status(&$project_data, $available) { // Otherwise, ignore unpublished, insecure, or unsupported releases. if ($release['status'] == 'unpublished' || + !$is_in_supported_branch($release['version']) || (isset($release['terms']['Release type']) && (in_array('Insecure', $release['terms']['Release type']) || in_array('Unsupported', $release['terms']['Release type'])))) { continue; } + $release_major_version = $release_module_version->getMajorVersion(); // See if this is a higher major version than our target and yet still // supported. If so, record it as an "Also available" release. - // Note: Some projects have a HEAD release from CVS days, which could - // be one of those being compared. They would not have version_major - // set, so we must call isset first. - if (isset($release['version_major']) && $release['version_major'] > $target_major) { - if (in_array($release['version_major'], $supported_majors)) { - if (!isset($project_data['also'])) { - $project_data['also'] = []; - } - if (!isset($project_data['also'][$release['version_major']])) { - $project_data['also'][$release['version_major']] = $version; - $project_data['releases'][$version] = $release; - } + if ($release_major_version > $target_major) { + if (!isset($project_data['also'])) { + $project_data['also'] = []; + } + if (!isset($project_data['also'][$release_major_version])) { + $project_data['also'][$release_major_version] = $version; + $project_data['releases'][$version] = $release; } // Otherwise, this release can't matter to us, since it's neither // from the release series we're currently using nor the recommended @@ -361,32 +410,37 @@ function update_calculate_project_update_status(&$project_data, $available) { // Look for the 'latest version' if we haven't found it yet. Latest is // defined as the most recent version for the target major version. if (!isset($project_data['latest_version']) - && $release['version_major'] == $target_major) { + && $release_major_version == $target_major) { $project_data['latest_version'] = $version; $project_data['releases'][$version] = $release; } // Look for the development snapshot release for this branch. if (!isset($project_data['dev_version']) - && $release['version_major'] == $target_major - && isset($release['version_extra']) - && $release['version_extra'] == 'dev') { + && $release_major_version == $target_major + && $release_module_version->getVersionExtra() === 'dev') { $project_data['dev_version'] = $version; $project_data['releases'][$version] = $release; } + if ($release_module_version->getVersionExtra()) { + $release_version_without_extra = str_replace('-' . $release_module_version->getVersionExtra(), '', $release['version']); + } + else { + $release_version_without_extra = $release['version']; + } + // Look for the 'recommended' version if we haven't found it yet (see // phpdoc at the top of this function for the definition). if (!isset($project_data['recommended']) - && $release['version_major'] == $target_major - && isset($release['version_patch'])) { - if ($patch != $release['version_patch']) { - $patch = $release['version_patch']; - $release_patch_changed = $release; + && $release_major_version == $target_major) { + if ($recommended_version_without_extra !== $release_version_without_extra) { + $recommended_version_without_extra = $release_version_without_extra; + $recommended_release = $release; } - if (empty($release['version_extra']) && $patch == $release['version_patch']) { - $project_data['recommended'] = $release_patch_changed['version']; - $project_data['releases'][$release_patch_changed['version']] = $release_patch_changed; + if ($release_module_version->getVersionExtra() === NULL) { + $project_data['recommended'] = $recommended_release['version']; + $project_data['releases'][$recommended_release['version']] = $recommended_release; } } diff --git a/web/core/modules/update/update.install b/web/core/modules/update/update.install index 4e1af0315c094f6ed4c6974e9f60868da16bd1bb..d977830df5b85b797240a7fac3d9e64b4ae86d7c 100644 --- a/web/core/modules/update/update.install +++ b/web/core/modules/update/update.install @@ -7,6 +7,8 @@ use Drupal\Core\Link; use Drupal\Core\Url; +use Drupal\update\ProjectSecurityData; +use Drupal\update\ProjectSecurityRequirement; /** * Implements hook_requirements(). @@ -36,6 +38,13 @@ function update_requirements($phase) { $data = update_calculate_project_data($available); // First, populate the requirements for core: $requirements['update_core'] = _update_requirement_check($data['drupal'], 'core'); + if (!empty($available['drupal']['releases'])) { + $security_data = ProjectSecurityData::createFromProjectDataAndReleases($data['drupal'], $available['drupal']['releases'])->getCoverageInfo(); + if ($core_coverage_requirement = ProjectSecurityRequirement::createFromProjectDataAndSecurityCoverageInfo($data['drupal'], $security_data)->getRequirement()) { + $requirements['coverage_core'] = $core_coverage_requirement; + } + } + // We don't want to check drupal a second time. unset($data['drupal']); if (!empty($data)) { diff --git a/web/core/modules/update/update.report.inc b/web/core/modules/update/update.report.inc index 035b46e930b4c8151a20f7d858f5c62806445987..8d9fef0c55ceb91dfc702e1fc3d9997d91de56cf 100644 --- a/web/core/modules/update/update.report.inc +++ b/web/core/modules/update/update.report.inc @@ -99,6 +99,36 @@ function template_preprocess_update_report(&$variables) { } } +/** + * Prepares variables for update version templates. + * + * Default template: update-version.html.twig. + * + * @param array $variables + * An associative array containing: + * - version: An array of information about the release version. + */ +function template_preprocess_update_version(array &$variables) { + $version = $variables['version']; + if (empty($version['core_compatibility_message'])) { + return; + } + $core_compatible = !empty($version['core_compatible']); + $variables['core_compatibility_details'] = [ + '#type' => 'details', + '#title' => $core_compatible ? t('Compatible') : t('Not compatible'), + '#open' => !$core_compatible, + 'message' => [ + '#markup' => $version['core_compatibility_message'], + ], + '#attributes' => [ + 'class' => [ + $core_compatible ? 'compatible' : 'not-compatible', + ], + ], + ]; +} + /** * Prepares variables for update project status templates. * diff --git a/web/core/modules/user/src/RoleInterface.php b/web/core/modules/user/src/RoleInterface.php index 463363795827089fb9b9092314ee4440e41d40c2..3c9425f644cff32f9bf76493458243c9a3143bd5 100644 --- a/web/core/modules/user/src/RoleInterface.php +++ b/web/core/modules/user/src/RoleInterface.php @@ -13,12 +13,12 @@ interface RoleInterface extends ConfigEntityInterface { /** - * Role ID for anonymous users; should match what's in the "role" table. + * Role ID for anonymous users; should match the 'role' entity ID. */ const ANONYMOUS_ID = AccountInterface::ANONYMOUS_ROLE; /** - * Role ID for authenticated users; should match what's in the "role" table. + * Role ID for authenticated users; should match the 'role' entity ID. */ const AUTHENTICATED_ID = AccountInterface::AUTHENTICATED_ROLE; diff --git a/web/core/modules/user/tests/src/Functional/UserBlocksTest.php b/web/core/modules/user/tests/src/Functional/UserBlocksTest.php index 0f9b82b8fb6840114a780b6d2de1de8da6ae12f5..32d9197ac79c64ecf10fd1936376670955d5ce57 100644 --- a/web/core/modules/user/tests/src/Functional/UserBlocksTest.php +++ b/web/core/modules/user/tests/src/Functional/UserBlocksTest.php @@ -3,7 +3,6 @@ namespace Drupal\Tests\user\Functional; use Drupal\Core\Url; -use Drupal\Core\Database\Database; use Drupal\dynamic_page_cache\EventSubscriber\DynamicPageCacheSubscriber; use Drupal\Tests\BrowserTestBase; @@ -128,14 +127,4 @@ public function testUserLoginBlock() { $this->assertNoText(t('Unrecognized username or password. Forgot your password?')); } - /** - * Updates the access column for a user. - */ - private function updateAccess($uid, $access = REQUEST_TIME) { - Database::getConnection()->update('users_field_data') - ->condition('uid', $uid) - ->fields(['access' => $access]) - ->execute(); - } - } diff --git a/web/core/modules/views/src/Plugin/views/display/PathPluginBase.php b/web/core/modules/views/src/Plugin/views/display/PathPluginBase.php index e29d8e932bc798263640a9049375e7cba9edc999..b73a42519a33429fce0bac09064e9d3329e441c9 100644 --- a/web/core/modules/views/src/Plugin/views/display/PathPluginBase.php +++ b/web/core/modules/views/src/Plugin/views/display/PathPluginBase.php @@ -101,7 +101,7 @@ public function getPath() { protected function isDefaultTabPath() { $menu = $this->getOption('menu'); $tab_options = $this->getOption('tab_options'); - return $menu['type'] == 'default tab' && !empty($tab_options['type']) && $tab_options['type'] != 'none'; + return $menu && $menu['type'] == 'default tab' && !empty($tab_options['type']) && $tab_options['type'] != 'none'; } /** diff --git a/web/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php b/web/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php index 0febca884eb8399bf7a65dd847dd91704f88cdba..092e42edd7fd266c6ae63c7c1ae972717b5f2bdd 100644 --- a/web/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php +++ b/web/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php @@ -365,9 +365,9 @@ public function getCacheContexts() { // Merge in cache contexts for all exposed filters to prevent display of // cached forms. - foreach ($this->displayHandler->getHandlers('filter') as $filter_hander) { - if ($filter_hander->isExposed()) { - $contexts = Cache::mergeContexts($contexts, $filter_hander->getCacheContexts()); + foreach ($this->displayHandler->getHandlers('filter') as $filter_handler) { + if ($filter_handler->isExposed()) { + $contexts = Cache::mergeContexts($contexts, $filter_handler->getCacheContexts()); } } diff --git a/web/core/modules/views/templates/views-view-opml.html.twig b/web/core/modules/views/templates/views-view-opml.html.twig index 0564bf6ef03dcdda1f503792c5b2b812b628b334..2fffac59f1f9c815f701d4abaccb9d54edad7ca0 100644 --- a/web/core/modules/views/templates/views-view-opml.html.twig +++ b/web/core/modules/views/templates/views-view-opml.html.twig @@ -13,7 +13,7 @@ * @ingroup themeable */ #} -<?xml version="1.0" encoding="utf-8" ?> +<?xml version="1.0" encoding="utf-8"?> <opml version="2.0"> <head> <title>{{ title }}</title> diff --git a/web/core/modules/views/templates/views-view-rss.html.twig b/web/core/modules/views/templates/views-view-rss.html.twig index 19b5097a048c763a2bcc120116cbf06bfc870224..cd80f8106eb9dddeaf0839edbc0457f0dfeb4e3f 100644 --- a/web/core/modules/views/templates/views-view-rss.html.twig +++ b/web/core/modules/views/templates/views-view-rss.html.twig @@ -17,7 +17,7 @@ * @ingroup themeable */ #} -<?xml version="1.0" encoding="utf-8" ?> +<?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xml:base="{{ link }}"{{ namespaces }}> <channel> <title>{{ title }}</title> diff --git a/web/core/modules/views/tests/src/Functional/Handler/HandlerAllTest.php b/web/core/modules/views/tests/src/Functional/Handler/HandlerAllTest.php index e948273ec0b13c7d11a985253c7d47a0e1dec8ef..2f82ca599dbaba9dad942958066fc0aab530b317 100644 --- a/web/core/modules/views/tests/src/Functional/Handler/HandlerAllTest.php +++ b/web/core/modules/views/tests/src/Functional/Handler/HandlerAllTest.php @@ -5,6 +5,7 @@ use Drupal\Component\Render\FormattableMarkup; use Drupal\comment\Tests\CommentTestTrait; use Drupal\Tests\views\Functional\ViewTestBase; +use Drupal\views\Plugin\views\filter\NumericFilter; use Drupal\views\ViewExecutable; use Drupal\views\Plugin\views\HandlerBase; use Drupal\views\Plugin\views\filter\InOperator; @@ -86,6 +87,9 @@ public function testHandlers() { if ($handler instanceof InOperator) { $options['value'] = [1]; } + elseif ($handler instanceof NumericFilter) { + $options['value'] = ['value' => 1]; + } else { $options['value'] = 1; } diff --git a/web/core/modules/views/tests/src/Functional/Wizard/BasicTest.php b/web/core/modules/views/tests/src/Functional/Wizard/BasicTest.php index 79cf695fedcdeb64e16d44d4616c320890c88658..cd0b4d7ca7e419177da58c1ce1bf1742dbf872f3 100644 --- a/web/core/modules/views/tests/src/Functional/Wizard/BasicTest.php +++ b/web/core/modules/views/tests/src/Functional/Wizard/BasicTest.php @@ -176,6 +176,20 @@ public function testViewsWizardAndListing() { $this->assertEqual(count($data), 1, 'Only the node of type page is exported.'); $node = reset($data); $this->assertEqual($node['nid'][0]['value'], $node1->id(), 'The node of type page is exported.'); + + // Create a view with a leading slash in the path and test that is properly + // set. + $leading_slash_view = []; + $leading_slash_view['label'] = $this->randomMachineName(16); + $leading_slash_view['id'] = strtolower($this->randomMachineName(16)); + $leading_slash_view['description'] = $this->randomMachineName(16); + $leading_slash_view['show[wizard_key]'] = 'node'; + $leading_slash_view['show[type]'] = 'page'; + $leading_slash_view['page[create]'] = 1; + $leading_slash_view['page[title]'] = $this->randomMachineName(16); + $leading_slash_view['page[path]'] = '/' . $this->randomMachineName(16); + $this->drupalPostForm('admin/structure/views/add', $leading_slash_view, t('Save and edit')); + $this->assertEquals($leading_slash_view['page[path]'], $this->cssSelect('#views-page-1-path')[0]->getText()); } /** diff --git a/web/core/modules/views/tests/src/Kernel/Plugin/FieldOrLanguageJoinTest.php b/web/core/modules/views/tests/src/Kernel/Plugin/FieldOrLanguageJoinTest.php index 34e4f93000dda44e33d0747b91f1127ad01dcc3d..76be7154df46f3deeb5c90242bf8164ea81ad8a4 100644 --- a/web/core/modules/views/tests/src/Kernel/Plugin/FieldOrLanguageJoinTest.php +++ b/web/core/modules/views/tests/src/Kernel/Plugin/FieldOrLanguageJoinTest.php @@ -137,7 +137,7 @@ public function testLanguageBundleConditions() { // condition. $configuration = [ 'table' => 'node__field_tags', - 'left_table' => 'node', + 'left_table' => 'views_test_data', 'left_field' => 'nid', 'field' => 'entity_id', 'extra' => [ @@ -148,7 +148,7 @@ public function testLanguageBundleConditions() { ], ]; $join_info = $this->buildJoin($view, $configuration, 'node__field_tags'); - $this->assertContains('AND (node__field_tags.langcode = .langcode)', $join_info['condition']); + $this->assertContains('AND (node__field_tags.langcode = views_test_data.langcode)', $join_info['condition']); array_unshift($configuration['extra'], [ 'field' => 'deleted', @@ -156,7 +156,7 @@ public function testLanguageBundleConditions() { 'numeric' => TRUE, ]); $join_info = $this->buildJoin($view, $configuration, 'node__field_tags'); - $this->assertContains('AND (node__field_tags.langcode = .langcode)', $join_info['condition']); + $this->assertContains('AND (node__field_tags.langcode = views_test_data.langcode)', $join_info['condition']); // Replace the language condition with a bundle condition. $configuration['extra'][1] = [ @@ -173,7 +173,7 @@ public function testLanguageBundleConditions() { 'field' => 'langcode', ]; $join_info = $this->buildJoin($view, $configuration, 'node__field_tags'); - $this->assertContains('AND (node__field_tags.bundle = :views_join_condition_1 OR node__field_tags.langcode = .langcode)', $join_info['condition']); + $this->assertContains('AND (node__field_tags.bundle = :views_join_condition_1 OR node__field_tags.langcode = views_test_data.langcode)', $join_info['condition']); } /** diff --git a/web/core/modules/views/tests/src/Kernel/ViewsConfigDependenciesIntegrationTest.php b/web/core/modules/views/tests/src/Kernel/ViewsConfigDependenciesIntegrationTest.php index 5d6b078ead416f96cb3986a5475783f27915a632..0b75a7fdc280994e447ca554977e980e40cc49e6 100644 --- a/web/core/modules/views/tests/src/Kernel/ViewsConfigDependenciesIntegrationTest.php +++ b/web/core/modules/views/tests/src/Kernel/ViewsConfigDependenciesIntegrationTest.php @@ -148,7 +148,7 @@ public function testConfigRemovalBaseTable() { foreach ($entities as $entity_type_id => $definition) { if ($definition->getProvider() == 'entity_test') { $this->installEntitySchema($entity_type_id); - }; + } } // Check that removing the module that provides the base table for a View, diff --git a/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php b/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php index 623436e6babdea5bf23ab0f49128d90f1036d13b..b0b6850deb7e70cefa8078e3794f7c870eba89b5 100644 --- a/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php +++ b/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php @@ -136,6 +136,9 @@ protected function setUp() { $this->executable = $this->getMockBuilder('Drupal\views\ViewExecutable') ->disableOriginalConstructor() ->getMock(); + $this->executable->style_plugin = $this->getMockBuilder('Drupal\views\Plugin\views\style\StylePluginBase') + ->disableOriginalConstructor() + ->getMock(); $this->display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase') ->disableOriginalConstructor() ->getMock(); diff --git a/web/core/modules/views_ui/src/ViewAddForm.php b/web/core/modules/views_ui/src/ViewAddForm.php index cfdd4e206e0c8ae92673b9cc87402a03e471ccf9..37b0136e555f3d11ea7ef5b2bb465100e5ae57c7 100644 --- a/web/core/modules/views_ui/src/ViewAddForm.php +++ b/web/core/modules/views_ui/src/ViewAddForm.php @@ -164,6 +164,13 @@ public function validateForm(array &$form, FormStateInterface $form_state) { $wizard_instance = $this->wizardManager->createInstance($wizard_type); $form_state->set('wizard', $wizard_instance->getPluginDefinition()); $form_state->set('wizard_instance', $wizard_instance); + + $path = &$form_state->getValue(['page', 'path']); + if (!empty($path)) { + // @todo https://www.drupal.org/node/2423913 Views should expect and store + // a leading /. + $path = ltrim($path, '/ '); + } $errors = $wizard_instance->validateView($form, $form_state); foreach ($errors as $display_errors) { diff --git a/web/core/modules/workspaces/src/EntityOperations.php b/web/core/modules/workspaces/src/EntityOperations.php index b8894643c77272c2845a2de0f648b1a890265b8e..a30f617840eafed2027085382b69c3e956d6fb44 100644 --- a/web/core/modules/workspaces/src/EntityOperations.php +++ b/web/core/modules/workspaces/src/EntityOperations.php @@ -280,7 +280,7 @@ public function entityFormAlter(array &$form, FormStateInterface $form_state, $f $form['#access'] = FALSE; continue; } - }; + } } /** diff --git a/web/core/modules/workspaces/src/EntityTypeInfo.php b/web/core/modules/workspaces/src/EntityTypeInfo.php index 4f0ba1a7d4673c461c69dc3a9b77d3219316217c..963da2186825f6a62c47a97ac3f98f5626fe107b 100644 --- a/web/core/modules/workspaces/src/EntityTypeInfo.php +++ b/web/core/modules/workspaces/src/EntityTypeInfo.php @@ -69,10 +69,7 @@ public function entityTypeBuild(array &$entity_types) { foreach ($entity_types as $entity_type) { if ($this->workspaceManager->isEntityTypeSupported($entity_type)) { $entity_type->addConstraint('EntityWorkspaceConflict'); - - $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); - $revision_metadata_keys['workspace'] = 'workspace'; - $entity_type->set('revision_metadata_keys', $revision_metadata_keys); + $entity_type->setRevisionMetadataKey('workspace', 'workspace'); } } } @@ -127,7 +124,9 @@ public function fieldInfoAlter(&$definitions) { */ public function entityBaseFieldInfo(EntityTypeInterface $entity_type) { if ($this->workspaceManager->isEntityTypeSupported($entity_type)) { - $field_name = $entity_type->getRevisionMetadataKey('workspace'); + // Disable the BC layer to prevent a recursion, this only needs the + // workspace key that is always set. + $field_name = $entity_type->getRevisionMetadataKeys(FALSE)['workspace']; $fields[$field_name] = BaseFieldDefinition::create('entity_reference') ->setLabel(new TranslatableMarkup('Workspace')) ->setDescription(new TranslatableMarkup('Indicates the workspace that this revision belongs to.')) diff --git a/web/core/modules/workspaces/src/EventSubscriber/EntitySchemaSubscriber.php b/web/core/modules/workspaces/src/EventSubscriber/EntitySchemaSubscriber.php index c38495f37cfe98be0a29fc77b23adf9b700b2daf..6f521014a230dbc072c29b799a7208e8ff10a9a3 100644 --- a/web/core/modules/workspaces/src/EventSubscriber/EntitySchemaSubscriber.php +++ b/web/core/modules/workspaces/src/EventSubscriber/EntitySchemaSubscriber.php @@ -99,12 +99,9 @@ public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeI $field_storage_definition = $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($entity_type->id())[$revision_metadata_keys['workspace']]; $this->entityDefinitionUpdateManager->uninstallFieldStorageDefinition($field_storage_definition); - $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); - unset($revision_metadata_keys['workspace']); - $entity_type->set('revision_metadata_keys', $revision_metadata_keys); - // We are only removing a revision metadata key so we don't need to go // through the entity update process. + $entity_type->setRevisionMetadataKey('workspace', NULL); $this->entityLastInstalledSchemaRepository->setLastInstalledDefinition($entity_type); } } @@ -130,23 +127,19 @@ public function onEntityTypeDelete(EntityTypeInterface $entity_type) { * The entity type that has been installed or updated. */ protected function addRevisionMetadataField(EntityTypeInterface $entity_type) { - $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); - - if (!isset($revision_metadata_keys['workspace'])) { + if (!$entity_type->hasRevisionMetadataKey('workspace')) { // Bail out if there's an existing field called 'workspace'. if ($this->entityDefinitionUpdateManager->getFieldStorageDefinition('workspace', $entity_type->id())) { throw new \RuntimeException("An existing 'workspace' field was found for the '{$entity_type->id()}' entity type. Set the 'workspace' revision metadata key to use a different field name and run this update function again."); } - $revision_metadata_keys['workspace'] = 'workspace'; - $entity_type->set('revision_metadata_keys', $revision_metadata_keys); - // We are only adding a revision metadata key so we don't need to go // through the entity update process. + $entity_type->setRevisionMetadataKey('workspace', 'workspace'); $this->entityLastInstalledSchemaRepository->setLastInstalledDefinition($entity_type); } - $this->entityDefinitionUpdateManager->installFieldStorageDefinition($revision_metadata_keys['workspace'], $entity_type->id(), 'workspaces', $this->getWorkspaceFieldDefinition()); + $this->entityDefinitionUpdateManager->installFieldStorageDefinition($entity_type->getRevisionMetadataKey('workspace'), $entity_type->id(), 'workspaces', $this->getWorkspaceFieldDefinition()); } /** diff --git a/web/core/modules/workspaces/tests/fixtures/update/drupal-8.6.0-workspaces_installed.php b/web/core/modules/workspaces/tests/fixtures/update/drupal-8.6.0-workspaces_installed.php index 459a7207e77284e754ca3eff07d80176f8f38c8f..02b981b65281ce6b34aa982b4c1032f81c977d1a 100644 Binary files a/web/core/modules/workspaces/tests/fixtures/update/drupal-8.6.0-workspaces_installed.php and b/web/core/modules/workspaces/tests/fixtures/update/drupal-8.6.0-workspaces_installed.php differ diff --git a/web/core/modules/workspaces/tests/src/Functional/Update/WorkspacesUpdateTest.php b/web/core/modules/workspaces/tests/src/Functional/Update/WorkspacesUpdateTest.php index 30062be1c7dfec9900326e127bdcb5dffc5a95ac..abc1869ef744fb9231603897434aac22adf43ecc 100644 --- a/web/core/modules/workspaces/tests/src/Functional/Update/WorkspacesUpdateTest.php +++ b/web/core/modules/workspaces/tests/src/Functional/Update/WorkspacesUpdateTest.php @@ -25,7 +25,7 @@ class WorkspacesUpdateTest extends UpdatePathTestBase { */ public function setDatabaseDumpFiles() { $this->databaseDumpFiles = [ - __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz', + __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.4.0.bare.standard.php.gz', __DIR__ . '/../../../fixtures/update/drupal-8.6.0-workspaces_installed.php', ]; } diff --git a/web/core/modules/workspaces/tests/src/Functional/WorkspaceRevisionMetadataFieldTest.php b/web/core/modules/workspaces/tests/src/Functional/WorkspaceRevisionMetadataFieldTest.php new file mode 100644 index 0000000000000000000000000000000000000000..958633e0c27743c849f9482250f48ac861f5b485 --- /dev/null +++ b/web/core/modules/workspaces/tests/src/Functional/WorkspaceRevisionMetadataFieldTest.php @@ -0,0 +1,77 @@ +<?php + +namespace Drupal\Tests\workspaces\Functional; + +use Drupal\Tests\BrowserTestBase; + +/** + * Tests the addition of the revision metadata key. + * + * @group workspaces + * @group legacy + */ +class WorkspaceRevisionMetadataFieldTest extends BrowserTestBase { + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * {@inheritdoc} + */ + protected static $modules = ['entity_test_revlog']; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->entityTypeManager = \Drupal::entityTypeManager(); + } + + /** + * Tests the addition of the 'workspaces' revision metadata field. + * + * @expectedDeprecation The revision_user revision metadata key is not set for entity type: entity_test_mul_revlog_pub See: https://www.drupal.org/node/2831499 + * @expectedDeprecation The revision_created revision metadata key is not set for entity type: entity_test_mul_revlog_pub See: https://www.drupal.org/node/2831499 + * @expectedDeprecation The revision_log_message revision metadata key is not set for entity type: entity_test_mul_revlog_pub See: https://www.drupal.org/node/2831499 + */ + public function testWorkspacesField() { + $revision_metadata_keys_prev_live = $this->entityTypeManager->getDefinition('entity_test_mul_revlog_pub') + ->getRevisionMetadataKeys(); + $revision_metadata_keys_prev_installed = $this->entityTypeManager->getActiveDefinition('entity_test_mul_revlog_pub') + ->getRevisionMetadataKeys(); + + $this->container->get('module_installer')->install(['workspaces']); + $this->entityTypeManager->clearCachedDefinitions(); + + $revision_metadata_keys_current_live = $this->entityTypeManager->getDefinition('entity_test_mul_revlog_pub') + ->getRevisionMetadataKeys(); + $revision_metadata_keys_current_installed = $this->entityTypeManager->getActiveDefinition('entity_test_mul_revlog_pub') + ->getRevisionMetadataKeys(); + + // Ensure that the live revision metadata keys have changed only by the + // workspace revision metadata key. + $expected_revision_metadata_keys_live = $revision_metadata_keys_prev_live + ['workspace' => 'workspace']; + asort($expected_revision_metadata_keys_live); + asort($revision_metadata_keys_current_live); + $this->assertEquals($expected_revision_metadata_keys_live, $revision_metadata_keys_current_live); + + // Ensure that the installed revision metadata keys have changed only by the + // workspace revision metadata key. + $expected_revision_metadata_keys_installed = $revision_metadata_keys_prev_installed + ['workspace' => 'workspace']; + asort($expected_revision_metadata_keys_installed); + asort($revision_metadata_keys_current_installed); + $this->assertEquals($expected_revision_metadata_keys_installed, $revision_metadata_keys_current_installed); + } + +} diff --git a/web/core/modules/workspaces/tests/src/Functional/WorkspacesUninstallTest.php b/web/core/modules/workspaces/tests/src/Functional/WorkspacesUninstallTest.php index 975bacabf97fdb472292f35b786d2a4f7722d5b2..8fe0913dc4959ef7602a20999c96a5f7aee88c45 100644 --- a/web/core/modules/workspaces/tests/src/Functional/WorkspacesUninstallTest.php +++ b/web/core/modules/workspaces/tests/src/Functional/WorkspacesUninstallTest.php @@ -45,8 +45,11 @@ public function testUninstallingWorkspace() { $this->assertFalse(\Drupal::database()->schema()->fieldExists('node_revision', 'workspace')); // Verify that the revision metadata key has been removed. - $revision_metadata_keys = \Drupal::entityDefinitionUpdateManager()->getEntityType('node')->get('revision_metadata_keys'); + $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('node'); + $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); $this->assertArrayNotHasKey('workspace', $revision_metadata_keys); + $required_revision_metadata_keys = $entity_type->get('requiredRevisionMetadataKeys'); + $this->assertArrayNotHasKey('workspace', $required_revision_metadata_keys); } } diff --git a/web/core/modules/workspaces/workspaces.install b/web/core/modules/workspaces/workspaces.install index acf3b21fd3d149819138196bca4314e86ca7e953..4e7bca1531b2f2ea5f65b0362c9f7a2afd78ddc5 100644 --- a/web/core/modules/workspaces/workspaces.install +++ b/web/core/modules/workspaces/workspaces.install @@ -43,8 +43,7 @@ function workspaces_module_preinstall($module) { foreach ($entity_definition_update_manager->getEntityTypes() as $entity_type) { $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); if ($workspace_manager->isEntityTypeSupported($entity_type)) { - $revision_metadata_keys['workspace'] = 'workspace'; - $entity_type->set('revision_metadata_keys', $revision_metadata_keys); + $entity_type->setRevisionMetadataKey('workspace', 'workspace'); $entity_definition_update_manager->updateEntityType($entity_type); } } @@ -135,15 +134,19 @@ function workspaces_update_8801() { $revision_metadata_keys = $entity_type->get('revision_metadata_keys'); if (!isset($revision_metadata_keys['workspace'])) { + $revision_metadata_field_name = 'workspace'; + // Bail out if there's an existing field called 'workspace'. - if ($entity_definition_update_manager->getFieldStorageDefinition('workspace', $entity_type_id)) { + if ($entity_definition_update_manager->getFieldStorageDefinition($revision_metadata_field_name, $entity_type_id)) { throw new \RuntimeException("An existing 'workspace' field was found for the '$entity_type_id' entity type. Set the 'workspace' revision metadata key to use a different field name and run this update function again."); } - $revision_metadata_keys['workspace'] = 'workspace'; - $entity_type->set('revision_metadata_keys', $revision_metadata_keys); + $entity_type->setRevisionMetadataKey('workspace', $revision_metadata_field_name); $entity_definition_update_manager->updateEntityType($entity_type); } + else { + $revision_metadata_field_name = $revision_metadata_keys['workspace']; + } $field_storage = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Workspace')) @@ -153,7 +156,7 @@ function workspaces_update_8801() { ->setTranslatable(FALSE) ->setRevisionable(TRUE); - $entity_definition_update_manager->installFieldStorageDefinition($revision_metadata_keys['workspace'], $entity_type_id, 'workspaces', $field_storage); + $entity_definition_update_manager->installFieldStorageDefinition($revision_metadata_field_name, $entity_type_id, 'workspaces', $field_storage); } } diff --git a/web/core/modules/workspaces/workspaces.post_update.php b/web/core/modules/workspaces/workspaces.post_update.php index b32be7d4247d1098bfb9c8a6df8b853a8856ccb7..b705613012b565b7c1d85e5926f1cb4926c8fbdf 100644 --- a/web/core/modules/workspaces/workspaces.post_update.php +++ b/web/core/modules/workspaces/workspaces.post_update.php @@ -143,3 +143,22 @@ function workspaces_post_update_update_deploy_form_display() { $form_display->removeComponent('parent')->save(); } } + +/** + * Removes the workspace association entity and field schema data. + */ +function workspaces_post_update_remove_association_schema_data() { + // Delete the entity and field schema data. + $keys = [ + 'workspace_association.entity_schema_data', + 'workspace_association.field_schema_data.id', + 'workspace_association.field_schema_data.revision_id', + 'workspace_association.field_schema_data.uuid', + 'workspace_association.field_schema_data.revision_default', + 'workspace_association.field_schema_data.target_entity_id', + 'workspace_association.field_schema_data.target_entity_revision_id', + 'workspace_association.field_schema_data.target_entity_type_id', + 'workspace_association.field_schema_data.workspace', + ]; + \Drupal::keyValue('entity.storage_schema.sql')->deleteMultiple($keys); +} diff --git a/web/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/web/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d6d90504e1df52085e7ba08f0730fc4fc3b06d74 --- /dev/null +++ b/web/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php @@ -0,0 +1,211 @@ +<?php + +namespace Drupal\BuildTests\Composer\Template; + +use Composer\Json\JsonFile; +use Drupal\BuildTests\Framework\BuildTestBase; +use Drupal\Composer\Composer; +use Symfony\Component\Finder\Finder; + +/** + * Demonstrate that Composer project templates are buildable as patched. + * + * We have to use the packages.json fixture so that Composer will use the + * in-codebase version of the project template. + * + * We also have to add path repositories to the in-codebase project template or + * else Composer will try to use packagist to resolve dependencies we'd prefer + * it to find locally. + * + * This is because Composer only uses the packages.json file to resolve the + * project template and not any other dependencies. + * + * @group #slow + * @group Template + * + * @requires externalCommand composer + */ +class ComposerProjectTemplatesTest extends BuildTestBase { + + /** + * Get Composer items that we want to be path repos, from within a directory. + * + * @param string $workspace_directory + * The full path to the workspace directory. + * @param string $subdir + * The subdirectory to search under composer/. + * + * @return string[] + * Array of paths, indexed by package name. + */ + public function getPathReposForType($workspace_directory, $subdir) { + // Find the Composer items that we want to be path repos. + $path_repos = Finder::create() + ->files() + ->name('composer.json') + ->in($workspace_directory . '/composer/' . $subdir); + + $data = []; + /* @var $path_repo \SplFileInfo */ + foreach ($path_repos as $path_repo) { + $json_file = new JsonFile($path_repo->getPathname()); + $json = $json_file->read(); + $data[$json['name']] = $path_repo->getPath(); + } + return $data; + } + + public function provideTemplateCreateProject() { + return [ + 'recommended-project' => [ + 'drupal/recommended-project', + 'composer/Template/RecommendedProject', + '/web', + ], + 'legacy-project' => [ + 'drupal/legacy-project', + 'composer/Template/LegacyProject', + '', + ], + ]; + } + + /** + * Make sure we've accounted for all the templates. + */ + public function testVerifyTemplateTestProviderIsAccurate() { + $root = $this->getDrupalRoot(); + $data = $this->provideTemplateCreateProject($root); + + // Find all the templates. + $template_files = Finder::create() + ->files() + ->name('composer.json') + ->in($root . '/composer/Template'); + + $this->assertEquals(count($template_files), count($data)); + + // We could have the same number of templates but different names. + $template_data = []; + foreach ($data as $data_name => $data_value) { + $template_data[$data_value[0]] = $data_name; + } + /* @var $file \SplFileInfo */ + foreach ($template_files as $file) { + $json_file = new JsonFile($file->getPathname()); + $json = $json_file->read(); + $this->assertArrayHasKey('name', $json); + // Does provideTemplateCreateProject() give us this template name? + $this->assertArrayHasKey($json['name'], $template_data); + } + } + + /** + * @dataProvider provideTemplateCreateProject + */ + public function testTemplateCreateProject($project, $package_dir, $docroot_dir) { + $this->copyCodebase(); + + // Get the Drupal core version branch. For instance, this should be + // 8.9.x-dev for the 8.9.x branch. + $core_version = Composer::drupalVersionBranch(); + + // Set up the template to use our path repos. Inclusion of metapackages is + // reported differently, so we load up a separate set for them. + $metapackage_path_repos = $this->getPathReposForType($this->getWorkspaceDirectory(), 'Metapackage'); + $path_repos = array_merge($metapackage_path_repos, $this->getPathReposForType($this->getWorkspaceDirectory(), 'Plugin')); + // Always add drupal/core as a path repo. + $path_repos['drupal/core'] = $this->getWorkspaceDirectory() . '/core'; + foreach ($path_repos as $name => $path) { + $this->executeCommand('composer config repositories.' . $name . ' path ' . $path, $package_dir); + $this->assertCommandSuccessful(); + } + + $repository_path = $this->getWorkspaceDirectory() . '/test_repository/packages.json'; + $this->makeTestPackage($repository_path, $core_version); + + $autoloader = $this->getWorkspaceDirectory() . '/testproject' . $docroot_dir . '/autoload.php'; + $this->assertFileNotExists($autoloader); + + $this->executeCommand("COMPOSER_CORE_VERSION=$core_version composer create-project $project testproject $core_version -s dev -vv --repository $repository_path"); + $this->assertCommandSuccessful(); + + // Ensure we used the project from our codebase. + $this->assertErrorOutputContains("Installing $project ($core_version): Symlinking from $package_dir"); + // Ensure that we used drupal/core from our codebase. This probably means + // that drupal/core-recommended was added successfully by the project. + $this->assertErrorOutputContains("Installing drupal/core ($core_version): Symlinking from"); + // Verify that there is an autoloader. + $this->assertFileExists($autoloader); + + // In order to verify that Composer used the path repos for our project, we + // have to get the requirements from the project composer.json so we can + // reconcile our expectations. + $template_json_file = $this->getWorkspaceDirectory() . '/' . $package_dir . '/composer.json'; + $this->assertFileExists($template_json_file); + $json_file = new JsonFile($template_json_file); + $template_json = $json_file->read(); + // Get the require and require-dev information, and ensure that our + // requirements are not erroneously empty. + $this->assertNotEmpty( + $require = array_merge($template_json['require'] ?? [], $template_json['require-dev'] ?? []) + ); + // Verify that path repo packages were installed. + $path_repos = array_keys($path_repos); + foreach (array_keys($require) as $package_name) { + if (in_array($package_name, $path_repos)) { + // Metapackages do not report that they were installed as symlinks, but + // we still must check that their installed version matches + // COMPOSER_CORE_VERSION. + if (array_key_exists($package_name, $metapackage_path_repos)) { + $this->assertErrorOutputContains("Installing $package_name ($core_version)"); + } + else { + $this->assertErrorOutputContains("Installing $package_name ($core_version): Symlinking from"); + } + } + } + } + + /** + * Creates a test package that points to the templates. + * + * @param string $repository_path + * The path where to create the test package. + * @param string $version + * The version under test. + */ + protected function makeTestPackage($repository_path, $version) { + $json = <<<JSON +{ + "packages": { + "drupal/recommended-project": { + "$version": { + "name": "drupal/recommended-project", + "dist": { + "type": "path", + "url": "composer/Template/RecommendedProject" + }, + "type": "project", + "version": "$version" + } + }, + "drupal/legacy-project": { + "$version": { + "name": "drupal/legacy-project", + "dist": { + "type": "path", + "url": "composer/Template/LegacyProject" + }, + "type": "project", + "version": "$version" + } + } + } +} +JSON; + mkdir(dirname($repository_path)); + file_put_contents($repository_path, $json); + } + +} diff --git a/web/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php b/web/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php index d2c87c9fc3837f319261512c73935f7de803981c..aed232f785244e7a5d30cd104ba340fe983aed33 100644 --- a/web/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php +++ b/web/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php @@ -12,16 +12,16 @@ /** * Provides convenience methods for assertions in browser tests. * - * Deprecated Scheduled for removal in Drupal 10.0.0. Use the methods on - * \Drupal\Tests\WebAssert instead, for example + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * the methods on \Drupal\Tests\WebAssert instead, for example * @code * $this->assertSession()->statusCodeEquals(200); * @endcode * - * @todo https://www.drupal.org/project/drupal/issues/3031580 Note that + * @todo https://www.drupal.org/project/drupal/issues/3114617 Note that * deprecations in this file do not use the @ symbol in Drupal 8 because this * will be removed in Drupal 10.0.0. Adding the @ back should re-enable coding - * stanadrds checks. + * standards checks. */ trait AssertLegacyTrait { @@ -33,8 +33,8 @@ trait AssertLegacyTrait { * @param string $css_selector * The CSS selector identifying the element to check. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->elementExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->elementExists() instead. */ protected function assertElementPresent($css_selector) { $this->assertSession()->elementExists('css', $css_selector); @@ -46,8 +46,8 @@ protected function assertElementPresent($css_selector) { * @param string $css_selector * The CSS selector identifying the element to check. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->elementNotExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->elementNotExists() instead. */ protected function assertElementNotPresent($css_selector) { $this->assertSession()->elementNotExists('css', $css_selector); @@ -62,13 +62,12 @@ protected function assertElementNotPresent($css_selector) { * @param string $text * Plain text to look for. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use instead: - * - $this->assertSession()->responseContains() for non-HTML responses, - * like XML or Json. - * - $this->assertSession()->pageTextContains() for HTML responses. Unlike - * the deprecated assertText(), the passed text should be HTML decoded, - * exactly as a human sees it in the browser. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * - $this->assertSession()->responseContains() for non-HTML responses, + * like XML or Json. + * - $this->assertSession()->pageTextContains() for HTML responses. Unlike + * the deprecated assertText(), the passed text should be HTML decoded, + * exactly as a human sees it in the browser. */ protected function assertText($text) { // Cast MarkupInterface to string. @@ -94,13 +93,12 @@ protected function assertText($text) { * @param string $text * Plain text to look for. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use instead: - * - $this->assertSession()->responseNotContains() for non-HTML responses, - * like XML or Json. - * - $this->assertSession()->pageTextNotContains() for HTML responses. - * Unlike the deprecated assertNoText(), the passed text should be HTML - * decoded, exactly as a human sees it in the browser. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * - $this->assertSession()->responseNotContains() for non-HTML responses, + * like XML or Json. + * - $this->assertSession()->pageTextNotContains() for HTML responses. + * Unlike the deprecated assertNoText(), the passed text should be HTML + * decoded, exactly as a human sees it in the browser. */ protected function assertNoText($text) { // Cast MarkupInterface to string. @@ -160,8 +158,8 @@ protected function assertTextHelper($text, $not_exists = TRUE) { * (optional) A message to display with the assertion. Do not translate * messages with t(). If left blank, a default message will be displayed. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->getSession()->getPage()->getText() and substr_count() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->getSession()->getPage()->getText() and substr_count() instead. */ protected function assertUniqueText($text, $message = NULL) { // Cast MarkupInterface objects to string. @@ -186,8 +184,8 @@ protected function assertUniqueText($text, $message = NULL) { * (optional) A message to display with the assertion. Do not translate * messages with t(). If left blank, a default message will be displayed. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->getSession()->getPage()->getText() and substr_count() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->getSession()->getPage()->getText() and substr_count() instead. */ protected function assertNoUniqueText($text, $message = '') { // Cast MarkupInterface objects to string. @@ -206,8 +204,8 @@ protected function assertNoUniqueText($text, $message = '') { * Response code. For example 200 is a successful page request. For a list * of all codes see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->statusCodeEquals() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->statusCodeEquals() instead. */ protected function assertResponse($code) { $this->assertSession()->statusCodeEquals($code); @@ -223,8 +221,8 @@ protected function assertResponse($code) { * to skip checking the actual value, while still checking that the field * exists. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->fieldExists() or + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->fieldExists() or * $this->assertSession()->buttonExists() or * $this->assertSession()->fieldValueEquals() instead. */ @@ -243,8 +241,8 @@ protected function assertFieldByName($name, $value = NULL) { * value, while still checking that the field does not exist. However, the * default value ('') asserts that the field value is not an empty string. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->fieldNotExists() or + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->fieldNotExists() or * $this->assertSession()->buttonNotExists() or * $this->assertSession()->fieldValueNotEquals() instead. */ @@ -265,8 +263,8 @@ protected function assertNoFieldByName($name, $value = '') { * * @throws \Behat\Mink\Exception\ElementNotFoundException * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->fieldExists() or + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->fieldExists() or * $this->assertSession()->buttonExists() or * $this->assertSession()->fieldValueEquals() instead. */ @@ -280,8 +278,8 @@ protected function assertFieldById($id, $value = '') { * @param string $field * Name or ID of field to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->fieldExists() or + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->fieldExists() or * $this->assertSession()->buttonExists() instead. */ protected function assertField($field) { @@ -294,8 +292,8 @@ protected function assertField($field) { * @param string $field * Name or ID of field to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->fieldNotExists() or + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->fieldNotExists() or * $this->assertSession()->buttonNotExists() instead. */ protected function assertNoField($field) { @@ -310,8 +308,8 @@ protected function assertNoField($field) { * @param string $raw * Raw (HTML) string to look for. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseContains() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseContains() instead. */ protected function assertRaw($raw) { $this->assertSession()->responseContains($raw); @@ -325,8 +323,8 @@ protected function assertRaw($raw) { * @param string $raw * Raw (HTML) string to look for. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseNotContains() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseNotContains() instead. */ protected function assertNoRaw($raw) { $this->assertSession()->responseNotContains($raw); @@ -338,8 +336,8 @@ protected function assertNoRaw($raw) { * @param string $expected_title * The string the page title should be. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->titleEquals() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->titleEquals() instead. */ protected function assertTitle($expected_title) { // Cast MarkupInterface to string. @@ -357,8 +355,8 @@ protected function assertTitle($expected_title) { * @param int $index * Link position counting from zero. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->linkExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->linkExists() instead. */ protected function assertLink($label, $index = 0) { return $this->assertSession()->linkExists($label, $index); @@ -370,8 +368,8 @@ protected function assertLink($label, $index = 0) { * @param string|\Drupal\Component\Render\MarkupInterface $label * Text between the anchor tags. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->linkNotExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->linkNotExists() instead. */ protected function assertNoLink($label) { return $this->assertSession()->linkNotExists($label); @@ -385,8 +383,8 @@ protected function assertNoLink($label) { * @param int $index * Link position counting from zero. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->linkByHrefExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->linkByHrefExists() instead. */ protected function assertLinkByHref($href, $index = 0) { $this->assertSession()->linkByHrefExists($href, $index); @@ -398,8 +396,8 @@ protected function assertLinkByHref($href, $index = 0) { * @param string $href * The full or partial value of the 'href' attribute of the anchor tag. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->linkByHrefNotExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->linkByHrefNotExists() instead. */ protected function assertNoLinkByHref($href) { $this->assertSession()->linkByHrefNotExists($href); @@ -418,8 +416,8 @@ protected function assertNoLinkByHref($href) { * * @throws \Behat\Mink\Exception\ExpectationException * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->fieldNotExists() or + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->fieldNotExists() or * $this->assertSession()->buttonNotExists() or * $this->assertSession()->fieldValueNotEquals() instead. */ @@ -433,8 +431,8 @@ protected function assertNoFieldById($id, $value = '') { * @param \Drupal\Core\Url|string $path * The expected system path or URL. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->addressEquals() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->addressEquals() instead. */ protected function assertUrl($path) { $this->assertSession()->addressEquals($path); @@ -448,8 +446,8 @@ protected function assertUrl($path) { * @param string $option * Option to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->optionExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->optionExists() instead. */ protected function assertOption($id, $option) { return $this->assertSession()->optionExists($id, $option); @@ -463,8 +461,8 @@ protected function assertOption($id, $option) { * @param string $text * The text for the option tag to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->optionExists() instead. + * Deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->optionExists() instead. */ protected function assertOptionByText($id, $text) { return $this->assertSession()->optionExists($id, $text); @@ -478,8 +476,8 @@ protected function assertOptionByText($id, $text) { * @param string $option * Option to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->optionNotExists() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->optionNotExists() instead. */ protected function assertNoOption($id, $option) { return $this->assertSession()->optionNotExists($id, $option); @@ -496,8 +494,8 @@ protected function assertNoOption($id, $option) { * (optional) A message to display with the assertion. Do not translate * messages with t(). If left blank, a default message will be displayed. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->optionExists() instead and check the + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->optionExists() instead and check the * "selected" attribute yourself. */ protected function assertOptionSelected($id, $option, $message = NULL) { @@ -512,8 +510,8 @@ protected function assertOptionSelected($id, $option, $message = NULL) { * @param string $id * ID of field to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->checkboxChecked() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->checkboxChecked() instead. */ protected function assertFieldChecked($id) { $this->assertSession()->checkboxChecked($id); @@ -525,8 +523,8 @@ protected function assertFieldChecked($id) { * @param string $id * ID of field to assert. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->checkboxNotChecked() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->checkboxNotChecked() instead. */ protected function assertNoFieldChecked($id) { $this->assertSession()->checkboxNotChecked($id); @@ -545,8 +543,8 @@ protected function assertNoFieldChecked($id) { * (optional) A message to display with the assertion. Do not translate * messages with t(). * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->xpath() instead and check the values directly in the test. + * Deprecated in drupal:8.3.0 and is removed from drupal:10.0.0. Use + * $this->xpath() instead and check the values directly in the test. */ protected function assertFieldByXPath($xpath, $value = NULL, $message = '') { $fields = $this->xpath($xpath); @@ -568,8 +566,8 @@ protected function assertFieldByXPath($xpath, $value = NULL, $message = '') { * * @throws \Behat\Mink\Exception\ExpectationException * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->xpath() instead and assert that the result is empty. + * Deprecated in drupal:8.3.0 and is removed from drupal:10.0.0. Use + * $this->xpath() instead and assert that the result is empty. */ protected function assertNoFieldByXPath($xpath, $value = NULL, $message = '') { $fields = $this->xpath($xpath); @@ -606,9 +604,9 @@ protected function assertNoFieldByXPath($xpath, $value = NULL, $message = '') { * (optional) A message to display with the assertion. Do not translate * messages with t(). * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Iterate over the fields yourself instead and directly check the values in - * the test. + * Deprecated in drupal:8.3.0 and is removed from drupal:10.0.0. Use + * iteration over the fields yourself instead and directly check the values + * in the test. */ protected function assertFieldsByValue($fields, $value = NULL, $message = '') { // If value specified then check array for match. @@ -655,8 +653,8 @@ protected function assertFieldsByValue($fields, $value = NULL, $message = '') { * @param string $raw * Raw (HTML) string to look for. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->assertEscaped() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->assertEscaped() instead. */ protected function assertEscaped($raw) { $this->assertSession()->assertEscaped($raw); @@ -670,8 +668,8 @@ protected function assertEscaped($raw) { * @param string $raw * Raw (HTML) string to look for. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->assertNoEscaped() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->assertNoEscaped() instead. */ protected function assertNoEscaped($raw) { $this->assertSession()->assertNoEscaped($raw); @@ -683,8 +681,8 @@ protected function assertNoEscaped($raw) { * @param string $pattern * Perl regex to look for including the regex delimiters. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseMatches() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseMatches() instead. */ protected function assertPattern($pattern) { $this->assertSession()->responseMatches($pattern); @@ -696,13 +694,13 @@ protected function assertPattern($pattern) { * @param string $pattern * Perl regex to look for including the regex delimiters. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseNotMatches() instead. + * Deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseNotMatches() instead. * * @see https://www.drupal.org/node/2864262 */ protected function assertNoPattern($pattern) { - @trigger_error('assertNoPattern() is deprecated and scheduled for removal in Drupal 9.0.0. Use $this->assertSession()->responseNotMatches($pattern) instead. See https://www.drupal.org/node/2864262.', E_USER_DEPRECATED); + @trigger_error('AssertLegacyTrait::assertNoPattern() is deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use $this->assertSession()->responseNotMatches() instead. See https://www.drupal.org/node/2864262', E_USER_DEPRECATED); $this->assertSession()->responseNotMatches($pattern); } @@ -712,8 +710,8 @@ protected function assertNoPattern($pattern) { * @param string $expected_cache_tag * The expected cache tag. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseHeaderContains() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseHeaderContains() instead. */ protected function assertCacheTag($expected_cache_tag) { $this->assertSession()->responseHeaderContains('X-Drupal-Cache-Tags', $expected_cache_tag); @@ -725,13 +723,13 @@ protected function assertCacheTag($expected_cache_tag) { * @param string $cache_tag * The cache tag to check. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseHeaderNotContains() instead. + * Deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseHeaderNotContains() instead. * * @see https://www.drupal.org/node/2864029 */ protected function assertNoCacheTag($cache_tag) { - @trigger_error('assertNoCacheTag() is deprecated and scheduled for removal in Drupal 9.0.0. Use $this->assertSession()->responseHeaderNotContains() instead. See https://www.drupal.org/node/2864029.', E_USER_DEPRECATED); + @trigger_error('AssertLegacyTrait::assertNoCacheTag() is deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use $this->assertSession()->responseHeaderNotContains() instead. See https://www.drupal.org/node/2864029', E_USER_DEPRECATED); $this->assertSession()->responseHeaderNotContains('X-Drupal-Cache-Tags', $cache_tag); } @@ -743,8 +741,8 @@ protected function assertNoCacheTag($cache_tag) { * @param string $value * Value of the header to assert * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->responseHeaderEquals() instead. + * Deprecated in drupal:8.3.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->responseHeaderEquals() instead. */ protected function assertHeader($name, $value) { $this->assertSession()->responseHeaderEquals($name, $value); @@ -781,8 +779,8 @@ abstract public function assertSession($name = NULL); * @return string * An XPath query with arguments replaced. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->assertSession()->buildXPathQuery() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->assertSession()->buildXPathQuery() instead. */ protected function buildXPathQuery($xpath, array $args = []) { return $this->assertSession()->buildXPathQuery($xpath, $args); @@ -799,8 +797,8 @@ protected function buildXPathQuery($xpath, array $args = []) { * @return string * XPath for specified values. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->getSession()->getPage()->findField() instead. + * Deprecated in drupal:8.5.0 and is removed from drupal:10.0.0. Use + * $this->getSession()->getPage()->findField() instead. */ protected function constructFieldXpath($attribute, $value) { $xpath = '//textarea[@' . $attribute . '=:value]|//input[@' . $attribute . '=:value]|//select[@' . $attribute . '=:value]'; @@ -810,11 +808,13 @@ protected function constructFieldXpath($attribute, $value) { /** * Gets the current raw content. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $this->getSession()->getPage()->getContent() instead. + * Deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use + * $this->getSession()->getPage()->getContent() instead. + * + * @see http://drupal.org/node/2735045 */ protected function getRawContent() { - @trigger_error('AssertLegacyTrait::getRawContent() is scheduled for removal in Drupal 9.0.0. Use $this->getSession()->getPage()->getContent() instead.', E_USER_DEPRECATED); + @trigger_error('AssertLegacyTrait::getRawContent() is deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use $this->getSession()->getPage()->getContent() instead. See http://drupal.org/node/2735045', E_USER_DEPRECATED); return $this->getSession()->getPage()->getContent(); } @@ -827,11 +827,13 @@ protected function getRawContent() { * @return \Behat\Mink\Element\NodeElement[] * Option elements in select. * - * Deprecated Scheduled for removal in Drupal 10.0.0. - * Use $element->findAll('xpath', 'option') instead. + * Deprecated in drupal:8.5.0 and is removed from drupal:10.0.0. Use + * $element->findAll('xpath', 'option') instead. + * + * @see http://drupal.org/node/2735045 */ protected function getAllOptions(NodeElement $element) { - @trigger_error('AssertLegacyTrait::getAllOptions() is scheduled for removal in Drupal 9.0.0. Use $element->findAll(\'xpath\', \'option\') instead.', E_USER_DEPRECATED); + @trigger_error('AssertLegacyTrait::getAllOptions() is deprecated in drupal:8.5.0 and is removed from drupal:10.0.0. Use $element->findAll(\'xpath\', \'option\') instead. See http://drupal.org/node/2735045', E_USER_DEPRECATED); return $element->findAll('xpath', '//option'); } diff --git a/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php b/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php index b8247ea88f33321f12fabe37eb34f9a9e8ea58e4..8bc8a5cb16702b0818f80e3ece17971fe12e80a8 100644 --- a/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php +++ b/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php @@ -242,9 +242,17 @@ public function testTextAsserts() { $sanitized = Html::escape($dangerous); $this->assertNoText($dangerous); $this->assertText($sanitized); + } - // Test getRawContent(). - $this->assertSame($this->getSession()->getPage()->getContent(), $this->getSession()->getPage()->getContent()); + /** + * Tests legacy getRawContent(). + * + * @group legacy + * @expectedDeprecation AssertLegacyTrait::getRawContent() is deprecated in drupal:8.2.0 and is removed from drupal:10.0.0. Use $this->getSession()->getPage()->getContent() instead. See http://drupal.org/node/2735045 + */ + public function testGetRawContent() { + $this->drupalGet('test-encoded'); + $this->assertSame($this->getSession()->getPage()->getContent(), $this->getRawContent()); } /** diff --git a/web/core/tests/Drupal/FunctionalTests/Core/Test/AssertLegacyTraitDeprecatedTest.php b/web/core/tests/Drupal/FunctionalTests/Core/Test/AssertLegacyTraitDeprecatedTest.php index a64ec8222940b93f2c448b97fb35c4ba33a8c07e..b07bc14ef8b0293644e528481f566312019f3531 100644 --- a/web/core/tests/Drupal/FunctionalTests/Core/Test/AssertLegacyTraitDeprecatedTest.php +++ b/web/core/tests/Drupal/FunctionalTests/Core/Test/AssertLegacyTraitDeprecatedTest.php @@ -22,7 +22,7 @@ class AssertLegacyTraitDeprecatedTest extends BrowserTestBase { /** * Tests getAllOptions(). * - * @expectedDeprecation AssertLegacyTrait::getAllOptions() is scheduled for removal in Drupal 9.0.0. Use $element->findAll('xpath', 'option') instead. + * @expectedDeprecation AssertLegacyTrait::getAllOptions() is deprecated in drupal:8.5.0 and is removed from drupal:10.0.0. Use $element->findAll('xpath', 'option') instead. See http://drupal.org/node/2735045 */ public function testGetAllOptions() { $this->drupalGet('/form-test/select'); diff --git a/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php b/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php index d7bad285130c9c08e9133aece796cd7d36138053..e3b969b9f7d33743c48d46af0f514434a5207c73 100644 --- a/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php +++ b/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php @@ -6,13 +6,12 @@ use Drupal\Core\Site\Settings; use Drupal\Core\Test\TestRunnerKernel; use Drupal\Tests\BrowserTestBase; -use Drupal\Tests\SchemaCheckTestTrait; use Drupal\Core\Database\Database; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Language\Language; use Drupal\Core\Url; -use Drupal\Tests\RequirementsPageTrait; +use Drupal\Tests\UpdatePathTestTrait; use Drupal\user\Entity\User; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\HttpFoundation\Request; @@ -43,9 +42,9 @@ * @see hook_update_N() */ abstract class UpdatePathTestBase extends BrowserTestBase { - - use SchemaCheckTestTrait; - use RequirementsPageTrait; + use UpdatePathTestTrait { + runUpdates as doRunUpdates; + } /** * Modules to enable after the database is loaded. @@ -125,22 +124,19 @@ abstract class UpdatePathTestBase extends BrowserTestBase { */ protected $strictConfigSchema = FALSE; - /** - * Fail the test if there are failed updates. - * - * @var bool - */ - protected $checkFailedUpdates = TRUE; - /** * Constructs an UpdatePathTestCase object. * * @param $test_id * (optional) The ID of the test. Tests with the same id are reported * together. + * @param array $data + * (optional) The test case data. Defaults to none. + * @param string $data_name + * The test data name. Defaults to none. */ - public function __construct($test_id = NULL) { - parent::__construct($test_id); + public function __construct($test_id = NULL, array $data = [], $data_name = '') { + parent::__construct($test_id, $data, $data_name); $this->zlibInstalled = function_exists('gzopen'); } @@ -298,117 +294,7 @@ protected function runUpdates() { $this->fail('Missing zlib requirement for update tests.'); return FALSE; } - // The site might be broken at the time so logging in using the UI might - // not work, so we use the API itself. - drupal_rewrite_settings([ - 'settings' => [ - 'update_free_access' => (object) [ - 'value' => TRUE, - 'required' => TRUE, - ], - ], - ]); - - $this->drupalGet($this->updateUrl); - $this->updateRequirementsProblem(); - $this->clickLink(t('Continue')); - - $this->doSelectionTest(); - // Run the update hooks. - $this->clickLink(t('Apply pending updates')); - $this->checkForMetaRefresh(); - - // Ensure there are no failed updates. - if ($this->checkFailedUpdates) { - $failure = $this->cssSelect('.failure'); - if ($failure) { - $this->fail('The update failed with the following message: "' . reset($failure)->getText() . '"'); - } - - // Ensure that there are no pending updates. - foreach (['update', 'post_update'] as $update_type) { - switch ($update_type) { - case 'update': - $all_updates = update_get_update_list(); - break; - case 'post_update': - $all_updates = \Drupal::service('update.post_update_registry')->getPendingUpdateInformation(); - break; - } - foreach ($all_updates as $module => $updates) { - if (!empty($updates['pending'])) { - foreach (array_keys($updates['pending']) as $update_name) { - $this->fail("The $update_name() update function from the $module module did not run."); - } - } - } - } - - // Ensure that the container is updated if any modules are installed or - // uninstalled during the update. - /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */ - $module_handler = $this->container->get('module_handler'); - $config_module_list = $this->config('core.extension')->get('module'); - $module_handler_list = $module_handler->getModuleList(); - $modules_installed = FALSE; - // Modules that are in configuration but not the module handler have been - // installed. - foreach (array_keys(array_diff_key($config_module_list, $module_handler_list)) as $module) { - $module_handler->addModule($module, drupal_get_path('module', $module)); - $modules_installed = TRUE; - } - $modules_uninstalled = FALSE; - $module_handler_list = $module_handler->getModuleList(); - // Modules that are in the module handler but not configuration have been - // uninstalled. - foreach (array_keys(array_diff_key($module_handler_list, $config_module_list)) as $module) { - $modules_uninstalled = TRUE; - unset($module_handler_list[$module]); - } - if ($modules_installed || $modules_uninstalled) { - // Note that resetAll() does not reset the kernel module list so we - // have to do that manually. - $this->kernel->updateModules($module_handler_list, $module_handler_list); - } - - // If we have successfully clicked 'Apply pending updates' then we need to - // clear the caches in the update test runner as this has occurred as part - // of the updates. - $this->resetAll(); - - // The config schema can be incorrect while the update functions are being - // executed. But once the update has been completed, it needs to be valid - // again. Assert the schema of all configuration objects now. - $names = $this->container->get('config.storage')->listAll(); - - // Allow tests to opt out of checking specific configuration. - $exclude = $this->getConfigSchemaExclusions(); - /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */ - $typed_config = $this->container->get('config.typed'); - foreach ($names as $name) { - if (in_array($name, $exclude, TRUE)) { - // Skip checking schema if the config is listed in the - // $configSchemaCheckerExclusions property. - continue; - } - $config = $this->config($name); - $this->assertConfigSchema($typed_config, $name, $config->get()); - } - - // Ensure that the update hooks updated all entity schema. - $needs_updates = \Drupal::entityDefinitionUpdateManager()->needsUpdates(); - if ($needs_updates) { - foreach (\Drupal::entityDefinitionUpdateManager()->getChangeSummary() as $entity_type_id => $summary) { - $entity_type_label = \Drupal::entityTypeManager()->getDefinition($entity_type_id)->getLabel(); - foreach ($summary as $message) { - $this->fail("$entity_type_label: $message"); - } - } - // The above calls to `fail()` should prevent this from ever being - // called, but it is here in case something goes really wrong. - $this->assertFalse($needs_updates, 'After all updates ran, entity schema is up to date.'); - } - } + $this->doRunUpdates($this->updateUrl); } /** @@ -449,13 +335,4 @@ protected function replaceUser1() { $account->save(); } - /** - * Tests the selection page. - */ - protected function doSelectionTest() { - // No-op. Tests wishing to do test the selection page or the general - // update.php environment before running update.php can override this method - // and implement their required tests. - } - } diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseLegacyTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseLegacyTest.php index 249b05700693a1ed2296b56ea6538113eebb6018..066772fbbc3ac41457f3c2280ac597e66f8ad096 100644 --- a/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseLegacyTest.php +++ b/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseLegacyTest.php @@ -137,7 +137,7 @@ public function testDbChangeField() { * Tests deprecation of the db_field_set_default() function. * * @expectedDeprecation db_field_set_default() is deprecated in drupal:8.0.0. It will be removed from drupal:9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call changeField() on it, passing a full field specification. For example, $injected_database->schema()->changeField($table, $field, $field_new, $spec, $keys_new). See https://www.drupal.org/node/2993033 - * @expectedDeprecation fieldSetDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 + * @expectedDeprecation fieldSetDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 * @doesNotPerformAssertions */ public function testDbFieldSetDefault() { @@ -148,7 +148,7 @@ public function testDbFieldSetDefault() { * Tests deprecation of the db_field_set_no_default() function. * * @expectedDeprecation db_field_set_no_default() is deprecated in drupal:8.0.0. It will be removed from drupal:9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call changeField() on it, passing a full field specification. For example, $injected_database->schema()->changeField($table, $field, $field_new, $spec, $keys_new). See https://www.drupal.org/node/2993033 - * @expectedDeprecation fieldSetNoDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 + * @expectedDeprecation fieldSetNoDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 * @doesNotPerformAssertions */ public function testDbFieldSetNoDefault() { @@ -158,8 +158,8 @@ public function testDbFieldSetNoDefault() { /** * Tests Schema::fieldSetDefault and Schema::fieldSetNoDefault. * - * @expectedDeprecation fieldSetDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 - * @expectedDeprecation fieldSetNoDefault() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 + * @expectedDeprecation fieldSetDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 + * @expectedDeprecation fieldSetNoDefault() is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. Instead, call ::changeField() passing a full field specification. See https://www.drupal.org/node/2999035 */ public function testSchemaFieldDefaultChange() { // Create a table. @@ -446,7 +446,7 @@ public function testDbTruncate() { /** * Tests deprecation of the $options 'target' key in Connection::query. * - * @expectedDeprecation Passing a 'target' key to \Drupal\Core\Database\Connection::query $options argument is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, use \Drupal\Core\Database\Database::getConnection($target)->query(). See https://www.drupal.org/node/2993033. + * @expectedDeprecation Passing a 'target' key to \Drupal\Core\Database\Connection::query $options argument is deprecated in drupal:8.0.x and will be removed before drupal:9.0.0. Instead, use \Drupal\Core\Database\Database::getConnection($target)->query(). See https://www.drupal.org/node/2993033 */ public function testDbOptionsTarget() { $this->assertNotNull($this->connection->query('SELECT * FROM {test}', [], ['target' => 'bar'])); @@ -455,7 +455,7 @@ public function testDbOptionsTarget() { /** * Tests deprecation of the $options 'target' key in Select. * - * @expectedDeprecation Passing a 'target' key to \Drupal\Core\Database\Connection::query $options argument is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, use \Drupal\Core\Database\Database::getConnection($target)->query(). See https://www.drupal.org/node/2993033. + * @expectedDeprecation Passing a 'target' key to \Drupal\Core\Database\Connection::query $options argument is deprecated in drupal:8.0.x and will be removed before drupal:9.0.0. Instead, use \Drupal\Core\Database\Database::getConnection($target)->query(). See https://www.drupal.org/node/2993033 */ public function testDbOptionsTargetInSelect() { $this->assertNotNull($this->connection->select('test', 't', ['target' => 'bar'])->fields('t')->execute()); @@ -486,7 +486,7 @@ public function testDbQueryRange() { /** * Tests deprecation of the db_add_index() function. * - * @expectedDeprecation db_add_index() is deprecated in Drupal 8.0.x and will be removed in Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call addIndex() on it. For example, $injected_database->schema()->addIndex($table, $name, $fields, $spec). See https://www.drupal.org/node/2993033 + * @expectedDeprecation db_add_index() is deprecated in drupal:8.0.x and will be removed in drupal:9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call addIndex() on it. For example, $injected_database->schema()->addIndex($table, $name, $fields, $spec). See https://www.drupal.org/node/2993033 */ public function testDbAddIndex() { $table_specification = [ diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php index 8407aee9d27e4e8c1e10a91be5421f6e791b0e46..3712ee875787c8801094d341179515bc634bffff 100644 --- a/web/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php +++ b/web/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php @@ -54,15 +54,17 @@ public function testVulnerableComment() { $records = $result->fetchAll(); $query = (string) $query; - $expected = "/* Testing query comments * / SELECT nid FROM {node}. -- */ SELECT test.name AS name, test.age AS age\nFROM\n{test} test"; + $expected = "/* Testing query comments * / SELECT nid FROM {node}. -- */"; - $this->assertEqual(count($records), 4, 'Returned the correct number of rows.'); - $this->assertNotIdentical(FALSE, strpos($query, $expected), 'The flattened query contains the sanitised comment string.'); + // Check the returned number of rows. + $this->assertCount(4, $records); + // Check that the flattened query contains the sanitised comment string. + $this->assertContains($expected, $query); $connection = Database::getConnection(); foreach ($this->makeCommentsProvider() as $test_set) { list($expected, $comments) = $test_set; - $this->assertEqual($expected, $connection->makeComment($comments)); + $this->assertEquals($expected, $connection->makeComment($comments)); } } diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php index 2a8faf90e3f5941de8dbae46604a6001c33a10b1..28766fd8298b573e3cf0a97185772280c6b03e5b 100644 --- a/web/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php +++ b/web/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php @@ -148,7 +148,7 @@ public function testFieldLoad() { $this->assertEqual($entity->{$this->fieldName}[$delta]->value, $value); } else { - $this->assertFalse(array_key_exists($delta, $entity->{$this->fieldName})); + $this->assertArrayNotHasKey($delta, $entity->{$this->fieldName}); } } } @@ -160,7 +160,7 @@ public function testFieldLoad() { $this->assertEqual($entity->{$this->fieldName}[$delta]->value, $value); } else { - $this->assertFalse(array_key_exists($delta, $entity->{$this->fieldName})); + $this->assertArrayNotHasKey($delta, $entity->{$this->fieldName}); } } @@ -171,7 +171,7 @@ public function testFieldLoad() { $connection->insert($this->table)->fields($columns)->values($values)->execute(); $connection->insert($this->revisionTable)->fields($columns)->values($values)->execute(); $entity = $storage->load($entity->id()); - $this->assertFalse(array_key_exists($unavailable_langcode, $entity->{$this->fieldName})); + $this->assertArrayNotHasKey($unavailable_langcode, $entity->{$this->fieldName}); } /** diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php index a525f650eb31e12eef46b3fbae2e4490f06d0b1e..6503b41d2363141ddde494530bebd02de6bd540f 100644 --- a/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php +++ b/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php @@ -94,6 +94,10 @@ protected function setUp() { $this->entityFieldManager = $this->container->get('entity_field.manager'); $this->database = $this->container->get('database'); + // Add a non-revisionable bundle field to test revision field table + // handling. + $this->addBundleField('string', FALSE, TRUE); + // The 'changed' field type has a special behavior because it updates itself // automatically if any of the other field values of an entity have been // updated, so add it to the entity type that is being tested in order to @@ -294,7 +298,9 @@ protected function insertData($revisionable, $translatable) { for ($i = $next_id; $i <= $next_id + 2; $i++) { $entity = $storage->create([ 'id' => $i, + 'type' => 'test_bundle', 'name' => 'test entity - ' . $i . ' - en', + 'new_bundle_field' => 'bundle field - ' . $i . ' - en', 'test_multiple_properties' => [ 'value1' => 'shared table - ' . $i . ' - value 1 - en', 'value2' => 'shared table - ' . $i . ' - value 2 - en', @@ -315,6 +321,7 @@ protected function insertData($revisionable, $translatable) { if ($translatable) { $translation = $entity->addTranslation('ro', [ 'name' => 'test entity - ' . $i . ' - ro', + 'new_bundle_field' => 'bundle field - ' . $i . ' - ro', 'test_multiple_properties' => [ 'value1' => 'shared table - ' . $i . ' - value 1 - ro', 'value2' => 'shared table - ' . $i . ' - value 2 - ro', @@ -338,6 +345,7 @@ protected function insertData($revisionable, $translatable) { // Create a new pending revision. $revision_2 = $storage->createRevision($entity, FALSE); $revision_2->name = 'test entity - ' . $i . ' - en - rev2'; + $revision_2->new_bundle_field = 'bundle field - ' . $i . ' - en - rev2'; $revision_2->test_multiple_properties->value1 = 'shared table - ' . $i . ' - value 1 - en - rev2'; $revision_2->test_multiple_properties->value2 = 'shared table - ' . $i . ' - value 2 - en - rev2'; $revision_2->test_multiple_properties_multiple_values[0]->value1 = 'dedicated table - ' . $i . ' - delta 0 - value 1 - en - rev2'; @@ -349,6 +357,7 @@ protected function insertData($revisionable, $translatable) { if ($translatable) { $revision_2_translation = $storage->createRevision($entity->getTranslation('ro'), FALSE); $revision_2_translation->name = 'test entity - ' . $i . ' - ro - rev2'; + $revision_2->new_bundle_field = 'bundle field - ' . $i . ' - ro - rev2'; $revision_2->test_multiple_properties->value1 = 'shared table - ' . $i . ' - value 1 - ro - rev2'; $revision_2->test_multiple_properties->value2 = 'shared table - ' . $i . ' - value 2 - ro - rev2'; $revision_2_translation->test_multiple_properties_multiple_values[0]->value1 = 'dedicated table - ' . $i . ' - delta 0 - value 1 - ro - rev2'; @@ -375,6 +384,7 @@ protected function assertEntityData($revisionable, $translatable) { foreach ($entities as $entity_id => $entity) { /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ $this->assertEquals("test entity - {$entity->id()} - en", $entity->label()); + $this->assertEquals("bundle field - {$entity->id()} - en", $entity->new_bundle_field->value); $this->assertEquals("shared table - {$entity->id()} - value 1 - en", $entity->test_multiple_properties->value1); $this->assertEquals("shared table - {$entity->id()} - value 2 - en", $entity->test_multiple_properties->value2); $this->assertEquals("dedicated table - {$entity->id()} - delta 0 - value 1 - en", $entity->test_multiple_properties_multiple_values[0]->value1); @@ -385,6 +395,7 @@ protected function assertEntityData($revisionable, $translatable) { if ($translatable) { $translation = $entity->getTranslation('ro'); $this->assertEquals("test entity - {$translation->id()} - ro", $translation->label()); + $this->assertEquals("bundle field - {$entity->id()} - ro", $translation->new_bundle_field->value); $this->assertEquals("shared table - {$translation->id()} - value 1 - ro", $translation->test_multiple_properties->value1); $this->assertEquals("shared table - {$translation->id()} - value 2 - ro", $translation->test_multiple_properties->value2); $this->assertEquals("dedicated table - {$translation->id()} - delta 0 - value 1 - ro", $translation->test_multiple_properties_multiple_values[0]->value1); @@ -403,6 +414,7 @@ protected function assertEntityData($revisionable, $translatable) { /** @var \Drupal\Core\Entity\ContentEntityInterface $revision */ $revision_label = $revision->isDefaultRevision() ? NULL : ' - rev2'; $this->assertEquals("test entity - {$revision->id()} - en{$revision_label}", $revision->label()); + $this->assertEquals("bundle field - {$revision->id()} - en{$revision_label}", $revision->new_bundle_field->value); $this->assertEquals("shared table - {$revision->id()} - value 1 - en{$revision_label}", $revision->test_multiple_properties->value1); $this->assertEquals("shared table - {$revision->id()} - value 2 - en{$revision_label}", $revision->test_multiple_properties->value2); $this->assertEquals("dedicated table - {$revision->id()} - delta 0 - value 1 - en{$revision_label}", $revision->test_multiple_properties_multiple_values[0]->value1); @@ -413,6 +425,7 @@ protected function assertEntityData($revisionable, $translatable) { if ($translatable) { $translation = $revision->getTranslation('ro'); $this->assertEquals("test entity - {$translation->id()} - ro{$revision_label}", $translation->label()); + $this->assertEquals("bundle field - {$entity->id()} - ro{$revision_label}", $translation->new_bundle_field->value); $this->assertEquals("shared table - {$revision->id()} - value 1 - ro{$revision_label}", $translation->test_multiple_properties->value1); $this->assertEquals("shared table - {$revision->id()} - value 2 - ro{$revision_label}", $translation->test_multiple_properties->value2); $this->assertEquals("dedicated table - {$translation->id()} - delta 0 - value 1 - ro{$revision_label}", $translation->test_multiple_properties_multiple_values[0]->value1); @@ -457,6 +470,8 @@ protected function assertEntityTypeSchema($revisionable, $translatable, $new_bas else { $this->assertNonRevisionableAndNonTranslatable(); } + + $this->assertBundleFieldSchema($revisionable); } /** @@ -589,6 +604,26 @@ protected function assertNonRevisionableAndNonTranslatable() { $this->assertFalse($database_schema->tableExists($entity_type->getRevisionDataTable())); } + /** + * Asserts that the bundle field schema is correct. + * + * @param bool $revisionable + * Whether the entity type is revisionable or not. + */ + protected function assertBundleFieldSchema($revisionable) { + $entity_type_id = 'entity_test_update'; + $field_storage_definition = $this->entityFieldManager->getFieldStorageDefinitions($entity_type_id)['new_bundle_field']; + $database_schema = $this->database->schema(); + /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */ + $table_mapping = $this->entityTypeManager + ->getStorage($entity_type_id) + ->getTableMapping(); + $this->assertTrue($database_schema->tableExists($table_mapping->getDedicatedDataTableName($field_storage_definition))); + if ($revisionable) { + $this->assertTrue($database_schema->tableExists($table_mapping->getDedicatedRevisionTableName($field_storage_definition))); + } + } + /** * Asserts that the backup tables have been kept after a successful update. */ @@ -617,7 +652,7 @@ public function testFieldableEntityTypeUpdatesErrorHandling() { $this->insertData(FALSE, TRUE); $tables = $schema->findTables('old_%'); - $this->assertCount(3, $tables); + $this->assertCount(4, $tables); foreach ($tables as $table) { $schema->dropTable($table); } @@ -783,7 +818,7 @@ public function testFieldableEntityTypeUpdatesRemoveBackupTables() { // Check that backup tables are kept by default. $tables = $schema->findTables('old_%'); - $this->assertCount(3, $tables); + $this->assertCount(4, $tables); foreach ($tables as $table) { $schema->dropTable($table); } diff --git a/web/core/tests/Drupal/KernelTests/KernelTestBase.php b/web/core/tests/Drupal/KernelTests/KernelTestBase.php index 957ed79582701244acdd378487d0e013d59692b4..2f74b474e37f1b0d8095aa07efc2bce05ef7696e 100644 --- a/web/core/tests/Drupal/KernelTests/KernelTestBase.php +++ b/web/core/tests/Drupal/KernelTests/KernelTestBase.php @@ -274,6 +274,9 @@ protected function bootEnvironment() { $settings = [ 'hash_salt' => get_class($this), 'file_public_path' => $this->siteDirectory . '/files', + // Skip the "path_alias" schema check for kernel tests, since they do not + // rely on the full schema being installed. + 'system.path_alias_schema_check' => FALSE, // Disable Twig template caching/dumping. 'twig_cache' => FALSE, // @see \Drupal\KernelTests\KernelTestBase::register() @@ -610,9 +613,9 @@ protected function tearDown() { // Remove all prefixed tables. $original_connection_info = Database::getConnectionInfo('simpletest_original_default'); - $original_prefix = $original_connection_info['default']['prefix']['default']; + $original_prefix = $original_connection_info['default']['prefix']['default'] ?? NULL; $test_connection_info = Database::getConnectionInfo('default'); - $test_prefix = $test_connection_info['default']['prefix']['default']; + $test_prefix = $test_connection_info['default']['prefix']['default'] ?? NULL; if ($original_prefix != $test_prefix) { $tables = Database::getConnection()->schema()->findTables('%'); foreach ($tables as $table) { diff --git a/web/core/tests/Drupal/Tests/BrowserTestBase.php b/web/core/tests/Drupal/Tests/BrowserTestBase.php index 96657a93e7932d59ec5bb79a0738365cccee35a4..d768bfcc3f20195ea0ceb2f1be54f0ca2969ab8a 100644 --- a/web/core/tests/Drupal/Tests/BrowserTestBase.php +++ b/web/core/tests/Drupal/Tests/BrowserTestBase.php @@ -350,11 +350,15 @@ protected function getResponseLogHandler() { $html_output = 'Called from ' . $caller['function'] . ' line ' . $caller['line']; $html_output .= '<hr />' . $request->getMethod() . ' request to: ' . $request->getUri(); + // Get the response body as a string. Any errors are silenced as + // tests should not fail if there is a problem. On PHP 7.4 + // \Drupal\Tests\migrate\Functional\process\DownloadFunctionalTest + // fails without the usage of a silence operator. + $body = @(string) $response->getBody(); // On redirect responses (status code starting with '3') we need // to remove the meta tag that would do a browser refresh. We // don't want to redirect developers away when they look at the // debug output file in their browser. - $body = $response->getBody(); $status_code = (string) $response->getStatusCode(); if ($status_code[0] === '3') { $body = preg_replace('#<meta http-equiv="refresh" content=.+/>#', '', $body, 1); diff --git a/web/core/tests/Drupal/Tests/Component/Annotation/Doctrine/DocParserTest.php b/web/core/tests/Drupal/Tests/Component/Annotation/Doctrine/DocParserTest.php index 3d3544b7505978d9da9c78630d55d6122ab74a79..1e2eec14f9cd479d3b3bee4539e402c1883adf9c 100644 --- a/web/core/tests/Drupal/Tests/Component/Annotation/Doctrine/DocParserTest.php +++ b/web/core/tests/Drupal/Tests/Component/Annotation/Doctrine/DocParserTest.php @@ -707,12 +707,11 @@ public function testAnnotationWithRequiredAttributesWithoutContructor() } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Attribute "value" of @Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnum declared on property SomeClassName::invalidProperty. accept only [ONE, TWO, THREE], but got FOUR. - */ public function testAnnotationEnumeratorException() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('Attribute "value" of @Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnum declared on property SomeClassName::invalidProperty. accept only [ONE, TWO, THREE], but got FOUR.'); + $parser = $this->createTestParser(); $context = 'property SomeClassName::invalidProperty.'; $docblock = '@Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnum("FOUR")'; @@ -722,12 +721,11 @@ public function testAnnotationEnumeratorException() $parser->parse($docblock, $context); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Attribute "value" of @Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnumLiteral declared on property SomeClassName::invalidProperty. accept only [AnnotationEnumLiteral::ONE, AnnotationEnumLiteral::TWO, AnnotationEnumLiteral::THREE], but got 4. - */ public function testAnnotationEnumeratorLiteralException() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('Attribute "value" of @Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnumLiteral declared on property SomeClassName::invalidProperty. accept only [AnnotationEnumLiteral::ONE, AnnotationEnumLiteral::TWO, AnnotationEnumLiteral::THREE], but got 4.'); + $parser = $this->createTestParser(); $context = 'property SomeClassName::invalidProperty.'; $docblock = '@Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnumLiteral(4)'; @@ -737,12 +735,11 @@ public function testAnnotationEnumeratorLiteralException() $parser->parse($docblock, $context); } - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage @Enum supports only scalar values "array" given. - */ public function testAnnotationEnumInvalidTypeDeclarationException() { + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage('@Enum supports only scalar values "array" given.'); + $parser = $this->createTestParser(); $docblock = '@Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnumInvalid("foo")'; @@ -750,12 +747,11 @@ public function testAnnotationEnumInvalidTypeDeclarationException() $parser->parse($docblock); } - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Undefined enumerator value "3" for literal "AnnotationEnumLiteral::THREE". - */ public function testAnnotationEnumInvalidLiteralDeclarationException() { + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage('Undefined enumerator value "3" for literal "AnnotationEnumLiteral::THREE".'); + $parser = $this->createTestParser(); $docblock = '@Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationEnumLiteralInvalid("foo")'; @@ -875,12 +871,11 @@ public function testSupportClassConstants($docblock, $expected) $this->assertEquals($expected, $annotation->value); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The annotation @SomeAnnotationClassNameWithoutConstructorAndProperties declared on does not accept any values, but got {"value":"Foo"}. - */ public function testWithoutConstructorWhenIsNotDefaultValue() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('The annotation @SomeAnnotationClassNameWithoutConstructorAndProperties declared on does not accept any values, but got {"value":"Foo"}.'); + $parser = $this->createTestParser(); $docblock = <<<DOCBLOCK /** @@ -893,12 +888,11 @@ public function testWithoutConstructorWhenIsNotDefaultValue() $parser->parse($docblock); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The annotation @SomeAnnotationClassNameWithoutConstructorAndProperties declared on does not accept any values, but got {"value":"Foo"}. - */ public function testWithoutConstructorWhenHasNoProperties() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('The annotation @SomeAnnotationClassNameWithoutConstructorAndProperties declared on does not accept any values, but got {"value":"Foo"}.'); + $parser = $this->createTestParser(); $docblock = <<<DOCBLOCK /** @@ -910,12 +904,11 @@ public function testWithoutConstructorWhenHasNoProperties() $parser->parse($docblock); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 24 in class @Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationWithTargetSyntaxError. - */ public function testAnnotationTargetSyntaxError() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('Expected namespace separator or identifier, got \')\' at position 24 in class @Drupal\Tests\Component\Annotation\Doctrine\Fixtures\AnnotationWithTargetSyntaxError.'); + $parser = $this->createTestParser(); $context = 'class ' . 'SomeClassName'; $docblock = <<<DOCBLOCK @@ -928,12 +921,11 @@ public function testAnnotationTargetSyntaxError() $parser->parse($docblock,$context); } - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Invalid Target "Foo". Available targets: [ALL, CLASS, METHOD, PROPERTY, ANNOTATION] - */ public function testAnnotationWithInvalidTargetDeclarationError() { + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage('Invalid Target "Foo". Available targets: [ALL, CLASS, METHOD, PROPERTY, ANNOTATION]'); + $parser = $this->createTestParser(); $context = 'class ' . 'SomeClassName'; $docblock = <<<DOCBLOCK @@ -946,12 +938,11 @@ public function testAnnotationWithInvalidTargetDeclarationError() $parser->parse($docblock,$context); } - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage @Target expects either a string value, or an array of strings, "NULL" given. - */ public function testAnnotationWithTargetEmptyError() { + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage('@Target expects either a string value, or an array of strings, "NULL" given.'); + $parser = $this->createTestParser(); $context = 'class ' . 'SomeClassName'; $docblock = <<<DOCBLOCK @@ -1022,12 +1013,11 @@ public function testNotAnAnnotationClassIsIgnoredWithoutWarning() $this->assertEquals(0, count($result)); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected PlainValue, got ''' at position 10. - */ public function testAnnotationDontAcceptSingleQuotes() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('Expected PlainValue, got \'\'\' at position 10.'); + $parser = $this->createTestParser(); $parser->parse("@Name(foo='bar')"); } @@ -1045,10 +1035,11 @@ public function testAnnotationDoesntThrowExceptionWhenAtSignIsNotFollowedByIdent /** * @group DCOM-41 - * @expectedException \Doctrine\Common\Annotations\AnnotationException */ public function testAnnotationThrowsExceptionWhenAtSignIsNotFollowedByIdentifierInNestedAnnotation() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $parser = new DocParser(); $parser->parse("@Drupal\Tests\Component\Annotation\Doctrine\Name(@')"); } @@ -1087,11 +1078,12 @@ public function createTestParser() /** * @group DDC-78 - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected PlainValue, got ''' at position 10 in class \Drupal\Tests\Component\Annotation\Doctrine\Name */ public function testSyntaxErrorWithContextDescription() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('Expected PlainValue, got \'\'\' at position 10 in class \Drupal\Tests\Component\Annotation\Doctrine\Name'); + $parser = $this->createTestParser(); $parser->parse("@Name(foo='bar')", "class \Drupal\Tests\Component\Annotation\Doctrine\Name"); } @@ -1220,12 +1212,11 @@ public function testReservedKeywordsInAnnotations() $this->assertTrue($result[0] instanceof Null); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Creation Error] The annotation @SomeAnnotationClassNameWithoutConstructor declared on some class does not have a property named "invalidaProperty". Available properties: data, name - */ public function testSetValuesExeption() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('[Creation Error] The annotation @SomeAnnotationClassNameWithoutConstructor declared on some class does not have a property named "invalidaProperty". Available properties: data, name'); + $docblock = <<<DOCBLOCK /** * @SomeAnnotationClassNameWithoutConstructor(invalidaProperty = "Some val") @@ -1235,12 +1226,11 @@ public function testSetValuesExeption() $this->createTestParser()->parse($docblock, 'some class'); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Syntax Error] Expected Doctrine\Common\Annotations\DocLexer::T_IDENTIFIER or Doctrine\Common\Annotations\DocLexer::T_TRUE or Doctrine\Common\Annotations\DocLexer::T_FALSE or Doctrine\Common\Annotations\DocLexer::T_NULL, got '3.42' at position 5. - */ public function testInvalidIdentifierInAnnotation() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('[Syntax Error] Expected Doctrine\Common\Annotations\DocLexer::T_IDENTIFIER or Doctrine\Common\Annotations\DocLexer::T_TRUE or Doctrine\Common\Annotations\DocLexer::T_FALSE or Doctrine\Common\Annotations\DocLexer::T_NULL, got \'3.42\' at position 5.'); + $parser = $this->createTestParser(); $parser->parse('@Foo\3.42'); } @@ -1275,12 +1265,11 @@ public function testArrayWithColon() $this->assertEquals(array('foo' => 'bar'), $annots[0]->value); } - /** - * @expectedException \Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Semantical Error] Couldn't find constant foo. - */ public function testInvalidContantName() { + $this->expectException('\Doctrine\Common\Annotations\AnnotationException'); + $this->expectExceptionMessage('[Semantical Error] Couldn\'t find constant foo.'); + $parser = $this->createTestParser(); $parser->parse('@Name(foo: "bar")'); } diff --git a/web/core/tests/Drupal/Tests/Component/Datetime/TimeTest.php b/web/core/tests/Drupal/Tests/Component/Datetime/TimeTest.php index e3723135c64da146abbfa30dea3ff5302aaa47e6..ddc9d585278b0202842a427b450f0b65076b1a9e 100644 --- a/web/core/tests/Drupal/Tests/Component/Datetime/TimeTest.php +++ b/web/core/tests/Drupal/Tests/Component/Datetime/TimeTest.php @@ -79,6 +79,28 @@ public function testGetRequestMicroTime() { $this->assertEquals($expected, $this->time->getRequestMicroTime()); } + /** + * @covers ::getRequestTime + */ + public function testGetRequestTimeNoRequest() { + $expected = 12345678; + unset($_SERVER['REQUEST_TIME']); + $this->assertEquals($expected, $this->time->getRequestTime()); + $_SERVER['REQUEST_TIME'] = 23456789; + $this->assertEquals(23456789, $this->time->getRequestTime()); + } + + /** + * @covers ::getRequestMicroTime + */ + public function testGetRequestMicroTimeNoRequest() { + $expected = 1234567.89; + unset($_SERVER['REQUEST_TIME_FLOAT']); + $this->assertEquals($expected, $this->time->getRequestMicroTime()); + $_SERVER['REQUEST_TIME_FLOAT'] = 2345678.90; + $this->assertEquals(2345678.90, $this->time->getRequestMicroTime()); + } + /** * Tests the getCurrentTime method. * diff --git a/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php b/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php index c2ecf092630bf16d6fc39bd0961e2939f687718d..d311cdd436758d1c8ce2f604463e2bb0e5fae3e9 100644 --- a/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php +++ b/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php @@ -15,6 +15,7 @@ use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Config\Config; use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\Entity\EntityInterface; use Drupal\Tests\UnitTestCase; /** @@ -969,6 +970,21 @@ public function providerTestAllowedIfHasPermissions() { return $data; } + /** + * @expectedDeprecation Drupal\Core\Access\AccessResult::cacheUntilEntityChanges is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Access\AccessResult::addCacheableDependency() instead. + * @group legacy + */ + public function testCacheUntilEntityChanges() { + $entity = $this->prophesize(EntityInterface::class); + $entity->getCacheContexts()->willReturn(['context']); + $entity->getCacheTags()->willReturn(['tag']); + $entity->getCacheMaxAge()->willReturn(10); + $access_result = AccessResult::neutral()->cacheUntilEntityChanges($entity->reveal()); + $this->assertSame(['context'], $access_result->getCacheContexts()); + $this->assertSame(['tag'], $access_result->getCacheTags()); + $this->assertSame(10, $access_result->getCacheMaxAge()); + } + /** * @expectedDeprecation Drupal\Core\Access\AccessResult::cacheUntilConfigurationChanges is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Access\AccessResult::addCacheableDependency() instead. * @group legacy diff --git a/web/core/tests/Drupal/Tests/Core/Assert/AssertLegacyTraitTest.php b/web/core/tests/Drupal/Tests/Core/Assert/AssertLegacyTraitTest.php index b8656528099482b117786a106e36974012884c96..9d9b75e2b463107f1e9be07619c5ac61391a2e85 100644 --- a/web/core/tests/Drupal/Tests/Core/Assert/AssertLegacyTraitTest.php +++ b/web/core/tests/Drupal/Tests/Core/Assert/AssertLegacyTraitTest.php @@ -156,7 +156,7 @@ public function testAssertOptionSelectedFail() { /** * @covers ::assertNoPattern - * @expectedDeprecation assertNoPattern() is deprecated and scheduled for removal in Drupal 9.0.0. Use $this->assertSession()->responseNotMatches($pattern) instead. See https://www.drupal.org/node/2864262. + * @expectedDeprecation AssertLegacyTrait::assertNoPattern() is deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use $this->assertSession()->responseNotMatches() instead. See https://www.drupal.org/node/2864262 */ public function testAssertNoPattern() { $this->webAssert @@ -168,7 +168,7 @@ public function testAssertNoPattern() { /** * @covers ::assertNoCacheTag - * @expectedDeprecation assertNoCacheTag() is deprecated and scheduled for removal in Drupal 9.0.0. Use $this->assertSession()->responseHeaderNotContains() instead. See https://www.drupal.org/node/2864029. + * @expectedDeprecation AssertLegacyTrait::assertNoCacheTag() is deprecated in drupal:8.4.0 and is removed from drupal:10.0.0. Use $this->assertSession()->responseHeaderNotContains() instead. See https://www.drupal.org/node/2864029 */ public function testAssertNoCacheTag() { $this->webAssert diff --git a/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php b/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php index af307117179ba450594e64c40f226b5f92c2d891..d3f973dc3952b804765ec3e2c0460c8ac40a1efb 100644 --- a/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php +++ b/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php @@ -290,7 +290,7 @@ public function testRenderInvalidType() { 'browsers' => [], 'data' => 'http://example.com/popular.js', ]; - $this->renderer->render($css_group); + $this->renderer->render([$css_group]); } } diff --git a/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php b/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php index 4093b6a2eba811d762725f35f0f337ab934395c6..26ffcd4b84382479e8c36f73e6e1a1e9003e794b 100644 --- a/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php +++ b/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php @@ -34,7 +34,11 @@ class: \Drupal\Core\ExampleClass YAML; vfsStream::setup('drupal', NULL, [ - 'modules/example/example.yml' => $yml, + 'modules' => [ + 'example' => [ + 'example.yml' => $yml, + ], + ], ]); $builder = new ContainerBuilder(); diff --git a/web/core/tests/Drupal/Tests/Core/Field/AllowedTagsXssTraitDeprecateTest.php b/web/core/tests/Drupal/Tests/Core/Field/AllowedTagsXssTraitDeprecateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d018e154c1091a2a417c86102d64a457766f5420 --- /dev/null +++ b/web/core/tests/Drupal/Tests/Core/Field/AllowedTagsXssTraitDeprecateTest.php @@ -0,0 +1,37 @@ +<?php + +namespace Drupal\Tests\Core\Field; + +use Drupal\Core\Field\AllowedTagsXssTrait; +use Drupal\Core\Field\FieldFilteredMarkup; +use Drupal\Tests\UnitTestCase; + +/** + * Tests AllowedTagsXssTrait. + * + * @group field + * @group legacy + */ +class AllowedTagsXssTraitDeprecateTest extends UnitTestCase { + + /** + * @expectedDeprecation Drupal\Core\Field\AllowedTagsXssTrait::fieldFilterXss is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Field\FieldFilteredMarkup::create() instead. + * @expectedDeprecation Drupal\Core\Field\AllowedTagsXssTrait::allowedTags is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Field\FieldFilteredMarkup::allowedTags() instead. + * @expectedDeprecation Drupal\Core\Field\AllowedTagsXssTrait::displayAllowedTags is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Field\FieldFilteredMarkup::displayAllowedTags() instead. + */ + public function testDeprecation() { + $deprecated = new FieldDeprecateAllowedTagsXssTraitClass(); + $this->assertSame('Test string', (string) $deprecated->fieldFilterXss('<object>Test string</object>')); + $this->assertSame(FieldFilteredMarkup::allowedTags(), $deprecated->allowedTags()); + $this->assertSame(FieldFilteredMarkup::displayAllowedTags(), $deprecated->displayAllowedTags()); + } + +} + +/** + * Class FieldDeprecateAllowedTagsXssTraitClass + */ +class FieldDeprecateAllowedTagsXssTraitClass { + use AllowedTagsXssTrait; + +} diff --git a/web/core/tests/Drupal/Tests/Core/Template/AttributeHelperTest.php b/web/core/tests/Drupal/Tests/Core/Template/AttributeHelperTest.php new file mode 100644 index 0000000000000000000000000000000000000000..7e15793d25ca77c632bdfa7d816063c019b3eaa9 --- /dev/null +++ b/web/core/tests/Drupal/Tests/Core/Template/AttributeHelperTest.php @@ -0,0 +1,82 @@ +<?php + +namespace Drupal\Tests\Core\Template; + +use Drupal\Core\Template\Attribute; +use Drupal\Core\Template\AttributeHelper; +use Drupal\Tests\UnitTestCase; + +/** + * @coversDefaultClass \Drupal\Core\Template\AttributeHelper + * @group Template + */ +class AttributeHelperTest extends UnitTestCase { + + /** + * Provides tests data for testAttributeExists + * + * @return array + * An array of test data each containing an array of attributes, the name + * of the attribute to check existence of, and the expected result. + */ + public function providerTestAttributeExists() { + return [ + [['class' => ['example-class']], 'class', TRUE], + [[], 'class', FALSE], + [['class' => ['example-class']], 'id', FALSE], + [['class' => ['example-class'], 'id' => 'foo'], 'id', TRUE], + [['id' => 'foo'], 'class', FALSE], + ]; + } + + /** + * @covers ::attributeExists + * @dataProvider providerTestAttributeExists + */ + public function testAttributeExists(array $test_data, $test_attribute, $expected) { + $this->assertSame($expected, AttributeHelper::attributeExists($test_attribute, $test_data)); + $attributes = new Attribute($test_data); + $this->assertSame($expected, AttributeHelper::attributeExists($test_attribute, $attributes)); + } + + /** + * Provides tests data for testMergeCollections + * + * @return array + * An array of test data each containing an initial attribute collection, an + * Attribute object or array to be merged, and the expected result. + */ + public function providerTestMergeCollections() { + return [ + [[], ['class' => ['class1']], ['class' => ['class1']]], + [[], new Attribute(['class' => ['class1']]), ['class' => ['class1']]], + [['class' => ['example-class']], ['class' => ['class1']], ['class' => ['example-class', 'class1']]], + [['class' => ['example-class']], new Attribute(['class' => ['class1']]), ['class' => ['example-class', 'class1']]], + [['class' => ['example-class']], ['id' => 'foo', 'href' => 'bar'], ['class' => ['example-class'], 'id' => 'foo', 'href' => 'bar']], + [['class' => ['example-class']], new Attribute(['id' => 'foo', 'href' => 'bar']), ['class' => ['example-class'], 'id' => 'foo', 'href' => 'bar']], + ]; + } + + /** + * @covers ::mergeCollections + * @dataProvider providerTestMergeCollections + */ + public function testMergeCollections($original, $merge, $expected) { + $this->assertEquals($expected, AttributeHelper::mergeCollections($original, $merge)); + $this->assertEquals(new Attribute($expected), AttributeHelper::mergeCollections(new Attribute($original), $merge)); + } + + /** + * @covers ::mergeCollections + */ + public function testMergeCollectionsArgumentException() { + $attributes = new Attribute(['class' => ['example-class']]); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid collection argument'); + AttributeHelper::mergeCollections($attributes, 'not an array'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid collection argument'); + AttributeHelper::mergeCollections('not an array', $attributes); + } + +} diff --git a/web/core/tests/Drupal/Tests/Core/Template/AttributeTest.php b/web/core/tests/Drupal/Tests/Core/Template/AttributeTest.php index 911b6e150d0a6b9366b763569740cacaf278cc7a..46545a0ecc285cf38b48b29f0b44970accd15360 100644 --- a/web/core/tests/Drupal/Tests/Core/Template/AttributeTest.php +++ b/web/core/tests/Drupal/Tests/Core/Template/AttributeTest.php @@ -452,4 +452,62 @@ public function testStorage() { $this->assertEquals(['class' => new AttributeArray('class', ['example-class'])], $attribute->storage()); } + /** + * Provides tests data for testHasAttribute + * + * @return array + * An array of test data each containing an array of attributes, the name + * of the attribute to check existence of, and the expected result. + */ + public function providerTestHasAttribute() { + return [ + [['class' => ['example-class']], 'class', TRUE], + [[], 'class', FALSE], + [['class' => ['example-class']], 'id', FALSE], + [['class' => ['example-class'], 'id' => 'foo'], 'id', TRUE], + [['id' => 'foo'], 'class', FALSE], + ]; + } + + /** + * @covers ::hasAttribute + * @dataProvider providerTestHasAttribute + */ + public function testHasAttribute(array $test_data, $test_attribute, $expected) { + $attributes = new Attribute($test_data); + $this->assertSame($expected, $attributes->hasAttribute($test_attribute)); + } + + /** + * Provides tests data for testMerge + * + * @return array + * An array of test data each containing an initial Attribute object, an + * Attribute object or array to be merged, and the expected result. + */ + public function providerTestMerge() { + return [ + [new Attribute([]), new Attribute(['class' => ['class1']]), new Attribute(['class' => ['class1']])], + [new Attribute(['class' => ['example-class']]), new Attribute(['class' => ['class1']]), new Attribute(['class' => ['example-class', 'class1']])], + [new Attribute(['class' => ['example-class']]), new Attribute(['id' => 'foo', 'href' => 'bar']), new Attribute(['class' => ['example-class'], 'id' => 'foo', 'href' => 'bar'])], + ]; + } + + /** + * @covers ::merge + * @dataProvider providerTestMerge + */ + public function testMerge($original, $merge, $expected) { + $this->assertEquals($expected, $original->merge($merge)); + } + + /** + * @covers ::merge + */ + public function testMergeArgumentException() { + $attributes = new Attribute(['class' => ['example-class']]); + $this->expectException(\TypeError::class); + $attributes->merge('not an array'); + } + } diff --git a/web/core/tests/Drupal/Tests/UpdatePathTestTrait.php b/web/core/tests/Drupal/Tests/UpdatePathTestTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..61facab0bd2659dfe472e0dd907c448fcefe3994 --- /dev/null +++ b/web/core/tests/Drupal/Tests/UpdatePathTestTrait.php @@ -0,0 +1,169 @@ +<?php + +namespace Drupal\Tests; + +use Drupal\Core\Url; + +/** + * Trait UpdatePathTestTrait + * + * For use on \Drupal\Tests\BrowserTestBase tests. + */ +trait UpdatePathTestTrait { + use RequirementsPageTrait; + use SchemaCheckTestTrait; + + /** + * Fail the test if there are failed updates. + * + * @var bool + */ + protected $checkFailedUpdates = TRUE; + + /** + * Helper function to run pending database updates. + * + * @param string|null $update_url + * The update URL. + */ + protected function runUpdates($update_url = NULL) { + if (!$update_url) { + $update_url = Url::fromRoute('system.db_update'); + } + require_once $this->root . '/core/includes/update.inc'; + // The site might be broken at the time so logging in using the UI might + // not work, so we use the API itself. + $this->writeSettings([ + 'settings' => [ + 'update_free_access' => (object) [ + 'value' => TRUE, + 'required' => TRUE, + ], + ], + ]); + + $this->drupalGet($update_url); + $this->updateRequirementsProblem(); + $this->clickLink(t('Continue')); + + $this->doSelectionTest(); + // Run the update hooks. + $this->clickLink(t('Apply pending updates')); + $this->checkForMetaRefresh(); + + // Ensure there are no failed updates. + if ($this->checkFailedUpdates) { + $failure = $this->cssSelect('.failure'); + if ($failure) { + $this->fail('The update failed with the following message: "' . reset($failure)->getText() . '"'); + } + + // Ensure that there are no pending updates. + foreach (['update', 'post_update'] as $update_type) { + switch ($update_type) { + case 'update': + $all_updates = update_get_update_list(); + break; + case 'post_update': + $all_updates = \Drupal::service('update.post_update_registry')->getPendingUpdateInformation(); + break; + } + foreach ($all_updates as $module => $updates) { + if (!empty($updates['pending'])) { + foreach (array_keys($updates['pending']) as $update_name) { + $this->fail("The $update_name() update function from the $module module did not run."); + } + } + } + } + + // Ensure that the container is updated if any modules are installed or + // uninstalled during the update. + /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */ + $module_handler = $this->container->get('module_handler'); + $config_module_list = $this->config('core.extension')->get('module'); + $module_handler_list = $module_handler->getModuleList(); + $modules_installed = FALSE; + // Modules that are in configuration but not the module handler have been + // installed. + foreach (array_keys(array_diff_key($config_module_list, $module_handler_list)) as $module) { + $module_handler->addModule($module, drupal_get_path('module', $module)); + $modules_installed = TRUE; + } + $modules_uninstalled = FALSE; + $module_handler_list = $module_handler->getModuleList(); + // Modules that are in the module handler but not configuration have been + // uninstalled. + foreach (array_keys(array_diff_key($module_handler_list, $config_module_list)) as $module) { + $modules_uninstalled = TRUE; + unset($module_handler_list[$module]); + } + if ($modules_installed || $modules_uninstalled) { + // Note that resetAll() does not reset the kernel module list so we + // have to do that manually. + $this->kernel->updateModules($module_handler_list, $module_handler_list); + } + + // If we have successfully clicked 'Apply pending updates' then we need to + // clear the caches in the update test runner as this has occurred as part + // of the updates. + $this->resetAll(); + + // The config schema can be incorrect while the update functions are being + // executed. But once the update has been completed, it needs to be valid + // again. Assert the schema of all configuration objects now. + $names = $this->container->get('config.storage')->listAll(); + + // Allow tests to opt out of checking specific configuration. + $exclude = $this->getConfigSchemaExclusions(); + /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */ + $typed_config = $this->container->get('config.typed'); + foreach ($names as $name) { + if (in_array($name, $exclude, TRUE)) { + // Skip checking schema if the config is listed in the + // $configSchemaCheckerExclusions property. + continue; + } + $config = $this->config($name); + $this->assertConfigSchema($typed_config, $name, $config->get()); + } + + // Ensure that the update hooks updated all entity schema. + $needs_updates = \Drupal::entityDefinitionUpdateManager()->needsUpdates(); + if ($needs_updates) { + foreach (\Drupal::entityDefinitionUpdateManager()->getChangeSummary() as $entity_type_id => $summary) { + $entity_type_label = \Drupal::entityTypeManager()->getDefinition($entity_type_id)->getLabel(); + foreach ($summary as $message) { + $this->fail("$entity_type_label: $message"); + } + } + // The above calls to `fail()` should prevent this from ever being + // called, but it is here in case something goes really wrong. + $this->assertFalse($needs_updates, 'After all updates ran, entity schema is up to date.'); + } + } + } + + /** + * Tests the selection page. + */ + protected function doSelectionTest() { + // No-op. Tests wishing to do test the selection page or the general + // update.php environment before running update.php can override this method + // and implement their required tests. + } + + /** + * Installs the update_script_test module and makes an update available. + */ + protected function ensureUpdatesToRun() { + \Drupal::service('module_installer')->install(['update_script_test']); + // Reset the schema so there is an update to run. + \Drupal::database()->update('key_value') + ->fields(['value' => serialize(8000)]) + ->condition('collection', 'system.schema') + ->condition('name', 'update_script_test') + ->execute(); + } + +} diff --git a/web/core/tests/bootstrap.php b/web/core/tests/bootstrap.php index 467e6af6e603900cbcfe87e3ed54c19c63b1855a..6d27ec01daf484df341f701c32b0b582563369ee 100644 --- a/web/core/tests/bootstrap.php +++ b/web/core/tests/bootstrap.php @@ -158,7 +158,7 @@ function drupal_phpunit_populate_class_loader() { } return $loader; -}; +} // Do class loader population. drupal_phpunit_populate_class_loader(); diff --git a/web/core/tests/scripts/test_composer_project_templates.sh b/web/core/tests/scripts/test_composer_project_templates.sh deleted file mode 100755 index 620f6ad29dd39ab03ef4d0fbee9dcdd97a90e9ca..0000000000000000000000000000000000000000 --- a/web/core/tests/scripts/test_composer_project_templates.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -# @todo: convert to a build test after #2984031 is in. - -#/ Usage: ./drupal_project_templates.sh -#/ Description: Container command to check default composer templates. -#/ Options: -#/ --help: Display this help message -usage() { grep '^#/' "$0" | cut -c4- ; exit 0 ; } -expr "$*" : ".*--help" > /dev/null && usage - -info() { echo "[INFO] $*" ; } -fatal() { echo "[FATAL] $*" ; exit 1 ; } - -assertScaffold() { - if [ -f $1/autoload.php ] - then - info "autoload.php file found." - else - fatal "No autoload.php file found." - fi - if [ -f $1/core/authorize.php ] - then - info "authorize.php file found." - else - fatal "No authorize.php file found." - fi -} - -info "Starting script" - -SOURCE_DIR=$(realpath $(dirname $0))/../../.. - -info "Installing recommended project composer template" -composer --working-dir="${SOURCE_DIR}/composer/Template/RecommendedProject" config repositories.scaffold path '../../Plugin/Scaffold' -composer --working-dir="${SOURCE_DIR}/composer/Template/RecommendedProject" install --no-suggest --no-progress --no-interaction -info "Recommended project composer template installed successfully." -assertScaffold "${SOURCE_DIR}/composer/Template/RecommendedProject/web" - -info "Installing legacy project composer template" -composer --working-dir="${SOURCE_DIR}/composer/Template/LegacyProject" config repositories.scaffold path '../../Plugin/Scaffold' -composer --working-dir="${SOURCE_DIR}/composer/Template/LegacyProject" install --no-suggest --no-progress --no-interaction -info "Legacy project composer template installed successfully." -assertScaffold "${SOURCE_DIR}/composer/Template/LegacyProject" - -info "Script complete!" diff --git a/web/core/themes/claro/claro.theme b/web/core/themes/claro/claro.theme index d01e08a618731fa577cbf82a6e9e30083d1be1ac..35a2dbac10f385901ca2439490a97ad15e92533f 100644 --- a/web/core/themes/claro/claro.theme +++ b/web/core/themes/claro/claro.theme @@ -1306,7 +1306,7 @@ function claro_form_media_library_add_form_upload_alter(array &$form, FormStateI * Implements hook_form_FORM_ID_alter(). */ function claro_form_media_library_add_form_oembed_alter(array &$form, FormStateInterface $form_state) { - $form['attributes']['class'][] = 'media-library-add-form--oembed'; + $form['#attributes']['class'][] = 'media-library-add-form--oembed'; // If no media items have been added yet, add a couple of styling classes // to the initial URL form. diff --git a/web/core/themes/claro/templates/admin/update-version.html.twig b/web/core/themes/claro/templates/admin/update-version.html.twig index a26a8e078cb9b9a3c7dc1e7485aea62176ccb23f..00fef397bc83e1c590616612542eaf9175db34d6 100644 --- a/web/core/themes/claro/templates/admin/update-version.html.twig +++ b/web/core/themes/claro/templates/admin/update-version.html.twig @@ -6,11 +6,21 @@ * Available variables: * - attributes: HTML attributes suitable for a container element. * - title: The title of the project. + * - core_compatibility_details: Render array of core compatibility details. * - version: A list of data about the latest released version, containing: * - version: The version number. * - date: The date of the release. * - download_link: The URL for the downloadable file. * - release_link: The URL for the release notes. + * - core_compatible: A flag indicating whether the project is compatible + * with the currently installed version of Drupal core. This flag is not + * set for the Drupal core project itself. + * - core_compatibility_message: A message indicating the versions of Drupal + * core with which this project is compatible. This message is also + * contained within the 'core_compatibility_details' variable documented + * above. This message is not set for the Drupal core project itself. + * + * @see template_preprocess_update_version() */ #} <div class="{{ attributes.class }} project-update__version"{{ attributes|without('class') }}> @@ -22,12 +32,19 @@ </div> <div class="layout-column layout-column--half"> <ul class="project-update__version-links"> - <li class="project-update__download-link"> - <a href="{{ version.download_link }}">{{ 'Download'|t }}</a> - </li> + {% if version.core_compatible is not defined or version.core_compatible %} + <li class="project-update__download-link"> + <a href="{{ version.download_link }}">{{ 'Download'|t }}</a> + </li> + {% endif %} <li class="project-update__release-notes-link"> <a href="{{ version.release_link }}">{{ 'Release notes'|t }}</a> </li> + {% if core_compatibility_details %} + <li class="project-update__compatibility-details"> + {{ core_compatibility_details }} + </li> + {% endif %} </ul> </div> </div> diff --git a/web/core/themes/seven/css/theme/update-report.css b/web/core/themes/seven/css/theme/update-report.css new file mode 100644 index 0000000000000000000000000000000000000000..0f65b18d7c77cc69daf0865c2553cbe52573ce4f --- /dev/null +++ b/web/core/themes/seven/css/theme/update-report.css @@ -0,0 +1,28 @@ +/** + * @file update-report.css + * + * Styling for the Available updates report at admin/reports/updates + */ + +.project-update__compatibility-details details { + height: 20px; + margin: 2px 0; + border: 0; + background-color: inherit; +} +.project-update__compatibility-details details[open] { + overflow: visible; + height: auto; + white-space: normal; +} +.project-update__compatibility-details summary { + border: 0; + margin: 0; + padding: 0; + text-transform: none; + font-weight: normal; +} +.project-update__compatibility-details .details-wrapper { + margin: 0; + padding: 5px 0; +} diff --git a/web/core/themes/seven/seven.libraries.yml b/web/core/themes/seven/seven.libraries.yml index c08424f6484b6a9c5c6593733736b38e57d16092..72b13436fa44a36a9a5df85727282725f783cd3a 100644 --- a/web/core/themes/seven/seven.libraries.yml +++ b/web/core/themes/seven/seven.libraries.yml @@ -61,6 +61,12 @@ maintenance-page: - system/maintenance - seven/global-styling +update-report: + version: VERSION + css: + theme: + css/theme/update-report.css: {} + install-page: version: VERSION js: diff --git a/web/core/themes/seven/seven.theme b/web/core/themes/seven/seven.theme index 86c23c6aa29d135cc2beb4cc0437463a2cd8ddc4..a154f771be634ead7032b34a0639a160eb4552d7 100644 --- a/web/core/themes/seven/seven.theme +++ b/web/core/themes/seven/seven.theme @@ -374,3 +374,16 @@ function seven_views_pre_render(ViewExecutable $view) { } } } + +/** + * Prepares variables for update version templates. + * + * Default template: update-version.html.twig. + * + * @param array $variables + * An associative array containing: + * - version: An array of information about the release version. + */ +function seven_preprocess_update_version(array &$variables) { + $variables['#attached']['library'][] = 'seven/update-report'; +} diff --git a/web/core/themes/stable/layouts/fourcol_section/layout--fourcol-section.html.twig b/web/core/themes/stable/layouts/fourcol_section/layout--fourcol-section.html.twig index 9a380f76e01dc3d54252c76ed86e4a50fd5b378f..e610278c45e09482feffbc73bb81d2c54b384a8b 100644 --- a/web/core/themes/stable/layouts/fourcol_section/layout--fourcol-section.html.twig +++ b/web/core/themes/stable/layouts/fourcol_section/layout--fourcol-section.html.twig @@ -1,13 +1,11 @@ {# /** * @file - * Default theme implementation for a four-column 25%-25%-25%-25% layout. + * Theme override for a four-column 25%-25%-25%-25% layout. * * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% diff --git a/web/core/themes/stable/layouts/threecol_section/layout--threecol-section.html.twig b/web/core/themes/stable/layouts/threecol_section/layout--threecol-section.html.twig index 1311f28ab2a18bb98e873177804ba5a5dbbb0d42..123acfec3e6009225b117493350bacf3b21634c7 100644 --- a/web/core/themes/stable/layouts/threecol_section/layout--threecol-section.html.twig +++ b/web/core/themes/stable/layouts/threecol_section/layout--threecol-section.html.twig @@ -1,13 +1,11 @@ {# /** * @file - * Default theme implementation for a three-column layout. + * Theme override for a three-column layout. * * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% if content %} diff --git a/web/core/themes/stable/layouts/twocol_section/layout--twocol-section.html.twig b/web/core/themes/stable/layouts/twocol_section/layout--twocol-section.html.twig index a5d1d36376b75a26b074f5739fde80971c220603..d047debe53c34da45207f691b24d67c6d01795a7 100644 --- a/web/core/themes/stable/layouts/twocol_section/layout--twocol-section.html.twig +++ b/web/core/themes/stable/layouts/twocol_section/layout--twocol-section.html.twig @@ -1,13 +1,11 @@ {# /** * @file - * Default theme implementation to display a two-column layout. + * Theme override to display a two-column layout. * * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% if content %} diff --git a/web/core/themes/stable/templates/admin/language-negotiation-configure-form.html.twig b/web/core/themes/stable/templates/admin/language-negotiation-configure-form.html.twig index 5029a65d4d03fd5c104c620bc38d40a447968912..ae46f50f7a0251000fe69eb7f11a80e76cc6dd3f 100644 --- a/web/core/themes/stable/templates/admin/language-negotiation-configure-form.html.twig +++ b/web/core/themes/stable/templates/admin/language-negotiation-configure-form.html.twig @@ -1,22 +1,23 @@ {# /** -* @file -* Theme override for a language negotiation configuration form. -* -* Available variables: -* - language_types: A list of language negotiation types. Each language type -* contains the following: -* - type: The machine name for the negotiation type. -* - title: The language negotiation type name. -* - description: A description for how the language negotiation type operates. -* - configurable: A radio element to toggle the table. -* - table: A draggable table for the language detection methods of this type. -* - children: Remaining form items for the group. -* - attributes: A list of HTML attributes for the wrapper element. -* - children: Remaining form items for all groups. -* -* @see template_preprocess_language_negotiation_configure_form() -*/ + * @file + * Theme override for a language negotiation configuration form. + * + * Available variables: + * - language_types: A list of language negotiation types. Each language type + * contains the following: + * - type: The machine name for the negotiation type. + * - title: The language negotiation type name. + * - description: A description for how the language negotiation type + * operates. + * - configurable: A radio element to toggle the table. + * - table: A draggable table for the language detection methods of this type. + * - children: Remaining form items for the group. + * - attributes: A list of HTML attributes for the wrapper element. + * - children: Remaining form items for all groups. + * + * @see template_preprocess_language_negotiation_configure_form() + */ #} {% for language_type in language_types %} {% diff --git a/web/core/themes/stable/templates/admin/status-report-counter.html.twig b/web/core/themes/stable/templates/admin/status-report-counter.html.twig index b0f7bd5cbead69b799daa51b2d4871aa60299928..11605a75fbd433255fadf21f497ea11cc2fa6f2c 100644 --- a/web/core/themes/stable/templates/admin/status-report-counter.html.twig +++ b/web/core/themes/stable/templates/admin/status-report-counter.html.twig @@ -8,7 +8,6 @@ * - text: The text shown on counter. * - severity: The severity of the counter. * - * @ingroup themable */ #} {{ amount }} {{ text }} diff --git a/web/core/themes/stable/templates/admin/system-config-form.html.twig b/web/core/themes/stable/templates/admin/system-config-form.html.twig index 011128ca8a7a3129577c29322981fd22697df6ab..92cc71b70c3824e21319b718a682ad4163d67f57 100644 --- a/web/core/themes/stable/templates/admin/system-config-form.html.twig +++ b/web/core/themes/stable/templates/admin/system-config-form.html.twig @@ -5,8 +5,8 @@ * * This template will be used when a system config form specifies 'config_form' * as its #theme callback. Otherwise, by default, system config forms will be - * themed by form.html.twig. This does not alter the appearance of a form at all, - * but is provided as a convenience for themers. + * themed by form.html.twig. This does not alter the appearance of a form at + * all, but is provided as a convenience for themers. * * Available variables: * - form: The confirm form. diff --git a/web/core/themes/stable/templates/admin/update-version.html.twig b/web/core/themes/stable/templates/admin/update-version.html.twig index 6c23584a68743e013d5f204bb427ff61ac989d7d..4b0389ea60ce156df304386f9232043a5f6bc54a 100644 --- a/web/core/themes/stable/templates/admin/update-version.html.twig +++ b/web/core/themes/stable/templates/admin/update-version.html.twig @@ -6,11 +6,21 @@ * Available variables: * - attributes: HTML attributes suitable for a container element. * - title: The title of the project. + * - core_compatibility_details: Render array of core compatibility details. * - version: A list of data about the latest released version, containing: * - version: The version number. * - date: The date of the release. * - download_link: The URL for the downloadable file. * - release_link: The URL for the release notes. + * - core_compatible: A flag indicating whether the project is compatible + * with the currently installed version of Drupal core. This flag is not + * set for the Drupal core project itself. + * - core_compatibility_message: A message indicating the versions of Drupal + * core with which this project is compatible. This message is also + * contained within the 'core_compatibility_details' variable documented + * above. This message is not set for the Drupal core project itself. + * + * @see template_preprocess_update_version() */ #} <div class="{{ attributes.class }} project-update__version"{{ attributes|without('class') }}> @@ -22,12 +32,19 @@ </div> <div class="layout-column layout-column--half"> <ul class="project-update__version-links"> - <li class="project-update__download-link"> - <a href="{{ version.download_link }}">{{ 'Download'|t }}</a> - </li> + {% if version.core_compatible is not defined or version.core_compatible %} + <li class="project-update__download-link"> + <a href="{{ version.download_link }}">{{ 'Download'|t }}</a> + </li> + {% endif %} <li class="project-update__release-notes-link"> <a href="{{ version.release_link }}">{{ 'Release notes'|t }}</a> </li> + {% if core_compatibility_details %} + <li class="project-update__compatibility-details"> + {{ core_compatibility_details }} + </li> + {% endif %} </ul> </div> </div> diff --git a/web/core/themes/stable/templates/content-edit/entity-add-list.html.twig b/web/core/themes/stable/templates/content-edit/entity-add-list.html.twig index 8d737862d1e6d6dd8a951f9fe109566be4b7cb93..815f5d61da7e51cdfa9c8c8997aa2a36950cd654 100644 --- a/web/core/themes/stable/templates/content-edit/entity-add-list.html.twig +++ b/web/core/themes/stable/templates/content-edit/entity-add-list.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation to present a list of available bundles. + * Theme override to present a list of available bundles. * * Available variables: * - bundles: A list of bundles, each with the following properties: @@ -12,8 +12,6 @@ * available if the entity type uses bundle entities. * * @see template_preprocess_entity_add_list() - * - * @ingroup themeable */ #} {% if bundles is not empty %} diff --git a/web/core/themes/stable/templates/content/comment.html.twig b/web/core/themes/stable/templates/content/comment.html.twig index 836e5651ed77b9a16670a549c7c76fec364f3c02..db870d8f4be329cd59b8b50c5899f48f96966b81 100644 --- a/web/core/themes/stable/templates/content/comment.html.twig +++ b/web/core/themes/stable/templates/content/comment.html.twig @@ -27,7 +27,7 @@ * - title: Comment title, linked to the comment. * - attributes: HTML attributes for the containing element. * The attributes.class may contain one or more of the following classes: - * - comment: The current template type; e.g., 'theming hook'. + * - comment: The current template type; for instance, 'theming hook'. * - by-anonymous: Comment by an unregistered user. * - by-{entity-type}-author: Comment by the author of the parent entity, * eg. by-node-author. diff --git a/web/core/themes/stable/templates/content/media-embed-error.html.twig b/web/core/themes/stable/templates/content/media-embed-error.html.twig index 7da2c509e5105b094c5c0bfe7be1e5176c05364f..b54c8a798f3a0251534d2dfa3d345a3aa8f9345a 100644 --- a/web/core/themes/stable/templates/content/media-embed-error.html.twig +++ b/web/core/themes/stable/templates/content/media-embed-error.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation for a missing media error. + * Theme override for a missing media error. * * Available variables * - message: The message text. @@ -11,8 +11,6 @@ * is displayed from JavaScript. * * @see Drupal.theme.mediaEmbedPreviewError - * - * @ingroup themeable */ #} <div{{ attributes }}> diff --git a/web/core/themes/stable/templates/content/media-oembed-iframe.html.twig b/web/core/themes/stable/templates/content/media-oembed-iframe.html.twig index 985b4dd7a9e89f944db53f0ce9aaab05288dc18a..fbc43e8b4f955804bedf79d0b257837013fcd528 100644 --- a/web/core/themes/stable/templates/content/media-oembed-iframe.html.twig +++ b/web/core/themes/stable/templates/content/media-oembed-iframe.html.twig @@ -1,9 +1,7 @@ {# /** * @file - * Default theme implementation to display an oEmbed resource in an iframe. - * - * @ingroup themeable + * Theme override to display an oEmbed resource in an iframe. */ #} <!DOCTYPE html> diff --git a/web/core/themes/stable/templates/content/media.html.twig b/web/core/themes/stable/templates/content/media.html.twig index a8ab44457b879f96a2a090e3bb17432eef74a6e3..5f949c6fe9e7380753a4116b89afa2316d6ac274 100644 --- a/web/core/themes/stable/templates/content/media.html.twig +++ b/web/core/themes/stable/templates/content/media.html.twig @@ -8,8 +8,6 @@ * - content: Media content. * * @see template_preprocess_media() - * - * @ingroup themeable */ #} <article{{ attributes }}> diff --git a/web/core/themes/stable/templates/content/off-canvas-page-wrapper.html.twig b/web/core/themes/stable/templates/content/off-canvas-page-wrapper.html.twig index 2c8e23c6258a35b70e4b5c2fb6f1a06d8253b9a0..04a80b188edaf6ef635322cd729a57e7d1137e3d 100644 --- a/web/core/themes/stable/templates/content/off-canvas-page-wrapper.html.twig +++ b/web/core/themes/stable/templates/content/off-canvas-page-wrapper.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Theme override for page wrapper. + * Theme override for a page wrapper. * * For consistent wrapping to {{ page }} render in all themes. The * "data-off-canvas-main-canvas" attribute is required by the off-canvas dialog. diff --git a/web/core/themes/stable/templates/dataset/forums.html.twig b/web/core/themes/stable/templates/dataset/forums.html.twig index 187118769046be8efc154d958075236534059012..af67b30dde77a143a711cd866a5e39d235c70a7c 100644 --- a/web/core/themes/stable/templates/dataset/forums.html.twig +++ b/web/core/themes/stable/templates/dataset/forums.html.twig @@ -8,6 +8,7 @@ * Available variables: * - forums: The forums to display (as processed by forum-list.html.twig). * - topics: The topics to display. + * - topics_original: Original topics data before modification. * - topics_pager: The topics pager. * - forums_defined: A flag to indicate that the forums are configured. * diff --git a/web/core/themes/stable/templates/field/file-audio.html.twig b/web/core/themes/stable/templates/field/file-audio.html.twig index c98725b99b610a3c61edcc2de6383e6f9800804d..d93f81e7287f36a5178337869b71ab6d032a78da 100644 --- a/web/core/themes/stable/templates/field/file-audio.html.twig +++ b/web/core/themes/stable/templates/field/file-audio.html.twig @@ -1,7 +1,7 @@ {# /** * @file -* Default theme implementation to display the file entity as an audio tag. +* Theme override to display the file entity as an audio tag. * * Available variables: * - attributes: An array of HTML attributes, intended to be added to the @@ -11,8 +11,6 @@ * - file: The full file object. * - source_attributes: An array of HTML attributes for to be added to the * source tag. -* -* @ingroup themeable */ #} <audio {{ attributes }}> diff --git a/web/core/themes/stable/templates/field/file-video.html.twig b/web/core/themes/stable/templates/field/file-video.html.twig index 162fd4933e86f38e1620f97d77d7598a8a67096f..93568fcbadd4329471e7a97f9ced16a2b4a59a63 100644 --- a/web/core/themes/stable/templates/field/file-video.html.twig +++ b/web/core/themes/stable/templates/field/file-video.html.twig @@ -1,7 +1,7 @@ {# /** * @file -* Default theme implementation to display the file entity as a video tag. +* Theme override to display the file entity as a video tag. * * Available variables: * - attributes: An array of HTML attributes, intended to be added to the @@ -11,8 +11,6 @@ * - file: The full file object. * - source_attributes: An array of HTML attributes for to be added to the * source tag. -* -* @ingroup themeable */ #} <video {{ attributes }}> diff --git a/web/core/themes/stable/templates/form/fieldset.html.twig b/web/core/themes/stable/templates/form/fieldset.html.twig index 8f1f73d9813f9d91d4778b1734057cab1f16e8a6..59200e779310d56ababe0d8f7717ffa6a8d0e987 100644 --- a/web/core/themes/stable/templates/form/fieldset.html.twig +++ b/web/core/themes/stable/templates/form/fieldset.html.twig @@ -4,18 +4,19 @@ * Theme override for a fieldset element and its children. * * Available variables: - * - attributes: HTML attributes for the fieldset element. - * - errors: (optional) Any errors for this fieldset element, may not be set. - * - required: Boolean indicating whether the fieldeset element is required. - * - legend: The legend element containing the following properties: - * - title: Title of the fieldset, intended for use as the text of the legend. - * - attributes: HTML attributes to apply to the legend. + * - attributes: HTML attributes for the <fieldset> element. + * - errors: (optional) Any errors for this <fieldset> element, may not be set. + * - required: Boolean indicating whether the <fieldeset> element is required. + * - legend: The <legend> element containing the following properties: + * - title: Title of the <fieldset>, intended for use as the text + of the <legend>. + * - attributes: HTML attributes to apply to the <legend> element. * - description: The description element containing the following properties: - * - content: The description content of the fieldset. + * - content: The description content of the <fieldset>. * - attributes: HTML attributes to apply to the description container. - * - children: The rendered child elements of the fieldset. - * - prefix: The content to add before the fieldset children. - * - suffix: The content to add after the fieldset children. + * - children: The rendered child elements of the <fieldset>. + * - prefix: The content to add before the <fieldset> children. + * - suffix: The content to add after the <fieldset> children. * * @see template_preprocess_fieldset() */ @@ -36,7 +37,7 @@ required ? 'form-required', ] %} - {# Always wrap fieldset legends in a SPAN for CSS positioning. #} + {# Always wrap fieldset legends in a <span> for CSS positioning. #} <legend{{ legend.attributes }}> <span{{ legend_span.attributes.addClass(legend_span_classes) }}>{{ legend.title }}</span> </legend> diff --git a/web/core/themes/stable/templates/form/textarea.html.twig b/web/core/themes/stable/templates/form/textarea.html.twig index 9767bc583bad5382bfb119f04daa66c93a708b50..96ddfc90e8680f6e2dd425d65c3aa367bf47efe2 100644 --- a/web/core/themes/stable/templates/form/textarea.html.twig +++ b/web/core/themes/stable/templates/form/textarea.html.twig @@ -5,7 +5,7 @@ * * Available variables * - wrapper_attributes: A list of HTML attributes for the wrapper element. - * - attributes: A list of HTML attributes for the textarea element. + * - attributes: A list of HTML attributes for the <textarea> element. * - resizable: An indicator for whether the textarea is resizable. * - required: An indicator for whether the textarea is required. * - value: The textarea content. diff --git a/web/core/themes/stable/templates/layout/layout--onecol.html.twig b/web/core/themes/stable/templates/layout/layout--onecol.html.twig index 3a7f9934d09971ffb0d812caea966ad8977241de..7fe5b121ca8f82b6b6cbe5097fec58fb74202877 100644 --- a/web/core/themes/stable/templates/layout/layout--onecol.html.twig +++ b/web/core/themes/stable/templates/layout/layout--onecol.html.twig @@ -1,13 +1,11 @@ {# /** * @file - * Default theme implementation to display a one-column layout. + * Theme override to display a one-column layout. * * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% diff --git a/web/core/themes/stable/templates/layout/layout--threecol-25-50-25.html.twig b/web/core/themes/stable/templates/layout/layout--threecol-25-50-25.html.twig index e5441d8b6be991c7e65700e2870aeaf2ef7ccb4d..715470bd061a21c101cbf0250fa6d099a128b306 100644 --- a/web/core/themes/stable/templates/layout/layout--threecol-25-50-25.html.twig +++ b/web/core/themes/stable/templates/layout/layout--threecol-25-50-25.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation for a three column layout. + * Theme override for a three column layout. * * This template provides a three column 25%-50%-25% display layout, with * additional areas for the top and the bottom. @@ -9,8 +9,6 @@ * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% diff --git a/web/core/themes/stable/templates/layout/layout--threecol-33-34-33.html.twig b/web/core/themes/stable/templates/layout/layout--threecol-33-34-33.html.twig index 6445061c04e4b9ea4f5a53f2c01b818692742930..f0a541d495818427b593345729133cab82d91b12 100644 --- a/web/core/themes/stable/templates/layout/layout--threecol-33-34-33.html.twig +++ b/web/core/themes/stable/templates/layout/layout--threecol-33-34-33.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation for a three column layout. + * Theme override for a three column layout. * * This template provides a three column 33%-34%-33% display layout, with * additional areas for the top and the bottom. @@ -9,8 +9,6 @@ * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% diff --git a/web/core/themes/stable/templates/layout/layout--twocol-bricks.html.twig b/web/core/themes/stable/templates/layout/layout--twocol-bricks.html.twig index dc29e03e43027aa3062aedab88e6aa813a142212..08a0b47920618873e49008f826a0c930e31c0d47 100644 --- a/web/core/themes/stable/templates/layout/layout--twocol-bricks.html.twig +++ b/web/core/themes/stable/templates/layout/layout--twocol-bricks.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation for a two column layout. + * Theme override for a two column layout. * * This template provides a two column display layout with full width areas at * the top, bottom and in the middle. @@ -9,8 +9,6 @@ * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% diff --git a/web/core/themes/stable/templates/layout/layout--twocol.html.twig b/web/core/themes/stable/templates/layout/layout--twocol.html.twig index 262c657f919ec0225db6edd97a72c3ce09ce6f69..4de66f048958db290f59738738fb1755d44b5230 100644 --- a/web/core/themes/stable/templates/layout/layout--twocol.html.twig +++ b/web/core/themes/stable/templates/layout/layout--twocol.html.twig @@ -1,13 +1,11 @@ {# /** * @file - * Default theme implementation to display a two-column layout. + * Theme override to display a two-column layout. * * Available variables: * - content: The content for this layout. * - attributes: HTML attributes for the layout <div>. - * - * @ingroup themeable */ #} {% diff --git a/web/core/themes/stable/templates/layout/region.html.twig b/web/core/themes/stable/templates/layout/region.html.twig index f34998e7eaf127fadc9b39993d71579b0ff7267c..e5e36d07410b8fb7be5b57e43e6d3880f3793d01 100644 --- a/web/core/themes/stable/templates/layout/region.html.twig +++ b/web/core/themes/stable/templates/layout/region.html.twig @@ -5,7 +5,7 @@ * * Available variables: * - content: The content for this region, typically blocks. - * - attributes: HTML attributes for the region div. + * - attributes: HTML attributes for the region <div>. * - region: The name of the region variable as defined in the theme's * .info.yml file. * diff --git a/web/core/themes/stable/templates/media-library/media--media-library.html.twig b/web/core/themes/stable/templates/media-library/media--media-library.html.twig index 6262e7d5062efd4fd0fad7a4676f2e4caa78acce..4c5a5a70970941d0a6a53b8463ae0752d5c5c0c5 100644 --- a/web/core/themes/stable/templates/media-library/media--media-library.html.twig +++ b/web/core/themes/stable/templates/media-library/media--media-library.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation to present a media entity in the media library. + * Theme override to present a media entity in the media library. * * Available variables: * - media: The entity with limited access to object properties and methods. @@ -30,8 +30,6 @@ * * @see template_preprocess_media() * @see media_library_preprocess_media() - * - * @ingroup themeable */ #} <article{{ attributes }}> diff --git a/web/core/themes/stable/templates/media-library/media-library-item.html.twig b/web/core/themes/stable/templates/media-library/media-library-item.html.twig index a765d04c11be9e7095c95289c71a8441dd2227a4..372b71c88b1f0273c420308031ddf5c07cc443f3 100644 --- a/web/core/themes/stable/templates/media-library/media-library-item.html.twig +++ b/web/core/themes/stable/templates/media-library/media-library-item.html.twig @@ -1,7 +1,7 @@ {# /** * @file - * Default theme implementation of a media library item. + * Theme override of a media library item. * * This is used when displaying selected media items, either in the field * widget or in the "Additional selected media" area when adding new @@ -13,8 +13,6 @@ * fields or elements surrounding it. * * @see template_preprocess_media_library_item() - * - * @ingroup themeable */ #} <div{{ attributes }}> diff --git a/web/core/themes/stable/templates/media-library/media-library-wrapper.html.twig b/web/core/themes/stable/templates/media-library/media-library-wrapper.html.twig index 344637cd62c27b3a5d8a5ebb2394a0d26eaaaf1f..ce17ead145e7cea8142d2640736d738b4a7f53bb 100644 --- a/web/core/themes/stable/templates/media-library/media-library-wrapper.html.twig +++ b/web/core/themes/stable/templates/media-library/media-library-wrapper.html.twig @@ -1,8 +1,8 @@ {# /** * @file - * Default theme implementation of a container used to wrap the media library's - * modal dialog interface. + * Theme override of a container used to wrap the media library's modal dialog + * interface. * * Available variables: * - attributes: HTML attributes for the containing element. @@ -11,8 +11,6 @@ * existing media items to choose from. * * @see template_preprocess_media_library_wrapper() - * - * @ingroup themeable */ #} <div{{ attributes }}> diff --git a/web/modules/captcha/image_captcha/js/image_captcha_refresh.js b/web/modules/captcha/image_captcha/js/image_captcha_refresh.js new file mode 100644 index 0000000000000000000000000000000000000000..457c58e7d1e1fba101c28e53b08bb43c53d0b616 --- /dev/null +++ b/web/modules/captcha/image_captcha/js/image_captcha_refresh.js @@ -0,0 +1,46 @@ +/** + * @file + * Attaches behaviors for the zipang captcha refresh module. + */ + +(function ($) { + 'use strict'; + + /** + * Attaches jQuery validate behavoir to forms. + * + * @type {Drupal~behavior} + * + * @prop {Drupal~behaviorAttach} attach + * Attaches the outline behavior to the right context. + */ + Drupal.behaviors.CaptchaRefresh = { + + attach: function (context) { + $('.reload-captcha', context).not('.processed').bind('click', function () { + $(this).addClass('processed'); + var $form = $(this).parents('form'); + // Send post query for getting new captcha data. + var date = new Date(); + var baseUrl = document.location.origin; + var url = baseUrl + '/' + $(this).attr('href') + '?' + date.getTime(); + $.get( + url, + {}, + function (response) { + if (response.status === 1) { + $('.captcha', $form).find('img').attr('src', response.data.url); + $('input[name=captcha_sid]', $form).val(response.data.sid); + $('input[name=captcha_token]', $form).val(response.data.token); + } + else { + alert(response.message); + } + }, + 'json' + ); + return false; + }); + } + }; +})(jQuery); diff --git a/web/modules/captcha/image_captcha/src/Controller/CaptchaImageRefresh.php b/web/modules/captcha/image_captcha/src/Controller/CaptchaImageRefresh.php new file mode 100644 index 0000000000000000000000000000000000000000..1599689c3a14b7f8e6f79fcc67a42085863936da --- /dev/null +++ b/web/modules/captcha/image_captcha/src/Controller/CaptchaImageRefresh.php @@ -0,0 +1,93 @@ +<?php + +namespace Drupal\image_captcha\Controller; + +/** + * To change template file, choose Tools | Templates and open it in the editor. + */ + +use Drupal\Component\Datetime\TimeInterface; +use Drupal\Core\Controller\ControllerBase; +use Drupal\Core\Database\Database; +use Drupal\Core\Url; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\JsonResponse; +use Drupal\Component\Utility\Crypt; + +/** + * Description of CaptchaImageRefresh. + */ +class CaptchaImageRefresh extends ControllerBase { + + /** + * Obtaining system time. + * + * @var \Drupal\Component\Datetime\TimeInterface + */ + protected $time; + + /** + * The contruct method. + * + * @param \Drupal\Component\Datetime\TimeInterface $time + * Obtaining system time. + */ + public function __construct(TimeInterface $time) { + $this->time = $time; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('datetime.time') + ); + } + + /** + * Put your code here. + */ + public function refreshCaptcha($form_id = NULL) { + $result = [ + 'status' => 0, + 'message' => '', + ]; + try { + module_load_include('inc', 'captcha', 'captcha'); + $config = $this->config('image_captcha.settings'); + $captcha_sid = _captcha_generate_captcha_session($form_id); + $captcha_token = Crypt::randomBytesBase64(); + $allowed_chars = _image_captcha_utf8_split($config->get('image_captcha_image_allowed_chars', IMAGE_CAPTCHA_ALLOWED_CHARACTERS)); + $code_length = (int) $config->get('image_captcha_code_length'); + $code = ''; + for ($i = 0; $i < $code_length; $i++) { + $code .= $allowed_chars[array_rand($allowed_chars)]; + } + $connection = Database::getConnection(); + $connection->update('captcha_sessions') + ->fields([ + 'token' => $captcha_token, + 'solution' => $code, + ]) + ->condition('csid', $captcha_sid, '=') + ->execute(); + $result['data'] = [ + 'url' => Url::fromRoute('image_captcha.generator', ['session_id' => $captcha_sid, 'timestamp' => $this->time->getRequestTime()])->toString(), + 'token' => $captcha_token, + 'sid' => $captcha_sid, + ]; + $result['status'] = 1; + } + catch (\Exception $e) { + if ($message = $e->getMessage()) { + $result['message'] = $message; + } + else { + $result['message'] = $this->t('Error has occurred. Please contact to site administrator.'); + } + } + return new JsonResponse($result); + } + +} diff --git a/web/modules/captcha/image_captcha/templates/image-captcha-refresh.html.twig b/web/modules/captcha/image_captcha/templates/image-captcha-refresh.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9de177b7e7e2c23f5db7196c983b099329f52866 --- /dev/null +++ b/web/modules/captcha/image_captcha/templates/image-captcha-refresh.html.twig @@ -0,0 +1,19 @@ +{# +/** + * @file + * Custom theme implementation for custom field type defined. + * + * Available variables: + * - uri: An optional URL the image can be linked to. + * - title: An optional Title value which will be shown as text. + * - link_value: Value used to open the link in new or same tab. + * + * @see template_preprocess_custom_zipang_link_formatter() + * + * @ingroup themeable + */ +#} +{{ attach_library('image_captcha/image-captcha-refresh') }} +<div class="reload-captcha-wrapper"> + {{captcha_refresh_link}} +</div> diff --git a/web/modules/captcha/modules/captcha_long_form_id_test/captcha_long_form_id_test.info.yml b/web/modules/captcha/modules/captcha_long_form_id_test/captcha_long_form_id_test.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..053eceecb7e8ee1ce73eb27c55e19cd3a6f6089a --- /dev/null +++ b/web/modules/captcha/modules/captcha_long_form_id_test/captcha_long_form_id_test.info.yml @@ -0,0 +1,11 @@ +name: captcha long form id test module +type: module +description: 'Test module for testing captchas added to forms with ids longer than 64 characters' +package: Testing +core: 8.x +hidden: true + +# Information added by Drupal.org packaging script on 2020-02-21 +version: '8.x-1.0' +project: 'captcha' +datestamp: 1582292985 diff --git a/web/modules/captcha/modules/captcha_long_form_id_test/captcha_long_form_id_test.routing.yml b/web/modules/captcha/modules/captcha_long_form_id_test/captcha_long_form_id_test.routing.yml new file mode 100644 index 0000000000000000000000000000000000000000..0fc46ae984f510f201c16184a038bdad6eb90c44 --- /dev/null +++ b/web/modules/captcha/modules/captcha_long_form_id_test/captcha_long_form_id_test.routing.yml @@ -0,0 +1,8 @@ +captcha_long_form_id_test.this_formid_is_intentionally_longer_than_64_characters_to_test_captcha: + path: 'captcha/test_form/long_id' + defaults: + _form: '\Drupal\captcha_long_form_id_test\Form\LongIdForm' + _title: 'LongIdForm' + requirements: + # for testing only, can be open + _access: 'TRUE' diff --git a/web/modules/captcha/modules/captcha_long_form_id_test/src/Form/LongIdForm.php b/web/modules/captcha/modules/captcha_long_form_id_test/src/Form/LongIdForm.php new file mode 100644 index 0000000000000000000000000000000000000000..b152883c47fdc1c6de2e3b692ae16b36546e49a7 --- /dev/null +++ b/web/modules/captcha/modules/captcha_long_form_id_test/src/Form/LongIdForm.php @@ -0,0 +1,49 @@ +<?php + +namespace Drupal\captcha_long_form_id_test\Form; + +use Drupal\Core\Form\FormBase; +use Drupal\Core\Form\FormStateInterface; + +/** + * Class LongIdForm. + */ +class LongIdForm extends FormBase { + + /** + * {@inheritdoc} + */ + public function getFormId() { + return 'this_formid_is_intentionally_longer_than_64_characters_to_test_captcha'; + } + + /** + * {@inheritdoc} + */ + public function buildForm(array $form, FormStateInterface $form_state) { + $form['text_field'] = [ + '#type' => 'textfield', + '#title' => $this->t('Text Field'), + '#maxlength' => 64, + '#size' => 64, + ]; + $form['submit'] = [ + '#type' => 'submit', + '#value' => $this->t('Submit'), + ]; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, FormStateInterface $form_state) { + // Display result. + foreach ($form_state->getValues() as $key => $value) { + $this->messenger()->addMessage($key . ': ' . $value); + } + + } + +} diff --git a/web/modules/captcha/src/Entity/Controller/CaptchaPointListBuilder.php b/web/modules/captcha/src/Entity/Controller/CaptchaPointListBuilder.php new file mode 100644 index 0000000000000000000000000000000000000000..ebb255d96876f6279ea570fb6a2a35bb227075de --- /dev/null +++ b/web/modules/captcha/src/Entity/Controller/CaptchaPointListBuilder.php @@ -0,0 +1,33 @@ +<?php + +namespace Drupal\captcha\Entity\Controller; + +use Drupal\Core\Config\Entity\ConfigEntityListBuilder; +use Drupal\Core\Entity\EntityInterface; + +/** + * Builds the list of capture points for the captcha point form. + */ +class CaptchaPointListBuilder extends ConfigEntityListBuilder { + + /** + * {@inheritdoc} + */ + public function buildHeader() { + $header['form_id'] = $this->t('Captcha Point form ID'); + $header['captcha_type'] = $this->t('Captcha Point challenge type'); + + return $header + parent::buildHeader(); + } + + /** + * {@inheritdoc} + */ + public function buildRow(EntityInterface $entity) { + $row['form_id'] = $entity->id(); + $row['captcha_type'] = $entity->getCaptchaType(); + + return $row + parent::buildRow($entity); + } + +} diff --git a/web/modules/captcha/src/Service/CaptchaService.php b/web/modules/captcha/src/Service/CaptchaService.php new file mode 100644 index 0000000000000000000000000000000000000000..2440b96a72b3638034084fe88eabfc9bce84febc --- /dev/null +++ b/web/modules/captcha/src/Service/CaptchaService.php @@ -0,0 +1,120 @@ +<?php + +namespace Drupal\captcha\Service; + +/** + * Helper service for CAPTCHA module. + */ +class CaptchaService { + + /** + * Return an array with the available CAPTCHA types. + * + * For use as options array for a select form elements. + * + * @param bool $add_special_options + * If true: also add the 'default' option. + * + * @return array + * An associative array mapping "$module/$type" to + * "$type (from module $module)" with $module the module name + * implementing the CAPTCHA and $type the name of the CAPTCHA type. + */ + public function getAvailableChallengeTypes(bool $add_special_options = TRUE) { + $challenges = []; + + if ($add_special_options) { + $challenges['default'] = t('Default challenge type'); + } + + // We do our own version of Drupal's module_invoke_all() here because + // we want to build an array with custom keys and values. + foreach (\Drupal::moduleHandler()->getImplementations('captcha') as $module) { + $result = call_user_func_array($module . '_captcha', ['list']); + if (is_array($result)) { + foreach ($result as $type) { + $challenges["$module/$type"] = t('@type (from module @module)', [ + '@type' => $type, + '@module' => $module, + ]); + } + } + } + + return $challenges; + } + + /** + * Helper function to insert a CAPTCHA element before a given form element. + * + * @param array $form + * the form to add the CAPTCHA element to. + * @param array $placement + * information where the CAPTCHA element should be inserted. + * $placement should be an associative array with fields: + * - 'path': path (array of path items) of the container in + * the form where the CAPTCHA element should be inserted. + * - 'key': the key of the element before which the CAPTCHA element + * should be inserted. If the field 'key' is undefined or NULL, + * the CAPTCHA will just be appended in the container. + * - 'weight': if 'key' is not NULL: should be the weight of the + * element defined by 'key'. If 'key' is NULL and weight is not NULL: + * set the weight property of the CAPTCHA element to this value. + * @param array $captcha_element + * the CAPTCHA element to insert. + */ + function insertCaptchaElement(array &$form, array $placement, array $captcha_element) { + // Get path, target and target weight or use defaults if not available. + $target_key = isset($placement['key']) ? $placement['key'] : NULL; + $target_weight = isset($placement['weight']) ? $placement['weight'] : NULL; + $path = isset($placement['path']) ? $placement['path'] : []; + + // Walk through the form along the path. + $form_stepper = &$form; + foreach ($path as $step) { + if (isset($form_stepper[$step])) { + $form_stepper = &$form_stepper[$step]; + } + else { + // Given path is invalid: stop stepping and + // continue in best effort (append instead of insert). + $target_key = NULL; + break; + } + } + + // If no target is available: just append the CAPTCHA element + // to the container. + if ($target_key == NULL || !array_key_exists($target_key, $form_stepper)) { + // Optionally, set weight of CAPTCHA element. + if ($target_weight != NULL) { + $captcha_element['#weight'] = $target_weight; + } + $form_stepper['captcha'] = $captcha_element; + } + // If there is a target available: make sure the CAPTCHA element + // comes right before it. + else { + // If target has a weight: set weight of CAPTCHA element a bit smaller + // and just append the CAPTCHA: sorting will fix the ordering anyway. + if ($target_weight != NULL) { + $captcha_element['#weight'] = $target_weight - .1; + $form_stepper['captcha'] = $captcha_element; + } + else { + // If we can't play with weights: insert the CAPTCHA element + // at the right position. Because PHP lacks a function for + // this (array_splice() comes close, but it does not preserve + // the key of the inserted element), we do it by hand: chop of + // the end, append the CAPTCHA element and put the end back. + $offset = array_search($target_key, array_keys($form_stepper)); + $end = array_splice($form_stepper, $offset); + $form_stepper['captcha'] = $captcha_element; + foreach ($end as $k => $v) { + $form_stepper[$k] = $v; + } + } + } + } + +} diff --git a/web/modules/captcha/tests/src/Functional/CaptchaAdminTest.php b/web/modules/captcha/tests/src/Functional/CaptchaAdminTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d883cc4a0d952543a622680fb13604779b3addc6 --- /dev/null +++ b/web/modules/captcha/tests/src/Functional/CaptchaAdminTest.php @@ -0,0 +1,382 @@ +<?php + +namespace Drupal\Tests\captcha\Functional; + +use Drupal\captcha\Entity\CaptchaPoint; +use Drupal\Core\Url; + +/** + * Tests CAPTCHA admin settings. + * + * @group captcha + */ +class CaptchaAdminTest extends CaptchaWebTestBase { + + /** + * Test access to the admin pages. + */ + public function testAdminAccess() { + $this->drupalLogin($this->normalUser); + $this->drupalGet(self::CAPTCHA_ADMIN_PATH); + $this->assertText(t('Access denied'), 'Normal users should not be able to access the CAPTCHA admin pages', 'CAPTCHA'); + + $this->drupalLogin($this->adminUser); + $this->drupalGet(self::CAPTCHA_ADMIN_PATH); + $this->assertNoText(t('Access denied'), 'Admin users should be able to access the CAPTCHA admin pages', 'CAPTCHA'); + } + + /** + * Test the CAPTCHA point setting getter/setter. + */ + public function testCaptchaPointSettingGetterAndSetter() { + $comment_form_id = self::COMMENT_FORM_ID; + captcha_set_form_id_setting($comment_form_id, 'test'); + /* @var CaptchaPoint $result */ + $result = captcha_get_form_id_setting($comment_form_id); + $this->assertNotNull($result, 'CAPTCHA exists', 'CAPTCHA'); + $this->assertEqual($result->getCaptchaType(), 'test', 'CAPTCHA type: default', 'CAPTCHA'); + $result = captcha_get_form_id_setting($comment_form_id, TRUE); + $this->assertNotNull($result, 'CAPTCHA exists', 'CAPTCHA'); + $this->assertEqual($result, 'test', 'Setting and symbolic getting CAPTCHA point: "test"', 'CAPTCHA'); + + // Set to 'default'. + captcha_set_form_id_setting($comment_form_id, 'default'); + $this->config('captcha.settings') + ->set('default_challenge', 'foo/bar') + ->save(); + $result = captcha_get_form_id_setting($comment_form_id); + $this->assertNotNull($result, 'CAPTCHA exists', 'CAPTCHA'); + $this->assertEqual($result->getCaptchaType(), 'foo/bar', 'Setting and getting CAPTCHA point: default', 'CAPTCHA'); + $result = captcha_get_form_id_setting($comment_form_id, TRUE); + $this->assertNotNull($result, 'Setting and symbolic getting CAPTCHA point: "default"', 'CAPTCHA'); + $this->assertEqual($result, 'foo/bar', 'Setting and symbolic getting CAPTCHA point: default', 'CAPTCHA'); + + // Set to 'baz/boo'. + captcha_set_form_id_setting($comment_form_id, 'baz/boo'); + $result = captcha_get_form_id_setting($comment_form_id); + $this->assertNotNull($result, 'CAPTCHA exists', 'CAPTCHA'); + $this->assertEqual($result->getCaptchaType(), 'baz/boo', 'Setting and getting CAPTCHA point: baz/boo', 'CAPTCHA'); + $result = captcha_get_form_id_setting($comment_form_id, TRUE); + $this->assertEqual($result, 'baz/boo', 'Setting and symbolic getting CAPTCHA point: "baz/boo"', 'CAPTCHA'); + + // Set to NULL (which should delete the CAPTCHA point setting entry). + captcha_set_form_id_setting($comment_form_id, NULL); + $result = captcha_get_form_id_setting($comment_form_id); + $this->assertNotNull($result, 'CAPTCHA exists', 'CAPTCHA'); + $this->assertEqual($result->getCaptchaType(), 'foo/bar', 'Setting and getting CAPTCHA point: NULL', 'CAPTCHA'); + $result = captcha_get_form_id_setting($comment_form_id, TRUE); + $this->assertNotNull($result, 'CAPTCHA exists', 'CAPTCHA'); + + // Set with object. + $captcha_type = 'baba/fofo'; + captcha_set_form_id_setting($comment_form_id, $captcha_type); + + $result = captcha_get_form_id_setting($comment_form_id); + $this->assertNotNull($result, 'Setting and getting CAPTCHA point: baba/fofo', 'CAPTCHA'); + // $this->assertEqual($result->module, 'baba', 'Setting and getting + // CAPTCHA point: baba/fofo', 'CAPTCHA');. + $this->assertEqual($result->getCaptchaType(), 'baba/fofo', 'Setting and getting CAPTCHA point: baba/fofo', 'CAPTCHA'); + $result = captcha_get_form_id_setting($comment_form_id, TRUE); + $this->assertEqual($result, 'baba/fofo', 'Setting and symbolic getting CAPTCHA point: "baba/fofo"', 'CAPTCHA'); + } + + /** + * Helper function for checking CAPTCHA setting of a form. + * + * @param string $form_id + * The form_id of the form to investigate. + * @param string $challenge_type + * What the challenge type should be: + * NULL, 'default' or something like 'captcha/Math'. + */ + protected function assertCaptchaSetting($form_id, $challenge_type) { + $result = captcha_get_form_id_setting(self::COMMENT_FORM_ID, TRUE); + $this->assertEqual($result, $challenge_type, + t('Check CAPTCHA setting for form: expected: @expected, received: @received.', + [ + '@expected' => var_export($challenge_type, TRUE), + '@received' => var_export($result, TRUE), + ]), + 'CAPTCHA'); + } + + /** + * Testing of the CAPTCHA administration links. + */ + public function testCaptchaAdminLinks() { + $this->drupalLogin($this->adminUser); + + // Enable CAPTCHA administration links. + $edit = [ + 'administration_mode' => TRUE, + ]; + + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH, $edit, t('Save configuration')); + + // Create a node with comments enabled. + $node = $this->drupalCreateNode(); + + // Go to node page. + $this->drupalGet('node/' . $node->id()); + + // Click the add new comment link. + $this->clickLink(t('Add new comment')); + $add_comment_url = $this->getUrl(); + + // Remove fragment part from comment URL to avoid + // problems with later asserts. + $add_comment_url = strtok($add_comment_url, "#"); + + // Click the CAPTCHA admin link to enable a challenge. + $this->clickLink(t('Place a CAPTCHA here for untrusted users.')); + + // Enable Math CAPTCHA. + $edit = ['captchaType' => 'captcha/Math']; + $this->drupalPostForm($this->getUrl(), $edit, t('Save')); + // Check if returned to original comment form. + $this->assertUrl($add_comment_url, [], + 'After setting CAPTCHA with CAPTCHA admin links: should return to original form.', 'CAPTCHA'); + + // Check if CAPTCHA was successfully enabled + // (on CAPTCHA admin links fieldset). + $this->assertText(t('CAPTCHA: challenge "@type" enabled', ['@type' => $edit['captchaType']]), + 'Enable a challenge through the CAPTCHA admin links', 'CAPTCHA'); + + // Check if CAPTCHA was successfully enabled (through API). + $this->assertCaptchaSetting(self::COMMENT_FORM_ID, 'captcha/Math'); + + // Edit challenge type through CAPTCHA admin links. + $this->clickLink(t('change')); + + // Enable Math CAPTCHA. + $edit = ['captchaType' => 'default']; + $this->drupalPostForm($this->getUrl(), $edit, t('Save')); + + // Check if returned to original comment form. + $this->assertEqual($add_comment_url, $this->getUrl(), + 'After editing challenge type CAPTCHA admin links: should return to original form.', 'CAPTCHA'); + + // Check if CAPTCHA was successfully changed + // (on CAPTCHA admin links fieldset). + // This is actually the same as the previous setting because + // the captcha/Math is the default for the default challenge. + // TODO Make sure the edit is a real change. + $this->assertText(t('CAPTCHA: challenge "@type" enabled', ['@type' => $edit['captchaType']]), + 'Enable a challenge through the CAPTCHA admin links', 'CAPTCHA'); + // Check if CAPTCHA was successfully edited (through API). + $this->assertCaptchaSetting(self::COMMENT_FORM_ID, 'default'); + + // Disable challenge through CAPTCHA admin links. + $this->drupalGet(Url::fromRoute('entity.captcha_point.disable', ['captcha_point' => self::COMMENT_FORM_ID])); + $this->drupalPostForm(NULL, [], t('Disable')); + + // Check if returned to captcha point list. + global $base_url; + $this->assertEqual($base_url . '/admin/config/people/captcha/captcha-points', $this->getUrl(), + 'After disabling challenge in CAPTCHA admin: should return to captcha point list.', 'CAPTCHA'); + + // Check if CAPTCHA was successfully disabled + // (on CAPTCHA admin links fieldset). + $this->assertRaw(t('Captcha point %form_id has been disabled.', ['%form_id' => self::COMMENT_FORM_ID]), + 'Disable challenge through the CAPTCHA admin links', 'CAPTCHA'); + } + + /** + * Test untrusted user posting. + */ + public function testUntrustedUserPosting() { + // Set CAPTCHA on comment form. + captcha_set_form_id_setting(self::COMMENT_FORM_ID, 'captcha/Math'); + + // Create a node with comments enabled. + $node = $this->drupalCreateNode(); + + // Log in as normal (untrusted) user. + $this->drupalLogin($this->normalUser); + + // Go to node page and click the "add comment" link. + $this->drupalGet('node/' . $node->id()); + $this->clickLink(t('Add new comment')); + $add_comment_url = $this->getUrl(); + + // Check if CAPTCHA is visible on form. + $this->assertCaptchaPresence(TRUE); + // Try to post a comment with wrong answer. + $edit = $this->getCommentFormValues(); + $edit['captcha_response'] = 'xx'; + $this->drupalPostForm($add_comment_url, $edit, t('Preview')); + $this->assertText(self::CAPTCHA_WRONG_RESPONSE_ERROR_MESSAGE, + 'wrong CAPTCHA should block form submission.', 'CAPTCHA'); + } + + /** + * Test XSS vulnerability on CAPTCHA description. + */ + public function testXssOnCaptchaDescription() { + // Set CAPTCHA on user register form. + captcha_set_form_id_setting('user_register', 'captcha/Math'); + + // Put JavaScript snippet in CAPTCHA description. + $this->drupalLogin($this->adminUser); + $xss = '<script type="text/javascript">alert("xss")</script>'; + $edit = ['description' => $xss]; + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH, $edit, 'Save configuration'); + + // Visit user register form and check if JavaScript snippet is there. + $this->drupalLogout(); + $this->drupalGet('user/register'); + $this->assertNoRaw($xss, 'JavaScript should not be allowed in CAPTCHA description.', 'CAPTCHA'); + } + + /** + * Test the CAPTCHA placement clearing. + */ + public function testCaptchaPlacementCacheClearing() { + // Set CAPTCHA on user register form. + captcha_set_form_id_setting('user_register_form', 'captcha/Math'); + // Visit user register form to fill the CAPTCHA placement cache. + $this->drupalGet('user/register'); + // Check if there is CAPTCHA placement cache. + $placement_map = $this->container->get('cache.default') + ->get('captcha_placement_map_cache'); + $this->assertNotNull($placement_map, 'CAPTCHA placement cache should be set.'); + // Clear the cache. + $this->drupalLogin($this->adminUser); + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH, [], t('Clear the CAPTCHA placement cache')); + // Check that the placement cache is unset. + $placement_map = $this->container->get('cache.default') + ->get('captcha_placement_map_cache'); + $this->assertFalse($placement_map, 'CAPTCHA placement cache should be unset after cache clear.'); + } + + /** + * Helper function to get CAPTCHA point setting straight from the database. + * + * @param string $form_id + * Form machine ID. + * + * @return \Drupal\captcha\Entity\CaptchaPoint + * CaptchaPoint with mysql query result. + */ + protected function getCaptchaPointSettingFromDatabase($form_id) { + $ids = \Drupal::entityQuery('captcha_point') + ->condition('formId', $form_id) + ->execute(); + return $ids ? CaptchaPoint::load(reset($ids)) : NULL; + } + + /** + * Method for testing the CAPTCHA point administration. + */ + public function testCaptchaPointAdministration() { + // Generate CAPTCHA point data: + // Drupal form ID should consist of lowercase alphanumerics and underscore). + $captcha_point_form_id = 'form_' . strtolower($this->randomMachineName(32)); + // The Math CAPTCHA by the CAPTCHA module is always available, + // so let's use it. + $captcha_point_module = 'captcha'; + $captcha_point_type = 'Math'; + + // Log in as admin. + $this->drupalLogin($this->adminUser); + $label = 'TEST'; + + // Try and set CAPTCHA point without the #required label. Should fail. + $form_values = [ + 'formId' => $captcha_point_form_id, + 'captchaType' => $captcha_point_module . '/' . $captcha_point_type, + ]; + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/add', $form_values, t('Save')); + $this->assertText(t('Form ID field is required.')); + + // Set CAPTCHA point through admin/user/captcha/captcha/captcha_point. + $form_values['label'] = $label; + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/add', $form_values, t('Save')); + $this->assertRaw(t('Captcha Point for %label form was created.', ['%label' => $captcha_point_form_id])); + + // Check in database. + /* @var CaptchaPoint result */ + $result = $this->getCaptchaPointSettingFromDatabase($captcha_point_form_id); + $this->assertEqual($result->captchaType, $captcha_point_module . '/' . $captcha_point_type, + 'Enabled CAPTCHA point should have module and type set'); + + // Disable CAPTCHA point again. + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/' . $captcha_point_form_id . '/disable', [], t('Disable')); + $this->assertRaw(t('Captcha point %label has been disabled.', ['%label' => $label]), 'Disabling of CAPTCHA point'); + + // Check in database. + $result = $this->getCaptchaPointSettingFromDatabase($captcha_point_form_id); + + // Set CAPTCHA point via admin/user/captcha/captcha/captcha_point/$form_id. + $form_values = [ + 'captchaType' => $captcha_point_module . '/' . $captcha_point_type, + ]; + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/' . $captcha_point_form_id, $form_values, t('Save')); + $this->assertRaw(t('Captcha Point for %form_id form was updated.', ['%form_id' => $captcha_point_form_id]), 'Saving of CAPTCHA point settings'); + + // Check in database. + $result = $this->getCaptchaPointSettingFromDatabase($captcha_point_form_id); + $this->assertEqual($result->captchaType, $captcha_point_module . '/' . $captcha_point_type, + 'Enabled CAPTCHA point should have module and type set'); + + // Delete CAPTCHA point. + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/' . $captcha_point_form_id . '/delete', [], t('Delete')); + $this->assertRaw(t('Captcha point %label has been deleted.', ['%label' => $label]), + 'Deleting of CAPTCHA point'); + + $result = $this->getCaptchaPointSettingFromDatabase($captcha_point_form_id); + $this->assertFalse($result, 'Deleted CAPTCHA point should be in database'); + } + + /** + * Method for testing the CAPTCHA point administration. + */ + public function testCaptchaPointAdministrationByNonAdmin() { + // First add a CAPTCHA point (as admin). + $captcha_point_form_id = 'form_' . strtolower($this->randomMachineName(32)); + $captcha_point_module = 'captcha'; + $captcha_point_type = 'Math'; + $label = 'TEST_2'; + + $this->drupalLogin($this->adminUser); + + $form_values = [ + 'label' => $label, + 'formId' => $captcha_point_form_id, + 'captchaType' => $captcha_point_module . '/' . $captcha_point_type, + ]; + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/add', $form_values, 'Save'); + $this->assertRaw(t('Captcha Point for %form_id form was created.', ['%form_id' => $captcha_point_form_id])); + + // Switch from admin to non-admin. + $this->drupalLogin($this->normalUser); + + // Try to set CAPTCHA point + // through admin/user/captcha/captcha/captcha_point. + $this->drupalGet(self::CAPTCHA_ADMIN_PATH . '/captcha-points'); + $this->assertText(t('You are not authorized to access this page.'), + 'Non admin should not be able to set a CAPTCHA point'); + + // Try to disable the CAPTCHA point. + $this->drupalGet(self::CAPTCHA_ADMIN_PATH . '/captcha-points/' . $captcha_point_form_id . '/disable'); + $this->assertText(t('You are not authorized to access this page.'), + 'Non admin should not be able to disable a CAPTCHA point'); + + // Try to delete the CAPTCHA point. + $this->drupalGet(self::CAPTCHA_ADMIN_PATH . '/captcha-points/' . $captcha_point_form_id . '/delete'); + $this->assertText(t('You are not authorized to access this page.'), + 'Non admin should not be able to delete a CAPTCHA point'); + + // Switch from nonadmin to admin again. + $this->drupalLogin($this->adminUser); + + // Check if original CAPTCHA point still exists in database. + $result = $this->getCaptchaPointSettingFromDatabase($captcha_point_form_id); + $this->assertEqual($result->captchaType, $captcha_point_module . '/' . $captcha_point_type, 'Enabled CAPTCHA point should have module and type set'); + + // Delete captcha point. + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/' . $captcha_point_form_id . '/delete', [], 'Delete'); + $this->assertRaw(t('Captcha point %label has been deleted.', ['%label' => $label]), 'Disabling of CAPTCHA point'); + } + +} diff --git a/web/modules/captcha/tests/src/Functional/CaptchaCacheTest.php b/web/modules/captcha/tests/src/Functional/CaptchaCacheTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5705e53269f01a7e05f9423458f62122210d989b --- /dev/null +++ b/web/modules/captcha/tests/src/Functional/CaptchaCacheTest.php @@ -0,0 +1,72 @@ +<?php + +namespace Drupal\Tests\captcha\Functional; + +/** + * Tests CAPTCHA caching on various pages. + * + * @group captcha + */ +class CaptchaCacheTest extends CaptchaWebTestBase { + + /** + * Modules to install for this Test class. + * + * @var array + */ + public static $modules = ['block', 'image_captcha']; + + /** + * {@inheritdoc} + */ + public function setUp() { + parent::setUp(); + + $this->drupalPlaceBlock('user_login_block', ['id' => 'login']); + } + + /** + * Test the cache tags. + */ + public function testCacheTags() { + global $base_path; + // Check caching without captcha as anonymous user. + $this->drupalGet(''); + $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS'); + $this->drupalGet(''); + $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'HIT'); + + // Enable captcha on login block and test caching. + captcha_set_form_id_setting('user_login_form', 'captcha/Math'); + $this->drupalGet(''); + $sid = $this->getCaptchaSidFromForm(); + $this->assertFalse($this->drupalGetHeader('x-drupal-cache'), 'Cache is disabled'); + $this->drupalGet(''); + $this->assertNotEqual($sid, $this->getCaptchaSidFromForm()); + + // Switch challenge to captcha/Test, check the captcha isn't cached. + captcha_set_form_id_setting('user_login_form', 'captcha/Test'); + $this->drupalGet(''); + $sid = $this->getCaptchaSidFromForm(); + $this->assertFalse($this->drupalGetHeader('x-drupal-cache'), 'Cache is disabled'); + $this->drupalGet(''); + $this->assertNotEqual($sid, $this->getCaptchaSidFromForm()); + + // Switch challenge to image_captcha/Image, check the captcha isn't cached. + captcha_set_form_id_setting('user_login_form', 'image_captcha/Image'); + $this->drupalGet(''); + $image_path = $this->xpath('//div[@class="details-wrapper"]/img')[0]->getAttribute('src'); + $this->assertFalse($this->drupalGetHeader('x-drupal-cache'), 'Cache disabled'); + // Check that we get a new image when vising the page again. + $this->drupalGet(''); + $this->assertNotEqual($image_path, $this->xpath('//div[@class="details-wrapper"]/img')[0]->getAttribute('src')); + // Check image caching, remove the base path since drupalGet() expects the + // internal path. + $this->drupalGet(substr($image_path, strlen($base_path))); + $this->assertResponse(200); + // Request image twice to make sure no errors happen (due to page caching). + $this->drupalGet(substr($image_path, strlen($base_path))); + $this->assertResponse(200); + } + +} diff --git a/web/modules/captcha/tests/src/Functional/CaptchaCronTest.php b/web/modules/captcha/tests/src/Functional/CaptchaCronTest.php new file mode 100644 index 0000000000000000000000000000000000000000..6ac97281302f11222b192968a0a759c40f05637e --- /dev/null +++ b/web/modules/captcha/tests/src/Functional/CaptchaCronTest.php @@ -0,0 +1,97 @@ +<?php + +namespace Drupal\Tests\captcha\Functional; + +use Drupal\Core\Database\Database; +use Drupal\Tests\BrowserTestBase; + +/** + * Tests CAPTCHA cron. + * + * @group captcha + */ +class CaptchaCronTest extends BrowserTestBase { + + /** + * Modules to install for this Test class. + * + * @var array + */ + public static $modules = ['captcha']; + + /** + * Temporary captcha sessions storage. + * + * @var [int] + */ + public $captchaSessions; + + /** + * {@inheritdoc} + */ + public function setUp() { + parent::setUp(); + + // Get request time. + $request_time = \Drupal::time()->getRequestTime(); + + // Add removed session. + $time = $request_time - 1 - 60 * 60 * 24; + $this->captchaSessions['remove_sid'] = $this->addCaptchaSession('captcha_cron_test_remove', $time); + // Add remain session. + $this->captchaSessions['remain_sid'] = $this->addCaptchaSession('captcha_cron_test_remain', $request_time); + } + + /** + * Add test CAPTCHA session data. + * + * @param string $form_id + * Form id. + * @param int $request_time + * Timestamp. + * + * @return int + * CAPTCHA session id. + */ + public function addCaptchaSession($form_id, $request_time) { + // Initialize solution with random data. + $solution = hash('sha256', mt_rand()); + + // Insert an entry and thankfully receive the value + // of the autoincrement field 'csid'. + $connection = Database::getConnection(); + $captcha_sid = $connection->insert('captcha_sessions')->fields([ + 'uid' => 0, + 'sid' => session_id(), + 'ip_address' => \Drupal::request()->getClientIp(), + 'timestamp' => $request_time, + 'form_id' => $form_id, + 'solution' => $solution, + 'status' => 1, + 'attempts' => 0, + ])->execute(); + + return $captcha_sid; + } + + /** + * Test CAPTCHA cron. + */ + public function testCron() { + \Drupal::service('cron')->run(); + + $connection = Database::getConnection(); + $sids = $connection->select('captcha_sessions') + ->fields('captcha_sessions', ['csid']) + ->condition('csid', array_values($this->captchaSessions), 'IN') + ->execute() + ->fetchCol('csid'); + + // Test if CAPTCHA cron appropriately removes sessions older than a day. + $this->assertNotContains($this->captchaSessions['remove_sid'], $sids, 'CAPTCHA cron removes captcha session data older than 1 day.'); + + // Test if CAPTCHA cron appropriately keeps sessions younger than a day. + $this->assertContains($this->captchaSessions['remain_sid'], $sids, 'CAPTCHA cron does not remove captcha session data younger than 1 day.'); + } + +} diff --git a/web/modules/captcha/tests/src/Functional/CaptchaPersistenceTest.php b/web/modules/captcha/tests/src/Functional/CaptchaPersistenceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9755da90019e9c35444059541dfb5bc69026a9dc --- /dev/null +++ b/web/modules/captcha/tests/src/Functional/CaptchaPersistenceTest.php @@ -0,0 +1,217 @@ +<?php + +namespace Drupal\Tests\captcha\Functional; + +use Drupal\Core\StringTranslation\StringTranslationTrait; + +/** + * Tests CAPTCHA Persistence. + * + * @group captcha + */ +class CaptchaPersistenceTest extends CaptchaWebTestBase { + + use StringTranslationTrait; + + /** + * Set up the persistence and CAPTCHA settings. + * + * @param int $persistence + * The persistence value. + */ + private function setUpPersistence($persistence) { + $this->drupalLogin($this->adminUser); + // Set persistence. + $edit = ['persistence' => $persistence]; + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH, $edit, 'Save configuration'); + // Log admin out. + $this->drupalLogout(); + + // Set the Test123 CAPTCHA on user register and comment form. + // We have to do this with the function captcha_set_form_id_setting() + // (because the CATCHA admin form does not show the Test123 option). + // We also have to do this after all usage of the CAPTCHA admin form + // (because posting the CAPTCHA admin form would set the CAPTCHA to 'none'). + captcha_set_form_id_setting('user_login_form', 'captcha/Test'); + $this->drupalGet('user'); + $this->assertCaptchaPresence(TRUE); + captcha_set_form_id_setting('user_register_form', 'captcha/Test'); + $this->drupalGet('user/register'); + $this->assertCaptchaPresence(TRUE); + } + + /** + * Check if Captcha sid present in form. + * + * @param string $captcha_sid_initial + * Captcha SID token. + */ + protected function assertPreservedCsid($captcha_sid_initial) { + $captcha_sid = $this->getCaptchaSidFromForm(); + $this->assertEqual($captcha_sid_initial, $captcha_sid, + "CAPTCHA session ID should be preserved (expected: $captcha_sid_initial, found: $captcha_sid)."); + } + + /** + * Check if message about SID present. + * + * @param string $captcha_sid_initial + * Captcha SID token. + */ + protected function assertDifferentCsid($captcha_sid_initial) { + $captcha_sid = $this->getCaptchaSidFromForm(); + $this->assertNotEqual($captcha_sid_initial, $captcha_sid, "CAPTCHA session ID should be different."); + } + + /** + * Test persistence always. + */ + public function testPersistenceAlways() { + // Set up of persistence and CAPTCHAs. + $this->setUpPersistence(CAPTCHA_PERSISTENCE_SHOW_ALWAYS); + + // Go to login form and check if there is a CAPTCHA + // on the login form (look for the title). + $this->drupalGet('<front>'); + $this->assertCaptchaPresence(TRUE); + $captcha_sid_initial = $this->getCaptchaSidFromForm(); + + // Try to with wrong user name and password, but correct CAPTCHA. + $edit = [ + 'name' => 'foobar', + 'pass' => 'bazlaz', + 'captcha_response' => 'Test 123', + ]; + $this->drupalPostForm(NULL, $edit, $this->t('Log in'), [], self::LOGIN_HTML_FORM_ID); + // Check that there was no error message for the CAPTCHA. + $this->assertCaptchaResponseAccepted(); + + // Name and password were wrong, we should get an updated + // form with a fresh CAPTCHA. + $this->assertCaptchaPresence(TRUE); + $this->assertPreservedCsid($captcha_sid_initial); + + // Post from again. + $this->drupalPostForm(NULL, $edit, $this->t('Log in'), [], self::LOGIN_HTML_FORM_ID); + // Check that there was no error message for the CAPTCHA. + $this->assertCaptchaResponseAccepted(); + $this->assertPreservedCsid($captcha_sid_initial); + } + + /** + * Test persistence per form instance. + */ + public function testPersistencePerFormInstance() { + // Set up of persistence and CAPTCHAs. + $this->setUpPersistence(CAPTCHA_PERSISTENCE_SKIP_ONCE_SUCCESSFUL_PER_FORM_INSTANCE); + + // Go to login form and check if there is a CAPTCHA on the login form. + $this->drupalGet('<front>'); + $this->assertCaptchaPresence(TRUE); + $captcha_sid_initial = $this->getCaptchaSidFromForm(); + + // Try to with wrong user name and password, but correct CAPTCHA. + $edit = [ + 'name' => 'foobar', + 'pass' => 'bazlaz', + 'captcha_response' => 'Test 123', + ]; + $this->drupalPostForm(NULL, $edit, $this->t('Log in'), [], self::LOGIN_HTML_FORM_ID); + // Check that there was no error message for the CAPTCHA. + $this->assertCaptchaResponseAccepted(); + // There shouldn't be a CAPTCHA on the new form. + $this->assertCaptchaPresence(FALSE); + $this->assertPreservedCsid($captcha_sid_initial); + + // Start a new form instance/session. + $this->drupalGet('node'); + $this->drupalGet('user'); + $this->assertCaptchaPresence(TRUE); + $this->assertDifferentCsid($captcha_sid_initial); + + // Check another form. + $this->drupalGet('user/register'); + $this->assertCaptchaPresence(TRUE); + $this->assertDifferentCsid($captcha_sid_initial); + } + + /** + * Test Persistence per form type. + */ + public function testPersistencePerFormType() { + // Set up of persistence and CAPTCHAs. + $this->setUpPersistence(CAPTCHA_PERSISTENCE_SKIP_ONCE_SUCCESSFUL_PER_FORM_TYPE); + + // Go to login form and check if there is a CAPTCHA on the login form. + $this->drupalGet('<front>'); + $this->assertCaptchaPresence(TRUE); + $captcha_sid_initial = $this->getCaptchaSidFromForm(); + + // Try to with wrong user name and password, but correct CAPTCHA. + $edit = [ + 'name' => 'foobar', + 'pass' => 'bazlaz', + 'captcha_response' => 'Test 123', + ]; + $this->drupalPostForm(NULL, $edit, $this->t('Log in'), [], self::LOGIN_HTML_FORM_ID); + // Check that there was no error message for the CAPTCHA. + $this->assertCaptchaResponseAccepted(); + // There shouldn't be a CAPTCHA on the new form. + $this->assertCaptchaPresence(FALSE); + $this->assertPreservedCsid($captcha_sid_initial); + + // Start a new form instance/session. + $this->drupalGet('node'); + $this->drupalGet('user'); + $this->assertCaptchaPresence(FALSE); + $this->assertDifferentCsid($captcha_sid_initial); + + // Check another form. + /* @var \Drupal\captcha\Entity\CaptchaPoint $captcha_point */ + $captcha_point = \Drupal::entityTypeManager() + ->getStorage('captcha_point') + ->load('user_register_form'); + $captcha_point->enable()->save(); + $this->drupalGet('user/register'); + $this->assertCaptchaPresence(TRUE); + $this->assertDifferentCsid($captcha_sid_initial); + } + + /** + * Test Persistence "Only once". + */ + public function testPersistenceOnlyOnce() { + // Set up of persistence and CAPTCHAs. + $this->setUpPersistence(CAPTCHA_PERSISTENCE_SKIP_ONCE_SUCCESSFUL); + + // Go to login form and check if there is a CAPTCHA on the login form. + $this->drupalGet('<front>'); + $this->assertCaptchaPresence(TRUE); + $captcha_sid_initial = $this->getCaptchaSidFromForm(); + + // Try to with wrong user name and password, but correct CAPTCHA. + $edit = [ + 'name' => 'foobar', + 'pass' => 'bazlaz', + 'captcha_response' => 'Test 123', + ]; + $this->drupalPostForm(NULL, $edit, $this->t('Log in'), [], self::LOGIN_HTML_FORM_ID); + // Check that there was no error message for the CAPTCHA. + $this->assertCaptchaResponseAccepted(); + // There shouldn't be a CAPTCHA on the new form. + $this->assertCaptchaPresence(FALSE); + $this->assertPreservedCsid($captcha_sid_initial); + + // Start a new form instance/session. + $this->drupalGet('node'); + $this->drupalGet('user'); + $this->assertCaptchaPresence(FALSE); + $this->assertDifferentCsid($captcha_sid_initial); + + // Check another form. + $this->drupalGet('user/register'); + $this->assertCaptchaPresence(FALSE); + $this->assertDifferentCsid($captcha_sid_initial); + } + +} diff --git a/web/modules/captcha/tests/src/Functional/CaptchaTest.php b/web/modules/captcha/tests/src/Functional/CaptchaTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d28c54431dd491ed00ba5b73d5f4c24c01b8aa1a --- /dev/null +++ b/web/modules/captcha/tests/src/Functional/CaptchaTest.php @@ -0,0 +1,243 @@ +<?php + +namespace Drupal\Tests\captcha\Functional; + +/** + * Tests CAPTCHA main test case sensitivity. + * + * @group captcha + */ +class CaptchaTest extends CaptchaWebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['block', 'captcha_long_form_id_test']; + + /** + * Testing the protection of the user log in form. + */ + public function testCaptchaOnLoginForm() { + // Create user and test log in without CAPTCHA. + $user = $this->drupalCreateUser(); + $this->drupalLogin($user); + // Log out again. + $this->drupalLogout(); + + // Set a CAPTCHA on login form. + /* @var \Drupal\captcha\Entity\CaptchaPoint $captcha_point */ + $captcha_point = \Drupal::entityTypeManager() + ->getStorage('captcha_point') + ->load('user_login_form'); + $captcha_point->setCaptchaType('captcha/Math'); + $captcha_point->enable()->save(); + + // Check if there is a CAPTCHA on the login form (look for the title). + $this->drupalGet('user'); + $this->assertCaptchaPresence(TRUE); + + // Try to log in, which should fail. + $edit = [ + 'name' => $user->getDisplayName(), + 'pass' => $user->pass_raw, + 'captcha_response' => '?', + ]; + $this->drupalPostForm(NULL, $edit, t('Log in'), [], self::LOGIN_HTML_FORM_ID); + // Check for error message. + $this->assertText(self::CAPTCHA_WRONG_RESPONSE_ERROR_MESSAGE, 'CAPTCHA should block user login form', 'CAPTCHA'); + + // And make sure that user is not logged in: + // check for name and password fields on ?q=user. + $this->drupalGet('user'); + $this->assertField('name', t('Username field found.'), 'CAPTCHA'); + $this->assertField('pass', t('Password field found.'), 'CAPTCHA'); + } + + /** + * Assert function for testing if comment posting works as it should. + * + * Creates node with comment writing enabled, tries to post comment + * with given CAPTCHA response (caller should enable the desired + * challenge on page node comment forms) and checks if + * the result is as expected. + * + * @param string $captcha_response + * The response on the CAPTCHA. + * @param bool $should_pass + * Describing if the posting should pass or should be blocked. + * @param string $message + * To prefix to nested asserts. + */ + protected function assertCommentPosting($captcha_response, $should_pass, $message) { + // Make sure comments on pages can be saved directly without preview. + $this->container->get('state') + ->set('comment_preview_page', DRUPAL_OPTIONAL); + + // Create a node with comments enabled. + $node = $this->drupalCreateNode(); + + // Post comment on node. + $edit = $this->getCommentFormValues(); + $comment_subject = $edit['subject[0][value]']; + $comment_body = $edit['comment_body[0][value]']; + $edit['captcha_response'] = $captcha_response; + $this->drupalPostForm('comment/reply/node/' . $node->id() . '/comment', $edit, t('Save'), [], 'comment-form'); + + if ($should_pass) { + // There should be no error message. + $this->assertCaptchaResponseAccepted(); + // Get node page and check that comment shows up. + $this->drupalGet('node/' . $node->id()); + $this->assertText($comment_subject, $message . ' Comment should show up on node page.', 'CAPTCHA'); + $this->assertText($comment_body, $message . ' Comment should show up on node page.', 'CAPTCHA'); + } + else { + // Check for error message. + $this->assertText(self::CAPTCHA_WRONG_RESPONSE_ERROR_MESSAGE, $message . ' Comment submission should be blocked.', 'CAPTCHA'); + // Get node page and check that comment is not present. + $this->drupalGet('node/' . $node->id()); + $this->assertNoText($comment_subject, $message . ' Comment should not show up on node page.', 'CAPTCHA'); + $this->assertNoText($comment_body, $message . ' Comment should not show up on node page.', 'CAPTCHA'); + } + } + + /** + * Testing the case sensitive/insensitive validation. + */ + public function testCaseInsensitiveValidation() { + $config = $this->config('captcha.settings'); + // Set Test CAPTCHA on comment form. + captcha_set_form_id_setting(self::COMMENT_FORM_ID, 'captcha/Test'); + + // Log in as normal user. + $this->drupalLogin($this->normalUser); + + // Test case sensitive posting. + $config->set('default_validation', CAPTCHA_DEFAULT_VALIDATION_CASE_SENSITIVE); + $config->save(); + + $this->assertCommentPosting('Test 123', TRUE, 'Case sensitive validation of right casing.'); + $this->assertCommentPosting('test 123', FALSE, 'Case sensitive validation of wrong casing.'); + $this->assertCommentPosting('TEST 123', FALSE, 'Case sensitive validation of wrong casing.'); + + // Test case insensitive posting (the default). + $config->set('default_validation', CAPTCHA_DEFAULT_VALIDATION_CASE_INSENSITIVE); + $config->save(); + + $this->assertCommentPosting('Test 123', TRUE, 'Case insensitive validation of right casing.'); + $this->assertCommentPosting('test 123', TRUE, 'Case insensitive validation of wrong casing.'); + $this->assertCommentPosting('TEST 123', TRUE, 'Case insensitive validation of wrong casing.'); + } + + /** + * Test if the CAPTCHA description is only shown with challenge widgets. + * + * For example, when a comment is previewed with correct CAPTCHA answer, + * a challenge is generated and added to the form but removed in the + * pre_render phase. The CAPTCHA description should not show up either. + * + * @see testCaptchaSessionReuseOnNodeForms() + */ + public function testCaptchaDescriptionAfterCommentPreview() { + // Set Test CAPTCHA on comment form. + captcha_set_form_id_setting(self::COMMENT_FORM_ID, 'captcha/Test'); + + // Log in as normal user. + $this->drupalLogin($this->normalUser); + + // Create a node with comments enabled. + $node = $this->drupalCreateNode(); + + // Preview comment with correct CAPTCHA answer. + $edit = $this->getCommentFormValues(); + $edit['captcha_response'] = 'Test 123'; + $this->drupalPostForm('comment/reply/node/' . $node->id() . '/comment', $edit, t('Preview')); + + // Check that there is no CAPTCHA after preview. + $this->assertCaptchaPresence(FALSE); + } + + /** + * Test if the CAPTCHA session ID is reused when previewing nodes. + * + * Node preview after correct response should not show CAPTCHA anymore. + * The preview functionality of comments and nodes works + * slightly different under the hood. + * CAPTCHA module should be able to handle both. + * + * @see testCaptchaDescriptionAfterCommentPreview() + */ + public function testCaptchaSessionReuseOnNodeForms() { + // Set Test CAPTCHA on page form. + captcha_set_form_id_setting('node_page_form', 'captcha/Test'); + + // Log in as normal user. + $this->drupalLogin($this->normalUser); + + // Page settings to post, with correct CAPTCHA answer. + $edit = $this->getNodeFormValues(); + $edit['captcha_response'] = 'Test 123'; + $this->drupalGet('node/add/page'); + $this->drupalPostForm(NULL, $edit, t('Preview')); + + $this->assertCaptchaPresence(FALSE); + } + + /** + * CAPTCHA should be put on admin pages even if visitor has no access. + */ + public function testCaptchaOnLoginBlockOnAdminPagesIssue893810() { + // Set a CAPTCHA on login block form. + /* @var \Drupal\captcha\Entity\CaptchaPoint $captcha_point */ + $captcha_point = \Drupal::entityTypeManager() + ->getStorage('captcha_point') + ->load('user_login_form'); + $captcha_point->setCaptchaType('captcha/Math'); + $captcha_point->enable()->save(); + + // Enable the user login block. + $this->drupalPlaceBlock('user_login_block', ['id' => 'login']); + + // Check if there is a CAPTCHA on home page. + $this->drupalGet(''); + $this->assertCaptchaPresence(TRUE); + + // Check there is a CAPTCHA on "forbidden" admin pages. + $this->drupalGet('admin'); + $this->assertCaptchaPresence(TRUE); + } + + /** + * Test that forms with IDs exceeding 64 characters can be assigned captchas. + */ + public function testLongFormId() { + // We add the form manually so we can mimic the character + // truncation of the label field as formId. + $this->drupalLogin($this->adminUser); + $this->drupalGet(self::CAPTCHA_ADMIN_PATH); + + $label = 'this_formid_is_intentionally_longer_than_64_characters_to_test_captcha'; + // Truncated to 64 chars so it can be a machine name. + $formId = substr($label, 0, 64); + + $form_values = [ + 'label' => $label, + 'formId' => $formId, + 'captchaType' => 'captcha/Math', + ]; + + // Create intentionally long id Captcha Point. + $this->drupalPostForm(self::CAPTCHA_ADMIN_PATH . '/captcha-points/add', $form_values, t('Save')); + $this->assertRaw(t('Captcha Point for %label form was created.', ['%label' => $formId])); + + // We need to log out to test the captcha. + $this->drupalLogout(); + + // Navigate to the form with a >64 char id and confirm there is Captcha. + $this->drupalGet('captcha/test_form/long_id'); + $this->assertCaptchaPresence(TRUE); + } + +} diff --git a/web/modules/captcha/tests/src/Functional/CaptchaWebTestBase.php b/web/modules/captcha/tests/src/Functional/CaptchaWebTestBase.php new file mode 100644 index 0000000000000000000000000000000000000000..ba69163327156cbe90adfaa2961ec6543a8fb58a --- /dev/null +++ b/web/modules/captcha/tests/src/Functional/CaptchaWebTestBase.php @@ -0,0 +1,260 @@ +<?php + +namespace Drupal\Tests\captcha\Functional; + +use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface; +use Drupal\comment\Tests\CommentTestTrait; +use Drupal\Core\Session\AccountInterface; +use Drupal\field\Entity\FieldConfig; +use Drupal\Tests\BrowserTestBase; + +/** + * Base class for CAPTCHA tests. + * + * Provides common setup stuff and various helper functions. + */ +abstract class CaptchaWebTestBase extends BrowserTestBase { + + use CommentTestTrait; + + /** + * Wrong response error message. + */ + const CAPTCHA_WRONG_RESPONSE_ERROR_MESSAGE = 'The answer you entered for the CAPTCHA was not correct.'; + + /** + * Unknown CSID error message. + */ + const CAPTCHA_UNKNOWN_CSID_ERROR_MESSAGE = 'CAPTCHA validation error: unknown CAPTCHA session ID. Contact the site administrator if this problem persists.'; + + /** + * Form ID of comment form on standard (page) node. + */ + const COMMENT_FORM_ID = 'comment_comment_form'; + + const LOGIN_HTML_FORM_ID = 'user-login-form'; + + /** + * Drupal path of the (general) CAPTCHA admin page. + */ + const CAPTCHA_ADMIN_PATH = 'admin/config/people/captcha'; + + /** + * Modules to install for this Test class. + * + * @var array + */ + public static $modules = ['captcha', 'comment']; + + /** + * User with various administrative permissions. + * + * @var \Drupal\user\Entity\User + */ + protected $adminUser; + + /** + * Normal visitor with limited permissions. + * + * @var \Drupal\user\Entity\User + */ + protected $normalUser; + + /** + * {@inheritdoc} + */ + public function setUp() { + // Load two modules: the captcha module itself and the comment + // module for testing anonymous comments. + parent::setUp(); + module_load_include('inc', 'captcha'); + + $this->drupalCreateContentType(['type' => 'page']); + + // Create a normal user. + $permissions = [ + 'access comments', + 'post comments', + 'skip comment approval', + 'access content', + 'create page content', + 'edit own page content', + ]; + $this->normalUser = $this->drupalCreateUser($permissions); + + // Create an admin user. + $permissions[] = 'administer CAPTCHA settings'; + $permissions[] = 'skip CAPTCHA'; + $permissions[] = 'administer permissions'; + $permissions[] = 'administer content types'; + $this->adminUser = $this->drupalCreateUser($permissions); + + // Open comment for page content type. + $this->addDefaultCommentField('node', 'page'); + + // Put comments on page nodes on a separate page. + $comment_field = FieldConfig::loadByName('node', 'page', 'comment'); + $comment_field->setSetting('form_location', CommentItemInterface::FORM_SEPARATE_PAGE); + $comment_field->save(); + + /* @var \Drupal\captcha\Entity\CaptchaPoint $captcha_point */ + $captcha_point = \Drupal::entityTypeManager() + ->getStorage('captcha_point') + ->load('user_login_form'); + $captcha_point->enable()->save(); + $this->config('captcha.settings') + ->set('default_challenge', 'captcha/test') + ->save(); + } + + /** + * Assert that the response is accepted. + * + * No "unknown CSID" message, no "CSID reuse attack detection" message, + * No "wrong answer" message. + */ + protected function assertCaptchaResponseAccepted() { + // There should be no error message about unknown CAPTCHA session ID. + $this->assertNoText(self::CAPTCHA_UNKNOWN_CSID_ERROR_MESSAGE, + 'CAPTCHA response should be accepted (known CSID).', + 'CAPTCHA' + ); + // There should be no error message about wrong response. + $this->assertNoText(self::CAPTCHA_WRONG_RESPONSE_ERROR_MESSAGE, + 'CAPTCHA response should be accepted (correct response).', + 'CAPTCHA' + ); + } + + /** + * Assert that there is a CAPTCHA on the form or not. + * + * @param bool $presence + * Whether there should be a CAPTCHA or not. + */ + protected function assertCaptchaPresence($presence) { + if ($presence) { + $this->assertText(_captcha_get_description(), + 'There should be a CAPTCHA on the form.', 'CAPTCHA' + ); + } + else { + $this->assertNoText(_captcha_get_description(), + 'There should be no CAPTCHA on the form.', 'CAPTCHA' + ); + } + } + + /** + * Helper function to generate a form values array for comment forms. + */ + protected function getCommentFormValues() { + $edit = [ + 'subject[0][value]' => 'comment_subject ' . $this->randomMachineName(32), + 'comment_body[0][value]' => 'comment_body ' . $this->randomMachineName(256), + ]; + + return $edit; + } + + /** + * Helper function to generate a form values array for node forms. + */ + protected function getNodeFormValues() { + $edit = [ + 'title[0][value]' => 'node_title ' . $this->randomMachineName(32), + 'body[0][value]' => 'node_body ' . $this->randomMachineName(256), + ]; + + return $edit; + } + + /** + * Get the CAPTCHA session id from the current form in the browser. + * + * @param null|string $form_html_id + * HTML form id attribute. + * + * @return int + * Captcha SID integer. + */ + protected function getCaptchaSidFromForm($form_html_id = NULL) { + if (!$form_html_id) { + $elements = $this->xpath('//input[@name="captcha_sid"]'); + } + else { + $elements = $this->xpath('//form[@id="' . $form_html_id . '"]//input[@name="captcha_sid"]'); + } + + $element = current($elements); + $captcha_sid = (int) $element->getValue(); + + return $captcha_sid; + } + + /** + * Get the CAPTCHA token from the current form in the browser. + * + * @param null|string $form_html_id + * HTML form id attribute. + * + * @return int + * Captcha token integer. + */ + protected function getCaptchaTokenFromForm($form_html_id = NULL) { + if (!$form_html_id) { + $elements = $this->xpath('//input[@name="captcha_token"]'); + } + else { + $elements = $this->xpath('//form[@id="' . $form_html_id . '"]//input[@name="captcha_token"]'); + } + $element = current($elements); + $captcha_token = (int) $element->getValue(); + + return $captcha_token; + } + + /** + * Get the solution of the math CAPTCHA from the current form in the browser. + * + * @param null|string $form_html_id + * HTML form id attribute. + * + * @return int + * Calculated Math solution. + */ + protected function getMathCaptchaSolutionFromForm($form_html_id = NULL) { + // Get the math challenge. + if (!$form_html_id) { + $elements = $this->xpath('//div[contains(@class, "form-item-captcha-response")]/span[@class="field-prefix"]'); + } + else { + $elements = $this->xpath('//form[@id="' . $form_html_id . '"]//div[contains(@class, "form-item-captcha-response")]/span[@class="field-prefix"]'); + } + $this->assert('pass', json_encode($elements)); + $challenge = (string) $elements[0]; + $this->assert('pass', $challenge); + // Extract terms and operator from challenge. + $matches = []; + preg_match('/\\s*(\\d+)\\s*(-|\\+)\\s*(\\d+)\\s*=\\s*/', $challenge, $matches); + // Solve the challenge. + $a = (int) $matches[1]; + $b = (int) $matches[3]; + $solution = $matches[2] == '-' ? $a - $b : $a + $b; + + return $solution; + } + + /** + * Helper function to allow comment posting for anonymous users. + */ + protected function allowCommentPostingForAnonymousVisitors() { + // Enable anonymous comments. + user_role_grant_permissions(AccountInterface::ANONYMOUS_ROLE, [ + 'access comments', + 'post comments', + 'skip comment approval', + ]); + } + +} diff --git a/web/modules/captcha/tests/src/Unit/Controller/CaptchaPointListBuilderTest.php b/web/modules/captcha/tests/src/Unit/Controller/CaptchaPointListBuilderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..840b6b52aee0a68dc566436149acfd355f579238 --- /dev/null +++ b/web/modules/captcha/tests/src/Unit/Controller/CaptchaPointListBuilderTest.php @@ -0,0 +1,68 @@ +<?php + +namespace Drupal\Tests\captcha\Unit\Controller; + +use Drupal\captcha\Entity\CaptchaPoint; +use Drupal\captcha\Entity\Controller\CaptchaPointListBuilder; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Tests\UnitTestCase; +use Prophecy\Argument; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Tests for CaptchaPointListBuilder. + * + * @group captcha + */ +class CaptchaPointListBuilderTest extends UnitTestCase { + + /** + * Set up. + */ + public function setUp() { + $this->mockModuleHandler = $this->prophesize(ModuleHandlerInterface::class); + $this->mockModuleHandler->invokeAll(Argument::any(), Argument::any())->willReturn([]); + $this->mockModuleHandler->alter(Argument::any(), Argument::any(), Argument::any())->willReturn([]); + + $this->mockContainer = $this->prophesize(ContainerInterface::class); + $this->mockContainer->get('string_translation')->willReturn($this->getStringTranslationStub()); + $this->mockContainer->get('module_handler')->willReturn($this->mockModuleHandler->reveal()); + + $this->mockEntityType = $this->prophesize(EntityTypeInterface::class); + $this->mockEntityStorage = $this->prophesize(EntityStorageInterface::class); + $this->listBuilder = new CaptchaPointListBuilder($this->mockEntityType->reveal(), $this->mockEntityStorage->reveal()); + + \Drupal::setContainer($this->mockContainer->reveal()); + } + + /** + * Test for buildHeader. + */ + public function testBuildHeader() { + $header = $this->listBuilder->buildHeader(); + $this->assertArrayHasKey('form_id', $header); + $this->assertArrayHasKey('captcha_type', $header); + $this->assertArrayHasKey('operations', $header); + } + + /** + * Test for buildRow. + */ + public function testBuildRow() { + $mockEntity = $this->prophesize(CaptchaPoint::class); + $mockEntity->access(Argument::any())->willReturn(FALSE); + $mockEntity->id()->willReturn('target_form_id'); + $mockEntity->getCaptchaType()->willReturn('captcha_type'); + + $row = $this->listBuilder->buildRow($mockEntity->reveal()); + + $this->assertArrayHasKey('form_id', $row); + $this->assertEquals('target_form_id', $row['form_id']); + + $this->assertArrayHasKey('captcha_type', $row); + $this->assertEquals('captcha_type', $row['captcha_type']); + } + +} diff --git a/web/modules/migrate_devel/src/Plugin/migrate/process/Debug.php b/web/modules/migrate_devel/src/Plugin/migrate/process/Debug.php new file mode 100644 index 0000000000000000000000000000000000000000..d7cab35808d350b36b9c6e390ddf2f602201dcbd --- /dev/null +++ b/web/modules/migrate_devel/src/Plugin/migrate/process/Debug.php @@ -0,0 +1,83 @@ +<?php + +namespace Drupal\migrate_devel\Plugin\migrate\process; + +use Drupal\migrate\ProcessPluginBase; +use Drupal\migrate\MigrateExecutableInterface; +use Drupal\migrate\Row; + +/** + * Debug the process pipeline. + * + * Prints the input value, assuming that you are running the migration from the + * command line, and sends it to the next step in the pipeline unaltered. + * + * Available configuration keys: + * - label: (optional) a string to print before the debug output. Include any + * trailing punctuation or space characters. + * - multiple: (optional) set to TRUE to ask the next step in the process + * pipeline to process array values individually, like the multiple_values + * plugin from the Migrate Plus module. + * + * Examples: + * + * @code + * process: + * field_tricky: + * - + * plugin: debug + * source: whatever + * - + * plugin: next + * @endcode + * + * This will print the source before passing it to the next plugin. + * + * @code + * process: + * field_tricky: + * - + * plugin: debug + * source: whatever + * label: 'Step 1: ' + * multiple: true + * - + * plugin: next + * @endcode + * + * This does the same thing, but ensures that the next plugin will be called + * once for each item in the source, if the source is an array. + * It will also print "Debug Step 1: " before printing the source. + * + * @see \Drupal\migrate\Plugin\MigrateProcessInterface + * + * @MigrateProcessPlugin( + * id = "debug", + * handle_multiples = TRUE + * ) + */ +class Debug extends ProcessPluginBase { + + /** + * {@inheritdoc} + */ + public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { + if (isset($this->configuration['label'])) { + print_r($this->configuration['label']); + } + print_r($value); + if (!is_array($value)) { + print_r(PHP_EOL); + } + + return $value; + } + + /** + * {@inheritdoc} + */ + public function multiple() { + return !empty($this->configuration['multiple']); + } + +}