diff --git a/.gitignore b/.gitignore index 77d394441..ddab4e4a3 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ tests/_support/_generated/* tests/cache/* tests/error.log /crowdin.yaml +.vscode diff --git a/CHANGELOG.md b/CHANGELOG.md index da183e2e8..4764d2214 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,16 @@ +# v1.10.34 +## 06/22/2022 + +1. [](#improved) + * Exposed `UriToMarkdown` util (`Grav.default.Utils.UriToMarkdown`) in admin, to convert links/images +1. [](#bugfix) + * Fixed `Latest Page Updates` permissions [#2294](https://github.com/getgrav/grav-plugin-admin/pull/2294) + # v1.10.33.1 ## 04/25/2022 1. [](#bugfix) - * Reverted [PR#2265](https://github.com/getgrav/grav-plugin-admin/pull/2265) as it broke sections output. + * Reverted [PR#2265](https://github.com/getgrav/grav-plugin-admin/pull/2265) as it broke sections output # v1.10.33 ## 04/25/2022 diff --git a/blueprints.yaml b/blueprints.yaml index 4c7caa814..f15df94e2 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,7 +1,7 @@ name: Admin Panel slug: admin type: plugin -version: 1.10.33.1 +version: 1.10.34 description: Adds an advanced administration panel to manage your site icon: empire author: diff --git a/composer.lock b/composer.lock index 20272f7f6..4b74cde36 100644 --- a/composer.lock +++ b/composer.lock @@ -190,16 +190,16 @@ }, { "name": "scssphp/scssphp", - "version": "v1.10.2", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/scssphp/scssphp.git", - "reference": "387f4f4abf5d99f16be16314c5ab856f81c82f46" + "reference": "0f1e1516ed2412ad43e42a6a319e77624ba1f713" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/387f4f4abf5d99f16be16314c5ab856f81c82f46", - "reference": "387f4f4abf5d99f16be16314c5ab856f81c82f46", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/0f1e1516ed2412ad43e42a6a319e77624ba1f713", + "reference": "0f1e1516ed2412ad43e42a6a319e77624ba1f713", "shasum": "" }, "require": { @@ -258,9 +258,9 @@ ], "support": { "issues": "https://github.com/scssphp/scssphp/issues", - "source": "https://github.com/scssphp/scssphp/tree/v1.10.2" + "source": "https://github.com/scssphp/scssphp/tree/v1.10.3" }, - "time": "2022-03-02T21:15:09+00:00" + "time": "2022-05-16T07:22:18+00:00" } ], "packages-dev": [ @@ -425,16 +425,16 @@ }, { "name": "codeception/phpunit-wrapper", - "version": "7.8.2", + "version": "7.8.4", "source": { "type": "git", "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "cafed18048826790c527843f9b85e8cc79b866f1" + "reference": "dd44fc152433d27d3de03d59b4945449b3407af0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/cafed18048826790c527843f9b85e8cc79b866f1", - "reference": "cafed18048826790c527843f9b85e8cc79b866f1", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/dd44fc152433d27d3de03d59b4945449b3407af0", + "reference": "dd44fc152433d27d3de03d59b4945449b3407af0", "shasum": "" }, "require": { @@ -466,9 +466,9 @@ "description": "PHPUnit classes used by Codeception", "support": { "issues": "https://github.com/Codeception/phpunit-wrapper/issues", - "source": "https://github.com/Codeception/phpunit-wrapper/tree/7.8.2" + "source": "https://github.com/Codeception/phpunit-wrapper/tree/7.8.4" }, - "time": "2020-12-28T14:00:26+00:00" + "time": "2022-05-23T06:09:22+00:00" }, { "name": "codeception/stub", @@ -697,16 +697,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "version": "6.5.7", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "reference": "724562fa861e21a4071c652c8a159934e4f05592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/724562fa861e21a4071c652c8a159934e4f05592", + "reference": "724562fa861e21a4071c652c8a159934e4f05592", "shasum": "" }, "require": { @@ -743,10 +743,40 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", @@ -762,9 +792,23 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" + "source": "https://github.com/guzzle/guzzle/tree/6.5.7" }, - "time": "2020-06-16T21:01:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-09T21:36:50+00:00" }, { "name": "guzzlehttp/promises", @@ -1241,16 +1285,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -1285,9 +1329,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", @@ -2618,16 +2662,16 @@ }, { "name": "symfony/console", - "version": "v4.4.38", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5a50085bf5460f0c0d60a50b58388c1249826b8a" + "reference": "cce7a9f99e22937a71a16b23afa762558808d587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5a50085bf5460f0c0d60a50b58388c1249826b8a", - "reference": "5a50085bf5460f0c0d60a50b58388c1249826b8a", + "url": "https://api.github.com/repos/symfony/console/zipball/cce7a9f99e22937a71a16b23afa762558808d587", + "reference": "cce7a9f99e22937a71a16b23afa762558808d587", "shasum": "" }, "require": { @@ -2688,7 +2732,7 @@ "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/console/tree/v4.4.38" + "source": "https://github.com/symfony/console/tree/v4.4.42" }, "funding": [ { @@ -2704,7 +2748,7 @@ "type": "tidelift" } ], - "time": "2022-01-30T21:23:57+00:00" + "time": "2022-05-14T12:35:33+00:00" }, { "name": "symfony/css-selector", @@ -2774,16 +2818,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -2821,7 +2865,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" }, "funding": [ { @@ -2837,20 +2881,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.39", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "4e9215a8b533802ba84a3cc5bd3c43103e7a6dc3" + "reference": "be5a04618e5d44e71d013f177df80d3ec4b192a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4e9215a8b533802ba84a3cc5bd3c43103e7a6dc3", - "reference": "4e9215a8b533802ba84a3cc5bd3c43103e7a6dc3", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/be5a04618e5d44e71d013f177df80d3ec4b192a0", + "reference": "be5a04618e5d44e71d013f177df80d3ec4b192a0", "shasum": "" }, "require": { @@ -2895,7 +2939,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.39" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.42" }, "funding": [ { @@ -2911,20 +2955,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T10:38:15+00:00" + "time": "2022-04-30T18:34:00+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.37", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc" + "reference": "708e761740c16b02c86e3f0c932018a06b895d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ccfcfb96ecce1217d7b0875a0736976bc6e63dc", - "reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/708e761740c16b02c86e3f0c932018a06b895d40", + "reference": "708e761740c16b02c86e3f0c932018a06b895d40", "shasum": "" }, "require": { @@ -2979,7 +3023,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.37" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.42" }, "funding": [ { @@ -2995,20 +3039,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-05-05T15:33:49+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.11", + "version": "v1.1.12", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "01e9a4efac0ee33a05dfdf93b346f62e7d0e998c" + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/01e9a4efac0ee33a05dfdf93b346f62e7d0e998c", - "reference": "01e9a4efac0ee33a05dfdf93b346f62e7d0e998c", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", "shasum": "" }, "require": { @@ -3058,7 +3102,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.11" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.12" }, "funding": [ { @@ -3074,20 +3118,20 @@ "type": "tidelift" } ], - "time": "2021-03-23T15:25:38+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { "name": "symfony/finder", - "version": "v4.4.37", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b17d76d7ed179f017aad646e858c90a2771af15d" + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b17d76d7ed179f017aad646e858c90a2771af15d", - "reference": "b17d76d7ed179f017aad646e858c90a2771af15d", + "url": "https://api.github.com/repos/symfony/finder/zipball/40790bdf293b462798882ef6da72bb49a4a6633a", + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a", "shasum": "" }, "require": { @@ -3120,7 +3164,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.37" + "source": "https://github.com/symfony/finder/tree/v4.4.41" }, "funding": [ { @@ -3136,20 +3180,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-04-14T15:36:10+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -3164,7 +3208,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3202,7 +3246,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -3218,20 +3262,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -3245,7 +3289,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3289,7 +3333,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -3305,20 +3349,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -3330,7 +3374,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3373,7 +3417,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -3389,20 +3433,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -3417,7 +3461,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3456,7 +3500,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -3472,20 +3516,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -3494,7 +3538,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3539,7 +3583,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -3555,20 +3599,20 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/process", - "version": "v4.4.37", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67" + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b2d924e5a4cb284f293d5092b1dbf0d364cb8b67", - "reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67", + "url": "https://api.github.com/repos/symfony/process/zipball/9eedd60225506d56e42210a70c21bb80ca8456ce", + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce", "shasum": "" }, "require": { @@ -3601,7 +3645,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v4.4.37" + "source": "https://github.com/symfony/process/tree/v4.4.41" }, "funding": [ { @@ -3617,26 +3661,26 @@ "type": "tidelift" } ], - "time": "2022-01-27T17:14:04+00:00" + "time": "2022-04-04T10:19:07+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -3684,7 +3728,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -3700,7 +3744,7 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/yaml", @@ -3825,21 +3869,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -3877,9 +3921,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], diff --git a/languages/en.yaml b/languages/en.yaml index 3d82bcdfc..87ebb0c64 100644 --- a/languages/en.yaml +++ b/languages/en.yaml @@ -454,8 +454,11 @@ PLUGIN_ADMIN: IMAGES_DEBUG_HELP: "Show an overlay over images indicating the pixel depth of the image when working with retina for example" IMAGES_LOADING: "Image loading behavior" IMAGES_LOADING_HELP: "The loading attribute allows a browser to defer loading offscreen images and iframes until users scroll near them. loading supports three values: auto, lazy, eager" + + # Removed in Grav 1.8 IMAGES_SEOFRIENDLY: "SEO-Friendly Image names" IMAGES_SEOFRIENDLY_HELP: "When enabled, the image name is displayed first, then a smaller hash to reflect processed operations" + UPLOAD_LIMIT: "File upload limit" UPLOAD_LIMIT_HELP: "Set maximum upload size in bytes (0 is unlimited)" ENABLE_MEDIA_TIMESTAMP: "Enable timestamps on media" @@ -1142,3 +1145,7 @@ PLUGIN_ADMIN: AVATAR: "Avatar Generator" AVATAR_HELP: "Multiavatar is a locally generated avatar. Gravatar is an external service that uses your email address to pull a preconfigured Avatar remotely" AVATAR_HASH: "NOTE: Optional Avatar custom 'hash' string" + IMAGES_TITLE: "Images" + LEGACY_MEDIA_MUTATION: "Legacy Media Manipulation Compatibility" + LEGACY_MEDIA_MUTATION_HELP: "Enable this setting only if image manipulation broke after Grav update." + BACKWARD_COMPATIBILITY: "Backward Compatibility" diff --git a/themes/grav/app/main.js b/themes/grav/app/main.js index 820c35d80..6edfca996 100644 --- a/themes/grav/app/main.js +++ b/themes/grav/app/main.js @@ -4,6 +4,7 @@ import '@babel/polyfill'; import $ from 'jquery'; import './utils/remodal'; import 'simplebar/dist/simplebar.min.js'; +import { UriToMarkdown } from './forms/fields/files.js'; import GPM, { Instance as gpm } from './utils/gpm'; import KeepAlive from './utils/keepalive'; import Updates, { Instance as updates, Notifications, Feed } from './updates'; @@ -68,5 +69,5 @@ export default { Instance: MediaFilterInstance }, Scrollbar: { Scrollbar: { deprecated: true }, Instance: { deprecated: true } }, - Utils: { request, toastr, Cookies } + Utils: { request, toastr, Cookies, UriToMarkdown } }; diff --git a/themes/grav/js/admin.min.js b/themes/grav/js/admin.min.js index a5583badf..3da9f860e 100644 --- a/themes/grav/js/admin.min.js +++ b/themes/grav/js/admin.min.js @@ -711,6 +711,9 @@ var external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery }); // EXTERNAL MODULE: ./node_modules/simplebar/dist/simplebar.min.js var simplebar_min = __webpack_require__(85766); +// EXTERNAL MODULE: ./node_modules/dropzone/dist/dropzone.js +var dist_dropzone = __webpack_require__(32025); +var dropzone_default = /*#__PURE__*/__webpack_require__.n(dist_dropzone); // EXTERNAL MODULE: ./node_modules/toastr/toastr.js var toastr = __webpack_require__(8901); var toastr_default = /*#__PURE__*/__webpack_require__.n(toastr); @@ -847,191 +850,6 @@ function userFeedbackError(error) { external_jQuery_default()(__webpack_require__.g).on('beforeunload._ajax', function () { UNLOADING = true; }); -// EXTERNAL MODULE: ./node_modules/events/events.js -var events = __webpack_require__(17187); -var events_default = /*#__PURE__*/__webpack_require__.n(events); -;// CONCATENATED MODULE: ./app/utils/gpm.js -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - - - - -var GPM = /*#__PURE__*/function (_EventEmitter) { - _inherits(GPM, _EventEmitter); - - var _super = _createSuper(GPM); - - function GPM() { - var _this; - - var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; - - _classCallCheck(this, GPM); - - _this = _super.call(this); - _this.payload = {}; - _this.raw = {}; - _this.action = action; - return _this; - } - - _createClass(GPM, [{ - key: "setPayload", - value: function setPayload() { - var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - this.payload = payload; - this.emit('payload', payload); - return this; - } - }, { - key: "setAction", - value: function setAction() { - var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; - this.action = action; - this.emit('action', action); - return this; - } - }, { - key: "fetch", - value: function (_fetch) { - function fetch() { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function () { - var _this2 = this; - - var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { - return true; - }; - var flush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var data = new FormData(); - data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - - if (flush) { - data.append('flush', true); - } - - this.emit('fetching', this); - fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getUpdates"), { - credentials: 'same-origin', - method: 'post', - body: data - }).then(function (response) { - _this2.raw = response; - return response; - }).then(parseStatus).then(parseJSON).then(function (response) { - return _this2.response(response); - }).then(function (response) { - return callback(response, _this2.raw); - }).then(function (response) { - return _this2.emit('fetched', _this2.payload, _this2.raw, _this2); - })["catch"](userFeedbackError); - }) - }, { - key: "response", - value: function response(_response) { - this.payload = _response; - return _response; - } - }]); - - return GPM; -}((events_default())); - - -var Instance = new GPM(); -;// CONCATENATED MODULE: ./app/utils/keepalive.js -function keepalive_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function keepalive_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function keepalive_createClass(Constructor, protoProps, staticProps) { if (protoProps) keepalive_defineProperties(Constructor.prototype, protoProps); if (staticProps) keepalive_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var MAX_SAFE_DELAY = 2147483647; - -var KeepAlive = /*#__PURE__*/function () { - function KeepAlive() { - keepalive_classCallCheck(this, KeepAlive); - - this.active = false; - } - - keepalive_createClass(KeepAlive, [{ - key: "start", - value: function start() { - var _this = this; - - var timeout = external_GravAdmin_namespaceObject.config.admin_timeout / 1.5 * 1000; - this.timer = setInterval(function () { - return _this.fetch(); - }, Math.min(timeout, MAX_SAFE_DELAY)); - this.active = true; - } - }, { - key: "stop", - value: function stop() { - clearInterval(this.timer); - this.active = false; - } - }, { - key: "fetch", - value: function (_fetch) { - function fetch() { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function () { - var data = new FormData(); - data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "keepAlive"), { - credentials: 'same-origin', - method: 'post', - body: data - })["catch"](userFeedbackError); - }) - }]); - - return KeepAlive; -}(); - -/* harmony default export */ const keepalive = (new KeepAlive()); -// EXTERNAL MODULE: ./node_modules/mout/array/unique.js -var unique = __webpack_require__(79863); -var unique_default = /*#__PURE__*/__webpack_require__.n(unique); ;// CONCATENATED MODULE: ./app/utils/request.js @@ -1074,2196 +892,2378 @@ var request = function request(url) { }; /* harmony default export */ const utils_request = (request); -;// CONCATENATED MODULE: ./app/updates/notifications.js -function notifications_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +;// CONCATENATED MODULE: ./app/forms/fields/files.js +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function notifications_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -function notifications_createClass(Constructor, protoProps, staticProps) { if (protoProps) notifications_defineProperties(Constructor.prototype, protoProps); if (staticProps) notifications_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + // import EXIF from 'exif-js'; + // translations -var canFetchNotifications = function canFetchNotifications() { - return external_GravAdmin_namespaceObject.config.notifications.enabled; +var Dictionary = { + dictCancelUpload: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD, + dictCancelUploadConfirmation: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD_CONFIRMATION, + dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_DEFAULT_MESSAGE, + dictFallbackMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_MESSAGE, + dictFallbackText: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_TEXT, + dictFileTooBig: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FILE_TOO_BIG, + dictInvalidFileType: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_INVALID_FILE_TYPE, + dictMaxFilesExceeded: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_MAX_FILES_EXCEEDED, + dictRemoveFile: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_REMOVE_FILE, + dictResponseError: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_RESPONSE_ERROR }; +(dropzone_default()).autoDiscover = false; +(dropzone_default()).options.gravPageDropzone = {}; -var notificationsFilters = function notificationsFilters() { - return external_GravAdmin_namespaceObject.config.notifications.filters; -}; +(dropzone_default()).confirm = function (question, accepted, rejected) { + var doc = external_jQuery_default()(document); + var modalSelector = '[data-remodal-id="delete-media"]'; -var Notifications = /*#__PURE__*/function () { - function Notifications() { - notifications_classCallCheck(this, Notifications); - } + var removeEvents = function removeEvents() { + doc.off('confirmation', modalSelector, accept); + doc.off('cancellation', modalSelector, reject); + external_jQuery_default()(modalSelector).find('.remodal-confirm').removeClass('pointer-events-disabled'); + }; - notifications_createClass(Notifications, [{ - key: "fetch", - value: // Grav.default.Notifications.fetch() - function fetch() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref$filter = _ref.filter, - filter = _ref$filter === void 0 ? notificationsFilters() : _ref$filter, - _ref$refresh = _ref.refresh, - refresh = _ref$refresh === void 0 ? false : _ref$refresh; + var accept = function accept() { + accepted && accepted(); + removeEvents(); + }; - if (!canFetchNotifications()) { - return false; - } + var reject = function reject() { + rejected && rejected(); + removeEvents(); + }; - var feed = external_jQuery_default()('#notifications'); - var loader = feed.find('.widget-loader'); - var content = feed.find('.widget-content > ul'); - loader.find('div').remove(); - loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); - loader.show(); - content.hide(); + (external_jQuery_default()).remodal.lookup[external_jQuery_default()(modalSelector).data('remodal')].open(); + doc.on('confirmation', modalSelector, accept); + doc.on('cancellation', modalSelector, reject); +}; - var processNotifications = function processNotifications(response) { - var notifications = response.notifications; - external_jQuery_default()('#notifications').find('.widget-content > ul').empty(); - - if (notifications) { - Object.keys(notifications).forEach(function (location) { - return Notifications.processLocation(location, notifications[location]); - }); - } - }; +var DropzoneMediaConfig = { + timeout: 0, + thumbnailWidth: 200, + thumbnailHeight: 150, + addRemoveLinks: false, + dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROP_FILES_HERE_TO_UPLOAD.replace(/</g, '<').replace(/>/g, '>'), + dictRemoveFileConfirmation: '[placeholder]', + previewTemplate: "\n
".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD, " {{fileName}}
\n").concat(response.message, "") + }); + } + }, { + key: "onDropzoneComplete", + value: function onDropzoneComplete(file) { + if (!file.accepted && !file.rejected) { + var data = { + status: 'error', + message: "".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_UNSUPPORTED, ": ").concat(file.name.match(/\..+/).join('')) + }; + return this.handleError({ + file: file, + data: data, + mode: 'removeFile', + msg: "
".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_ADD, " {{fileName}}
\n").concat(data.message, "") + }); + } - if (!this.data || this.data.error || _refresh) { - this.fetch(_refresh, this.updateContent.bind(this)); - } else { - this.updateContent(); + if (this.options.reloadPage) { + __webpack_require__.g.location.reload(); } } }, { - key: "updateContent", - value: function updateContent() { - var feed = external_jQuery_default()('#news-feed .widget-content'); + key: "b64_to_utf8", + value: function b64_to_utf8(str) { + str = str.replace(/\s/g, ''); + return decodeURIComponent(escape(window.atob(str))); + } + }, { + key: "onDropzoneAddedFile", + value: function onDropzoneAddedFile(file) { + return this.dropzone.options.addedfile(file); + } + }, { + key: "onDropzoneRemovedFile", + value: function onDropzoneRemovedFile(file) { + var _this5 = this; - if (!feed.length) { + if (!file.accepted || file.rejected) { return; } - var loader = feed.find('.widget-loader').hide(); - var content = feed.find('> ul').empty().show(); + var url = file.removeUrl || this.urls["delete"] || this.options.url; + var path = (url || '').match(/path:(.*)\//); + var body = { + filename: file.name, + uri: this.getURI() + }; - if (this.data.error || this.data.status === 'error') { - loader.show().find('div').remove(); - loader.find('.fa-refresh').removeClass('fa-refresh fa-spin').addClass('fa-warning'); - loader.append("
".concat(message, "") + }); + } + }, { + key: "handleError", + value: function handleError(options) { + var file = options.file, + data = options.data, + mode = options.mode, + msg = options.msg; - // Check for updates trigger + if (data.status !== 'error' && data.status !== 'unauthorized') { + return; + } -external_jQuery_default()('[data-gpm-checkupdates]').on('click', function () { - var element = external_jQuery_default()(this); - element.find('i').addClass('fa-spin'); - Instance.fetch(function (response) { - element.find('i').removeClass('fa-spin'); - var payload = response.payload; + switch (mode) { + case 'addBack': + if (file instanceof File) { + this.dropzone.addFile.call(this.dropzone, file); + } else { + this.dropzone.files.push(file); + this.dropzone.options.addedfile.call(this.dropzone, file); + this.dropzone.options.thumbnail.call(this.dropzone, file, file.extras.url); + } - if (!payload) { - return; - } + break; - if (!payload.grav.isUpdatable && !payload.resources.total) { - utils_toastr.success(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.EVERYTHING_UP_TO_DATE); - } else { - var grav = payload.grav.isUpdatable ? 'Grav v' + payload.grav.available : ''; - var resources = payload.resources.total ? payload.resources.total + ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATES_ARE_AVAILABLE : ''; + case 'removeFile': + default: + if (~this.dropzone.files.indexOf(file)) { + file.rejected = true; + this.dropzone.removeFile.call(this.dropzone, file, { + silent: true + }); + } - if (!resources) { - grav += ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_AVAILABLE_FOR_UPDATE; + break; } - utils_toastr.info(grav + (grav && resources ? ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.AND + ' ' : '') + resources); + var modal = external_jQuery_default()('[data-remodal-id="generic"]'); + var cleanName = file.name.replace('<', '<').replace('>', '>'); + modal.find('.error-content').html(msg.replace('{{fileName}}', cleanName)); + (external_jQuery_default()).remodal.lookup[modal.data('remodal')].open(); } - }, true); -}); -;// CONCATENATED MODULE: ./app/utils/formatbytes.js -var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; -function formatBytes(bytes, decimals) { - if (bytes === 0) return '0 Byte'; - var k = 1000; - var value = Math.floor(Math.log(bytes) / Math.log(k)); - var decimal = decimals + 1 || 3; - return (bytes / Math.pow(k, value)).toPrecision(decimal) + ' ' + sizes[value]; -} -;// CONCATENATED MODULE: ./app/updates/update.js - + }]); + return FilesField; +}(); - // Dashboard update and Grav update +function UriToMarkdown(uri) { + uri = uri.replace(/@3x|@2x|@1x/, ''); + uri = uri.replace(/\(/g, '%28'); + uri = uri.replace(/\)/g, '%29'); + var title = uri.split('.').slice(0, -1).join('.'); + return uri.match(/\.(jpe?g|png|gif|svg|webp|mp4|webm|ogv|mov)$/i) ? ".concat(uri, " \"").concat(title, "\")") : "[".concat(decodeURI(uri), "](").concat(uri, ")"); +} +var instances = []; +var cache = external_jQuery_default()(); -external_jQuery_default()(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', function () { - var element = external_jQuery_default()('#grav-update-button'); - element.html("".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, " ").concat(formatBytes(updates_Instance.payload.grav.assets["grav-update"].size), "..")); - element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin'); - utils_request(updates_Instance.updateURL, function (response) { - if (response.type === 'updategrav') { - external_jQuery_default()('[data-gpm-grav]').remove(); - external_jQuery_default()('#footer .grav-version').html(response.version); - } +var onAddedNodes = function onAddedNodes(event, target +/* , record, instance */ +) { + var files = external_jQuery_default()(target).find('.dropzone.files-upload'); - element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download'); + if (!files.length) { + return; + } + + files.each(function (index, file) { + file = external_jQuery_default()(file); + + if (!~cache.index(file)) { + addNode(file); + } }); -}); -;// CONCATENATED MODULE: ./app/updates/channel-switcher.js +}; +var addNode = function addNode(container) { + container = external_jQuery_default()(container); + var input = container.find('input[type="file"]'); + var settings = container.data('grav-file-settings') || {}; -var switcher = external_jQuery_default()('input[type="radio"][name="channel-switch"]'); + if (settings.accept && ~settings.accept.indexOf('*')) { + settings.accept = ['']; + } -if (switcher) { - switcher.on('change', function (event) { - var radio = external_jQuery_default()(event.target); - var url = "".concat(radio.parent('[data-url]').data('url')); - utils_request(url, { - method: 'post', - body: { - task: 'gpmRelease', - release: radio.val() - } - }, function (response) { - if (response.reload) { - __webpack_require__.g.location.reload(); - } - }); + var options = { + url: container.data('file-url-add') || (container.closest('form').attr('action') || external_GravAdmin_namespaceObject.config.current_url) + '.json', + paramName: settings.paramName || 'file', + dotNotation: settings.name || 'file', + acceptedFiles: settings.accept ? settings.accept.join(',') : input.attr('accept') || container.data('media-types'), + maxFilesize: typeof settings.filesize !== 'undefined' ? settings.filesize : 256, + maxFiles: settings.limit || null, + resizeWidth: settings.resizeWidth || null, + resizeHeight: settings.resizeHeight || null, + resizeQuality: settings.resizeQuality || null, + resolution: settings.resolution || null, + accept: function accept(file, done) { + ACCEPT_FUNC(file, done, settings); + } + }; + cache = cache.add(container); + container = container[0]; + instances.push(new FilesField({ + container: container, + options: options + })); +}; + +var Instance = function () { + external_jQuery_default()('.dropzone.files-upload').each(function (i, container) { + return addNode(container); }); -} -;// CONCATENATED MODULE: ./app/updates/index.js -function updates_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + external_jQuery_default()('body').on('mutation._grav', onAddedNodes); + return instances; +}(); +// EXTERNAL MODULE: ./node_modules/events/events.js +var events = __webpack_require__(17187); +var events_default = /*#__PURE__*/__webpack_require__.n(events); +;// CONCATENATED MODULE: ./app/utils/gpm.js +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function updates_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function gpm_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function updates_createClass(Constructor, protoProps, staticProps) { if (protoProps) updates_defineProperties(Constructor.prototype, protoProps); if (staticProps) updates_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function gpm_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function gpm_createClass(Constructor, protoProps, staticProps) { if (protoProps) gpm_defineProperties(Constructor.prototype, protoProps); if (staticProps) gpm_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } -var Updates = /*#__PURE__*/function () { - function Updates() { - var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - updates_classCallCheck(this, Updates); - this.setPayload(payload); - this.task = "task".concat(external_GravAdmin_namespaceObject.config.param_sep); - this.updateURL = ''; +var GPM = /*#__PURE__*/function (_EventEmitter) { + _inherits(GPM, _EventEmitter); + + var _super = _createSuper(GPM); + + function GPM() { + var _this; + + var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; + + gpm_classCallCheck(this, GPM); + + _this = _super.call(this); + _this.payload = {}; + _this.raw = {}; + _this.action = action; + return _this; } - updates_createClass(Updates, [{ + gpm_createClass(GPM, [{ key: "setPayload", value: function setPayload() { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.payload = payload; + this.emit('payload', payload); return this; } }, { - key: "fetch", - value: function fetch() { - var _this = this; - - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - Instance.fetch(function (response) { - return _this.setPayload(response); - }, force); + key: "setAction", + value: function setAction() { + var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; + this.action = action; + this.emit('action', action); return this; } }, { - key: "maintenance", - value: function maintenance() { - var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide'; - var element = external_jQuery_default()('#updates [data-update-packages]'); - element[mode === 'show' ? 'fadeIn' : 'fadeOut'](); - - if (mode === 'hide') { - external_jQuery_default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove(); + key: "fetch", + value: function (_fetch) { + function fetch() { + return _fetch.apply(this, arguments); } - return this; - } - }, { - key: "grav", - value: function grav() { - var payload = this.payload.grav; - - if (payload && payload.isUpdatable) { - var task = this.task; - var bar = ''; - - if (!payload.isSymlink) { - this.updateURL = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/").concat(task, "updategrav/admin-nonce").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce); - bar += ""); - } else { - bar += ""); - } + fetch.toString = function () { + return _fetch.toString(); + }; - bar += "\n Grav v".concat(payload.available, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "! (").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.CURRENT, " v").concat(payload.version, ")\n "); - var element = external_jQuery_default()('[data-gpm-grav]').removeClass('hidden'); + return fetch; + }(function () { + var _this2 = this; - if (element.is(':empty')) { - element.hide(); - } + var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { + return true; + }; + var flush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var data = new FormData(); + data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - element.addClass('grav').html("".concat(bar)).slideDown(150, function () { - var c = 5; - var x = setInterval(function () { - c -= 1; - element.find('.pointer-events-none .cnt-down').text('(' + c + 's)'); - }, 1000); - setTimeout(function () { - clearInterval(x); - element.find('.pointer-events-none .cnt-down').remove(); - element.find('.pointer-events-none').removeClass('pointer-events-none'); - }, 5000); - }).parent('#messages').addClass('default-box-shadow'); + if (flush) { + data.append('flush', true); } - return this; - } + this.emit('fetching', this); + fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getUpdates"), { + credentials: 'same-origin', + method: 'post', + body: data + }).then(function (response) { + _this2.raw = response; + return response; + }).then(parseStatus).then(parseJSON).then(function (response) { + return _this2.response(response); + }).then(function (response) { + return callback(response, _this2.raw); + }).then(function (response) { + return _this2.emit('fetched', _this2.payload, _this2.raw, _this2); + })["catch"](userFeedbackError); + }) }, { - key: "resources", - value: function resources() { - if (!this.payload || !this.payload.resources || !this.payload.resources.total) { - return this.maintenance('hide'); - } + key: "response", + value: function response(_response) { + this.payload = _response; + return _response; + } + }]); - var is_current_package_latest = true; - var map = ['plugins', 'themes']; - var singles = ['plugin', 'theme']; - var _this$payload$resourc = this.payload.resources, - plugins = _this$payload$resourc.plugins, - themes = _this$payload$resourc.themes; + return GPM; +}((events_default())); - if (!this.payload.resources.total) { - return this; - } - [plugins, themes].forEach(function (resources, index) { - if (!resources || Array.isArray(resources)) { - return; - } +var gpm_Instance = new GPM(); +;// CONCATENATED MODULE: ./app/utils/keepalive.js +function keepalive_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var length = Object.keys(resources).length; - var type = map[index]; // sidebar +function keepalive_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - external_jQuery_default()("#admin-menu a[href$=\"/".concat(map[index], "\"]")).find('.badges').addClass('with-updates').find('.badge.updates').text(length); - var type_translation = ''; // update all +function keepalive_createClass(Constructor, protoProps, staticProps) { if (protoProps) keepalive_defineProperties(Constructor.prototype, protoProps); if (staticProps) keepalive_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - if (type === 'plugins') { - type_translation = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.PLUGINS; - } else { - type_translation = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.THEMES; - } - var updateAll = external_jQuery_default()(".grav-update.".concat(type)); - updateAll.css('display', 'block').html("\n
\n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ALL, " ").concat(type_translation, "\n \n ").concat(length, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_YOUR, " ").concat(type_translation.toLowerCase(), " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, "\n
\n ")); - var existing_slugs = external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs') || ''; - if (existing_slugs) { - existing_slugs = existing_slugs.split(','); - } else { - existing_slugs = []; - } +var MAX_SAFE_DELAY = 2147483647; - var slugs = unique_default()(existing_slugs.concat(Object.keys(resources))).join(); - external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs', "".concat(slugs)); - Object.keys(resources).forEach(function (item) { - // listing page - var container = external_jQuery_default()("[data-gpm-".concat(singles[index], "=\"").concat(item, "\"]")); - var element = container.find('.gpm-name'); - var url = element.find('a'); - var content_wrapper = container.parents('.content-wrapper'); +var KeepAlive = /*#__PURE__*/function () { + function KeepAlive() { + keepalive_classCallCheck(this, KeepAlive); - if (type === 'plugins' && !element.find('.badge.update').length) { - element.append("").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, "!")); - content_wrapper.addClass('has-updates'); - } else if (type === 'themes') { - element.append("")); - content_wrapper.addClass('has-updates'); - } // details page + this.active = false; + } + keepalive_createClass(KeepAlive, [{ + key: "start", + value: function start() { + var _this = this; - if (container.length) { - var details = external_jQuery_default()(".grav-update.".concat(singles[index])); + var timeout = external_GravAdmin_namespaceObject.config.admin_timeout / 1.5 * 1000; + this.timer = setInterval(function () { + return _this.fetch(); + }, Math.min(timeout, MAX_SAFE_DELAY)); + this.active = true; + } + }, { + key: "stop", + value: function stop() { + clearInterval(this.timer); + this.active = false; + } + }, { + key: "fetch", + value: function (_fetch) { + function fetch() { + return _fetch.apply(this, arguments); + } - if (details.length) { - var releaseType = resources[item].type === 'testing' ? 'test release' : ''; - details.html("\n\n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), "\n \n v").concat(resources[item].available, " ").concat(releaseType, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_THIS, " ").concat(singles[index], " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "!\n
\n ")).css('display', 'block'); - is_current_package_latest = false; - } - } - }); - external_jQuery_default()('[data-update-packages]').removeClass('hidden'); - }); - external_jQuery_default()('.content-wrapper').addClass('updates-checked'); + fetch.toString = function () { + return _fetch.toString(); + }; - if (!is_current_package_latest) { - external_jQuery_default()('.warning-reinstall-not-latest-release').removeClass('hidden'); - } - } + return fetch; + }(function () { + var data = new FormData(); + data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); + fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "keepAlive"), { + credentials: 'same-origin', + method: 'post', + body: data + })["catch"](userFeedbackError); + }) }]); - return Updates; + return KeepAlive; }(); +/* harmony default export */ const keepalive = (new KeepAlive()); +// EXTERNAL MODULE: ./node_modules/mout/array/unique.js +var unique = __webpack_require__(79863); +var unique_default = /*#__PURE__*/__webpack_require__.n(unique); +;// CONCATENATED MODULE: ./app/updates/notifications.js +function notifications_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var updates_Instance = new Updates(); - // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch +function notifications_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -Instance.on('fetched', function (response, raw) { - updates_Instance.setPayload(response.payload || {}); - updates_Instance.grav().resources(); -}); +function notifications_createClass(Constructor, protoProps, staticProps) { if (protoProps) notifications_defineProperties(Constructor.prototype, protoProps); if (staticProps) notifications_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -if (external_GravAdmin_namespaceObject.config.enable_auto_updates_check === '1') { - Instance.fetch(); -} -// EXTERNAL MODULE: ./node_modules/chartist/dist/chartist.js -var chartist = __webpack_require__(69259); -var chartist_default = /*#__PURE__*/__webpack_require__.n(chartist); -;// CONCATENATED MODULE: ./app/dashboard/chart.js -function chart_typeof(obj) { "@babel/helpers - typeof"; return chart_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, chart_typeof(obj); } -function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = chart_getPrototypeOf(object); if (object === null) break; } return object; } -function chart_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) chart_setPrototypeOf(subClass, superClass); } -function chart_setPrototypeOf(o, p) { chart_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return chart_setPrototypeOf(o, p); } +var canFetchNotifications = function canFetchNotifications() { + return external_GravAdmin_namespaceObject.config.notifications.enabled; +}; -function chart_createSuper(Derived) { var hasNativeReflectConstruct = chart_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = chart_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = chart_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return chart_possibleConstructorReturn(this, result); }; } +var notificationsFilters = function notificationsFilters() { + return external_GravAdmin_namespaceObject.config.notifications.filters; +}; -function chart_possibleConstructorReturn(self, call) { if (call && (chart_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return chart_assertThisInitialized(self); } +var Notifications = /*#__PURE__*/function () { + function Notifications() { + notifications_classCallCheck(this, Notifications); + } -function chart_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + notifications_createClass(Notifications, [{ + key: "fetch", + value: // Grav.default.Notifications.fetch() + function fetch() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$filter = _ref.filter, + filter = _ref$filter === void 0 ? notificationsFilters() : _ref$filter, + _ref$refresh = _ref.refresh, + refresh = _ref$refresh === void 0 ? false : _ref$refresh; -function chart_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } + if (!canFetchNotifications()) { + return false; + } -function chart_getPrototypeOf(o) { chart_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return chart_getPrototypeOf(o); } + var feed = external_jQuery_default()('#notifications'); + var loader = feed.find('.widget-loader'); + var content = feed.find('.widget-content > ul'); + loader.find('div').remove(); + loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); + loader.show(); + content.hide(); -function chart_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var processNotifications = function processNotifications(response) { + var notifications = response.notifications; + external_jQuery_default()('#notifications').find('.widget-content > ul').empty(); -function chart_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + if (notifications) { + Object.keys(notifications).forEach(function (location) { + return Notifications.processLocation(location, notifications[location]); + }); + } + }; -function chart_createClass(Constructor, protoProps, staticProps) { if (protoProps) chart_defineProperties(Constructor.prototype, protoProps); if (staticProps) chart_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getNotifications"), { + method: 'post', + body: { + refresh: refresh, + filter: filter + } + }, function (response) { + processNotifications(response); + })["catch"](function () { + var widget = external_jQuery_default()('#notifications .widget-content'); + widget.find('.widget-loader').find('div').remove(); + widget.find('.widget-loader').append('\n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ALL, " ").concat(type_translation, "\n \n ").concat(length, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_YOUR, " ").concat(type_translation.toLowerCase(), " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, "\n
\n ")); + var existing_slugs = external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs') || ''; - get isOpen() { - return this.icon.hasClass('children-open'); + if (existing_slugs) { + existing_slugs = existing_slugs.split(','); + } else { + existing_slugs = []; } - }; - } - }]); + var slugs = unique_default()(existing_slugs.concat(Object.keys(resources))).join(); + external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs', "".concat(slugs)); + Object.keys(resources).forEach(function (item) { + // listing page + var container = external_jQuery_default()("[data-gpm-".concat(singles[index], "=\"").concat(item, "\"]")); + var element = container.find('.gpm-name'); + var url = element.find('a'); + var content_wrapper = container.parents('.content-wrapper'); - return PagesTree; -}(); + if (type === 'plugins' && !element.find('.badge.update').length) { + element.append("").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, "!")); + content_wrapper.addClass('has-updates'); + } else if (type === 'themes') { + element.append("")); + content_wrapper.addClass('has-updates'); + } // details page -var tree_Instance = new PagesTree('[data-toggle="children"]'); + if (container.length) { + var details = external_jQuery_default()(".grav-update.".concat(singles[index])); -// EXTERNAL MODULE: ./node_modules/selectize/dist/js/selectize.js -var selectize = __webpack_require__(25703); -var selectize_default = /*#__PURE__*/__webpack_require__.n(selectize); -;// CONCATENATED MODULE: ./app/utils/selectize-required-fix.js -/** - * This is a plugin to override the `.refreshValidityState` method of - * the Selectize library (https://selectize.github.io/selectize.js/). - * The library is not maintained anymore (as of 2017-09-13) and contains - * a bug which causes Microsoft Edge to not work with selectized [required] - * form fields. This plugin should be removed if - * https://github.com/selectize/selectize.js/pull/1320 is ever merged - * and a new version of Selectize gets released. - */ + if (details.length) { + var releaseType = resources[item].type === 'testing' ? 'test release' : ''; + details.html("\n\n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), "\n \n v").concat(resources[item].available, " ").concat(releaseType, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_THIS, " ").concat(singles[index], " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "!\n
\n ")).css('display', 'block'); + is_current_package_latest = false; + } + } + }); + external_jQuery_default()('[data-update-packages]').removeClass('hidden'); + }); + external_jQuery_default()('.content-wrapper').addClass('updates-checked'); -selectize_default().define('required-fix', function (options) { - var _this = this; + if (!is_current_package_latest) { + external_jQuery_default()('.warning-reinstall-not-latest-release').removeClass('hidden'); + } + } + }]); - this.refreshValidityState = function () { - if (!_this.isRequired) return false; - var invalid = !_this.items.length; - _this.isInvalid = invalid; + return Updates; +}(); - if (invalid) { - _this.$control_input.attr('required', ''); - _this.$input.removeAttr('required'); - } else { - _this.$control_input.removeAttr('required'); +var updates_Instance = new Updates(); + // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch - _this.$input.attr('required'); - } - }; +gpm_Instance.on('fetched', function (response, raw) { + updates_Instance.setPayload(response.payload || {}); + updates_Instance.grav().resources(); }); -;// CONCATENATED MODULE: ./app/pages/filter.js -function filter_typeof(obj) { "@babel/helpers - typeof"; return filter_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, filter_typeof(obj); } -function filter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +if (external_GravAdmin_namespaceObject.config.enable_auto_updates_check === '1') { + gpm_Instance.fetch(); +} +// EXTERNAL MODULE: ./node_modules/chartist/dist/chartist.js +var chartist = __webpack_require__(69259); +var chartist_default = /*#__PURE__*/__webpack_require__.n(chartist); +;// CONCATENATED MODULE: ./app/dashboard/chart.js +function chart_typeof(obj) { "@babel/helpers - typeof"; return chart_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, chart_typeof(obj); } -function filter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } -function filter_createClass(Constructor, protoProps, staticProps) { if (protoProps) filter_defineProperties(Constructor.prototype, protoProps); if (staticProps) filter_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = chart_getPrototypeOf(object); if (object === null) break; } return object; } +function chart_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) chart_setPrototypeOf(subClass, superClass); } +function chart_setPrototypeOf(o, p) { chart_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return chart_setPrototypeOf(o, p); } +function chart_createSuper(Derived) { var hasNativeReflectConstruct = chart_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = chart_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = chart_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return chart_possibleConstructorReturn(this, result); }; } +function chart_possibleConstructorReturn(self, call) { if (call && (chart_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return chart_assertThisInitialized(self); } +function chart_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function chart_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function chart_getPrototypeOf(o) { chart_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return chart_getPrototypeOf(o); } +function chart_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -/* @formatter:off */ +function chart_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -/* eslint-disable */ +function chart_createClass(Constructor, protoProps, staticProps) { if (protoProps) chart_defineProperties(Constructor.prototype, protoProps); if (staticProps) chart_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -var options = [{ - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.MODULE, - key: 'Module', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.VISIBLE, - key: 'Visible', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ROUTABLE, - key: 'Routable', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.PUBLISHED, - key: 'Published', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_MODULE, - key: 'NonModule', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_VISIBLE, - key: 'NonVisible', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_ROUTABLE, - key: 'NonRoutable', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_PUBLISHED, - key: 'NonPublished', - cat: 'mode' -}]; -/* @formatter:on */ -/* eslint-enable */ -var PagesFilter = /*#__PURE__*/function () { - function PagesFilter(filters, search) { - var _this = this; - filter_classCallCheck(this, PagesFilter); - this.filters = external_jQuery_default()(filters); - this.search = external_jQuery_default()(search); - this.options = options; - this.tree = tree_Instance; - var storage = JSON.parse(localStorage.getItem('grav:admin:pages:filter') || '{}'); + // let isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - if (!this.filters.length || !this.search.length) { - return; +var defaults = { + data: { + series: [100, 0] + }, + options: { + Pie: { + donut: true, + donutWidth: 10, + startAngle: 0, + total: 100, + showLabel: false, + height: 150, + // chartPadding: !isFirefox ? 10 : 25 // workaround for older versions of firefox + chartPadding: 5 + }, + Bar: { + height: 164, + chartPadding: 20, + // workaround for older versions of firefox + axisX: { + showGrid: false, + labelOffset: { + x: 0, + y: 0 + } + }, + axisY: { + offset: 15, + showLabel: true, + showGrid: true, + labelOffset: { + x: 5, + y: 5 + }, + scaleMinSpace: 25 + } } + } +}; - this.labels = this.filters.data('filter-labels'); - this.search.on('input', debounce_default()(function () { - return _this.filter(); - }, 250)); - this.filters.on('change', function () { - return _this.filter(); - }); // restore state +var Chart = /*#__PURE__*/function () { + function Chart(element) { + var _this = this; - if (storage.flags || storage.query) { - this.setValues(storage); - this.filter(); + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + chart_classCallCheck(this, Chart); + + this.element = external_jQuery_default()(element) || []; + + if (!this.element[0]) { + return; } - this._initSelectize(); + var type = (this.element.data('chart-type') || 'pie').toLowerCase(); + this.type = type.charAt(0).toUpperCase() + type.substr(1).toLowerCase(); + options = Object.assign({}, defaults.options[this.type], options); + data = Object.assign({}, defaults.data, data); + Object.assign(this, { + options: options, + data: data + }); + this.chart = (chartist_default())[this.type](this.element.find('.ct-chart').empty()[0], this.data, this.options); + this.chart.on('created', function () { + _this.element.find('.hidden').removeClass('hidden'); // FIX: workaround for chartist issue not allowing HTML in labels anymore + // https://github.com/gionkunz/chartist-js/issues/937 + + + _this.element.find('.ct-label').each(function (index, label) { + label = external_jQuery_default()(label); + var text = label.html().replace('<', '<').replace('>', '>'); + label.html(text); + }); + }); } - filter_createClass(PagesFilter, [{ - key: "filter", - value: function filter(value) { - var _this2 = this; + chart_createClass(Chart, [{ + key: "updateData", + value: function updateData(data) { + Object.assign(this.data, data); + this.chart.update(this.data); + } + }]); - var data = { - flags: '', - query: '' - }; + return Chart; +}(); - if (filter_typeof(value) === 'object') { - Object.assign(data, value); - } - if (typeof value === 'string') { - data.query = value; - } +; +var UpdatesChart = /*#__PURE__*/function (_Chart) { + chart_inherits(UpdatesChart, _Chart); - if (typeof value === 'undefined') { - data.flags = this.filters.val(); - data.query = this.search.val(); - } + var _super = chart_createSuper(UpdatesChart); - if (!Object.keys(data).filter(function (key) { - return data[key] !== ''; - }).length) { - this.resetValues(); - return; - } + function UpdatesChart(element) { + var _this2; - data.flags = data.flags.replace(/(\s{1,})?,(\s{1,})?/g, ','); - this.setValues({ - flags: data.flags, - query: data.query - }, 'silent'); - utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/pages-filter.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "filterPages"), { - method: 'post', - body: data - }, function (response) { - _this2.refreshDOM(response); - }); - } - }, { - key: "refreshDOM", - value: function refreshDOM(response) { - var _this3 = this; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var items = external_jQuery_default()('[data-nav-id]'); + chart_classCallCheck(this, UpdatesChart); - if (!response) { - items.removeClass('search-match').show(); - this.tree.restore(); + _this2 = _super.call(this, element, options, data); + + _this2.chart.on('draw', function (data) { + return _this2.draw(data); + }); + + gpm_Instance.on('fetched', function (response) { + if (!response.payload) { return; } - items.removeClass('search-match').hide(); - response.results.forEach(function (page) { - var match = items.filter("[data-nav-id=\"".concat(page, "\"]")).addClass('search-match').show(); - match.parents('[data-nav-id]').addClass('search-match').show(); + var payload = response.payload.grav; + var missing = (response.payload.resources.total + (payload.isUpdatable ? 1 : 0)) * 100 / (response.payload.installed + (payload.isUpdatable ? 1 : 0)); + var updated = 100 - missing; - _this3.tree.expand(page, 'no-store'); + _this2.updateData({ + series: [updated, missing] }); - } - }, { - key: "setValues", - value: function setValues(_ref, silent) { - var _ref$flags = _ref.flags, - flags = _ref$flags === void 0 ? '' : _ref$flags, - _ref$query = _ref.query, - query = _ref$query === void 0 ? '' : _ref$query; - var flagsArray = flags.replace(/(\s{1,})?,(\s{1,})?/g, ',').split(','); - if (this.filters.val() !== flags) { - var selectize = this.filters.data('selectize'); - this.filters[selectize ? 'setValue' : 'val'](flagsArray, silent); + if (response.payload.resources.total) { + updates_Instance.maintenance('show'); } + }); + return _this2; + } - if (this.search.val() !== query) { - this.search.val(query); + chart_createClass(UpdatesChart, [{ + key: "draw", + value: function draw(data) { + if (data.index) { + return; } - localStorage.setItem('grav:admin:pages:filter', JSON.stringify({ - flags: flags, - query: query - })); - } - }, { - key: "resetValues", - value: function resetValues() { - this.setValues('', 'silent'); - this.refreshDOM(); + var notice = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN[data.value === 100 ? 'FULLY_UPDATED' : 'UPDATES_AVAILABLE']; + this.element.find('.numeric span').text("".concat(Math.round(data.value), "%")); + this.element.find('.js__updates-available-description').html(notice); + this.element.find('.hidden').removeClass('hidden'); } }, { - key: "_initSelectize", - value: function _initSelectize() { - var _this4 = this; + key: "updateData", + value: function updateData(data) { + _get(chart_getPrototypeOf(UpdatesChart.prototype), "updateData", this).call(this, data); // missing updates - var extras = { - type: this.filters.data('filter-types') || {}, - access: this.filters.data('filter-access-levels') || {} - }; - Object.keys(extras).forEach(function (cat) { - Object.keys(extras[cat]).forEach(function (key) { - _this4.options.push({ - cat: cat, - key: key, - flag: extras[cat][key] - }); - }); - }); - this.filters.selectize({ - maxItems: null, - valueField: 'key', - labelField: 'flag', - searchField: ['flag', 'key'], - options: this.options, - optgroups: this.labels, - optgroupField: 'cat', - optgroupLabelField: 'name', - optgroupValueField: 'id', - optgroupOrder: this.labels.map(function (item) { - return item.id; - }), - plugins: ['optgroup_columns', 'required-fix'] - }); + + if (this.data.series[0] < 100) { + this.element.closest('#updates').find('[data-update-packages]').fadeIn(); + } } }]); - return PagesFilter; -}(); + return UpdatesChart; +}(Chart); +var charts = {}; +external_jQuery_default()('[data-chart-name]').each(function () { + var element = external_jQuery_default()(this); + var name = element.data('chart-name') || ''; + var options = element.data('chart-options') || {}; + var data = element.data('chart-data') || {}; + if (name === 'updates') { + charts[name] = new UpdatesChart(element, options, data); + } else { + charts[name] = new Chart(element, options, data); + } +}); +var Instances = charts; +;// CONCATENATED MODULE: ./app/dashboard/cache.js +function cache_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var filter_Instance = new PagesFilter('input[name="page-filter"]', 'input[name="page-search"]'); +function cache_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -// EXTERNAL MODULE: ./node_modules/speakingurl/index.js -var speakingurl = __webpack_require__(989); -var speakingurl_default = /*#__PURE__*/__webpack_require__.n(speakingurl); -;// CONCATENATED MODULE: ./app/utils/jquery-utils.js -var _this = undefined; +function cache_createClass(Constructor, protoProps, staticProps) { if (protoProps) cache_defineProperties(Constructor.prototype, protoProps); if (staticProps) cache_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - // jQuery no parents filter -(external_jQuery_default()).expr[":"].noparents = external_jQuery_default().expr.createPseudo(function (text) { - return function (element) { - return external_jQuery_default()(element).parents(text).length < 1; - }; -}); // Slugify -// CommonJS and ES6 version of https://github.com/madflow/jquery-slugify -(external_jQuery_default()).fn.slugify = function (source, options) { - return _this.each(function (element) { - var target = external_jQuery_default()(element); - var source = external_jQuery_default()(source); - target.on('keyup change', function () { - target.data('locked', target.val() !== '' && target.val() !== undefined); - }); - source.on('keyup change', function () { - if (target.data('locked') === true) { - return true; - } - var isInput = target.is('input') || target.is('textarea'); - target[isInput ? 'val' : 'text'](external_jQuery_default().slugify(source.val(), options)); - }); - }); -}; // Static method. +var getUrl = function getUrl() { + var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + if (type) { + type = "cleartype:".concat(type, "/"); + } -(external_jQuery_default()).slugify = function (sourceString, options) { - options = external_jQuery_default().extend({}, (external_jQuery_default()).slugify.options, options); - options.lang = options.lang || external_jQuery_default()('html').prop('lang'); + return "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/cache.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "clearCache/").concat(type, "admin-nonce").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce); +}; - if (typeof options.preSlug === 'function') { - sourceString = options.preSlug(sourceString); - } +var Cache = /*#__PURE__*/function () { + function Cache() { + var _this = this; - sourceString = options.slugFunc(sourceString, options); + cache_classCallCheck(this, Cache); - if (typeof options.postSlug === 'function') { - sourceString = options.postSlug(sourceString); + this.element = external_jQuery_default()('[data-clear-cache]'); + external_jQuery_default()('body').on('click', '[data-clear-cache]', function (event) { + return _this.clear(event, event.target); + }); } - return sourceString; -}; // Default plugin options + cache_createClass(Cache, [{ + key: "clear", + value: function clear(event, element) { + var _this2 = this; + var type = ''; -(external_jQuery_default()).slugify.options = { - preSlug: null, - postSlug: null, - slugFunc: function slugFunc(input, opts) { - return speakingurl_default()(input, opts); - } -}; -;// CONCATENATED MODULE: ./app/pages/page/add.js + if (event && event.preventDefault) { + event.preventDefault(); + } + if (typeof event === 'string') { + type = event; + } + element = element ? external_jQuery_default()(element) : external_jQuery_default()("[data-clear-cache-type=\"".concat(type, "\"]")); + type = type || external_jQuery_default()(element).data('clear-cache-type') || ''; + var url = element.data('clearCache') || getUrl(type); + this.disable(); + utils_request(url, function () { + return _this2.enable(); + }); + } + }, { + key: "enable", + value: function enable() { + this.element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin fa-retweet').addClass('fa-retweet'); + } + }, { + key: "disable", + value: function disable() { + this.element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-retweet').addClass('fa-refresh fa-spin'); + } + }]); + return Cache; +}(); -var custom = false; -var folder = external_jQuery_default()('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"], [data-remodal-id="modal-page-copy"] input[name="data[folder]"]'); -var title = external_jQuery_default()('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"], [data-remodal-id="modal-page-copy"] input[name="data[title]"]'); -var getFields = function getFields(type, target) { - target = external_jQuery_default()(target); - var query = "[data-remodal-id=\"".concat(target.closest('[data-remodal-id]').data('remodal-id'), "\"]"); - return { - title: type === 'title' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[title]\"]")), - folder: type === 'folder' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[folder]\"]")) - }; -}; +var cache_Instance = new Cache(); -title.on('input focus blur', function (event) { - if (custom) { - return true; - } +;// CONCATENATED MODULE: ./app/dashboard/backup.js - var elements = getFields('title', event.currentTarget); - var slug = external_jQuery_default().slugify(elements.title.val(), { - custom: { - "'": '', - '‘': '', - '’': '' - } - }); - elements.folder.val(slug); -}); -folder.on('input', function (event) { - var elements = getFields('folder', event.currentTarget); - var input = elements.folder.get(0); - var value = elements.folder.val(); - var selection = { - start: input.selectionStart, - end: input.selectionEnd - }; - value = value.toLowerCase().replace(/\s/g, '-').replace(/[^a-z0-9_\-]/g, ''); - elements.folder.val(value); - custom = !!value; // restore cursor position - input.setSelectionRange(selection.start, selection.end); -}); -folder.on('focus blur', function (event) { - getFields('title').title.trigger('input'); -}); -external_jQuery_default()(document).on('change', '[name="data[route]"]', function (event) { - var rawroute = external_jQuery_default()(event.currentTarget).val(); - var pageTemplate = external_jQuery_default()('[name="data[name]"]'); - var URI = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/ajax.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getChildTypes"); - if (pageTemplate.length === 0) { - return; - } - utils_request(URI, { - method: 'post', - body: { - rawroute: rawroute +external_jQuery_default()('[data-backup][data-ajax*="backup/"]').on('click', function () { + var element = external_jQuery_default()(this); + var url = element.data('ajax'); + var inDropdown = element.closest('.dropdown-menu'); + (inDropdown.length ? inDropdown : element).closest('.button-group').find('> button:first').attr('disabled', 'disabled').find('> .fa').removeClass('fa-life-ring').addClass('fa-spin fa-refresh'); + utils_request(url, function + /* response */ + () { + if (Instances && Instances.backups) { + Instances.backups.updateData({ + series: [0, 100] + }); + Instances.backups.element.find('.numeric').html("0 ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DAYS.toLowerCase(), "")); } - }, function (response) { - var type = response.child_type; - if (type !== '' && type !== 'default') { - pageTemplate.val(type); - pageTemplate.data('selectize').setValue(type); + (inDropdown.length ? inDropdown : element).closest('.button-group').find('> button:first').removeAttr('disabled').find('> .fa').removeClass('fa-spin fa-refresh').addClass('fa-life-ring'); + }); +}); +external_jQuery_default()('[data-backup][data-ajax*="backupDelete"]').on('click', function () { + var element = external_jQuery_default()(this); + var url = element.data('ajax'); + var tr = element.closest('tr'); + tr.addClass('deleting'); + utils_request(url, function (response) { + if (response.status === 'success') { + tr.remove(); + } else { + tr.removeClass('deleting'); } }); }); -;// CONCATENATED MODULE: ./app/pages/page/move.js +;// CONCATENATED MODULE: ./app/dashboard/index.js -external_jQuery_default()(document).on('click', '[data-page-move] button[name="task"][value="save"]', function (event) { - /* let route = $('form#blueprints:first select[name="data[route]"]'); - let moveTo = $('[data-page-move] select').val(); - if (route.length && route.val() !== moveTo) { - let selectize = route.data('selectize'); - route.val(moveTo); - if (selectize) selectize.setValue(moveTo); - }*/ - var modal = external_jQuery_default()(event.currentTarget).closest('[data-remodal-id]'); - var parents = modal.data('parents') || {}; - var finder = parents.finder; - if (!parents || !finder) { - return true; - } - var field = parents.field; - var parentLabel = parents.parentLabel; - var parentName = parents.parentName; - var selection = finder.findLastActive().item[0]; - var value = selection._item[finder.config.valueKey]; - var name = selection._item[finder.config.labelKey]; - field.val(value); - parentLabel.text(value); - parentName.text(name); - finder.config.defaultPath = value; - external_jQuery_default()('').css({ - backgroundColor: 'rgba(255, 255, 255, 0.1)', - position: 'fixed', - top: 0, - left: 0, - width: '100vw', - height: '100vh', - zIndex: 15000 - }).appendTo(external_jQuery_default()('body')); +/* harmony default export */ const dashboard = ({ + Chart: { + Chart: Chart, + UpdatesChart: UpdatesChart, + Instances: Instances + }, + Cache: cache_Instance }); -/* -$(document).on('click', '[data-remodal-id="parents"] [data-parents-select]', (event) => { - const modal = $(event.currentTarget).closest('[data-remodal-id]'); - const parents = modal.data('parents'); - const finder = parents.finder; - const field = parents.field; - const parentLabel = parents.parentLabel; - const parentName = parents.parentName; - const selection = finder.findLastActive().item[0]; - const value = selection._item[finder.config.valueKey]; - const name = selection._item[finder.config.labelKey]; +// EXTERNAL MODULE: ./node_modules/sortablejs/modular/sortable.esm.js +var sortable_esm = __webpack_require__(51474); +// EXTERNAL MODULE: ./node_modules/debounce/index.js +var debounce = __webpack_require__(20296); +var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce); +// EXTERNAL MODULE: ./app/utils/storage.js +var storage = __webpack_require__(31619); +;// CONCATENATED MODULE: ./app/pages/tree.js +function tree_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - field.val(value); - parentLabel.text(value); - parentName.text(name); - finder.config.defaultPath = value; +function tree_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - const remodal = $.remodal.lookup[$(`[data-remodal-id="${modal.data('remodalId')}"]`).data('remodal')]; - remodal.close(); -}); -*/ -;// CONCATENATED MODULE: ./app/pages/page/delete.js +function tree_createClass(Constructor, protoProps, staticProps) { if (protoProps) tree_defineProperties(Constructor.prototype, protoProps); if (staticProps) tree_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -external_jQuery_default()(document).on('click', '[data-remodal-target="delete"]', function () { - var confirm = external_jQuery_default()('[data-remodal-id="delete"] [data-delete-action]'); - var link = external_jQuery_default()(this).data('delete-url'); - confirm.data('delete-action', link); -}); -external_jQuery_default()(document).on('click', '[data-delete-action]', function () { - var remodal = (external_jQuery_default()).remodal.lookup[external_jQuery_default()('[data-remodal-id="delete"]').data('remodal')]; - __webpack_require__.g.location.href = external_jQuery_default()(this).data('delete-action'); - remodal.close(); -}); -;// CONCATENATED MODULE: ./app/pages/page/unset.js - -external_jQuery_default()(document).on('click', '.dz-unset', function () { - var file_upload = external_jQuery_default()(this).closest('.files-upload'); - external_jQuery_default()(this).closest('.dz-image-preview').remove(); - var unset_image = external_jQuery_default()(this).closest('.dz-image-preview').find('[data-dz-name]').text().trim(); - var images = JSON.parse(file_upload.find('input[data-grav-field="hidden"]').val()) || {}; - var image_array = {}; - external_jQuery_default().each(images, function (ind, obj) { - if (!ind.endsWith(unset_image)) { - image_array[ind] = obj; - } - }); - file_upload.find('input[data-grav-field="hidden"]').val(JSON.stringify(image_array)); -}); -;// CONCATENATED MODULE: ./app/pages/page/disable-buttons.js - -external_jQuery_default()('.disable-after-click').on('click', function () { - external_jQuery_default()(this).addClass('pointer-events-disabled'); -}); -;// CONCATENATED MODULE: ./app/utils/cookies.js -function cookies_typeof(obj) { "@babel/helpers - typeof"; return cookies_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, cookies_typeof(obj); } -/* - * Cookies.js - 1.2.3-grav - * https://github.com/ScottHamper/Cookies - * - * With SameSite support by Grav - * - * This is free and unencumbered software released into the public domain. - */ -var factory = function factory(window) { - var _arguments = arguments; - if (cookies_typeof(window.document) !== 'object') { - throw new Error('Cookies.js requires a `window` with a `document` object'); - } +var sessionKey = 'grav:admin:pages'; - var Cookies = function Cookies(key, value, options) { - return _arguments.length === 1 ? Cookies.get(key) : Cookies.set(key, value, options); - }; // Allows for setter injection in unit tests +if (!sessionStorage.getItem(sessionKey)) { + sessionStorage.setItem(sessionKey, '{}'); +} +var PagesTree = /*#__PURE__*/function () { + function PagesTree(query) { + var _this = this; - Cookies._document = window.document; // Used to ensure cookie keys do not collide with - // built-in `Object` properties + var elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :) + tree_classCallCheck(this, PagesTree); - Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC'); - Cookies.defaults = { - path: '/', - secure: false, - sameSite: 'Lax' - }; + this.query = query; + this.elements = external_jQuery_default()(elements !== undefined ? elements : this.query); + this.session = JSON.parse(sessionStorage.getItem(sessionKey) || '{}'); - Cookies.get = function (key) { - if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) { - Cookies._renewCache(); + if (!this.elements.length) { + return; } - var value = Cookies._cache[Cookies._cacheKeyPrefix + key]; - return value === undefined ? undefined : decodeURIComponent(value); - }; - - Cookies.set = function (key, value, options) { - options = Cookies._getExtendedOptions(options); - options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires); - Cookies._document.cookie = Cookies._generateCookieString(key, value, options); - return Cookies; - }; - - Cookies.expire = function (key, options) { - return Cookies.set(key, undefined, options); - }; - - Cookies._getExtendedOptions = function (options) { - return { - path: options && options.path || Cookies.defaults.path, - domain: options && options.domain || Cookies.defaults.domain, - expires: options && options.expires || Cookies.defaults.expires, - secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure, - sameSite: options && options.sameSite || Cookies.defaults.sameSite - }; - }; + this.restore(); + this.elements.find('.page-icon').on('click', function (event) { + return _this.toggle(event.target); + }); + this.elements.data('tree_init', 1); + external_jQuery_default()('[data-page-toggleall]').on('click', function (event) { + var element = external_jQuery_default()(event.target).closest('[data-page-toggleall]'); + var action = element.data('page-toggleall'); - Cookies._isValidDate = function (date) { - return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime()); - }; + _this[action](); + }); + } - Cookies._getExpiresDate = function (expires, now) { - now = now || new Date(); + tree_createClass(PagesTree, [{ + key: "reload", + value: function reload() { + var elements = external_jQuery_default()(this.query).filter(function (index, element) { + return !external_jQuery_default()(element).data('tree_init'); + }); - if (typeof expires === 'number') { - expires = expires === Infinity ? Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000); - } else if (typeof expires === 'string') { - expires = new Date(expires); - } + if (!elements.length) { + return; + } - if (expires && !Cookies._isValidDate(expires)) { - throw new Error('`expires` parameter cannot be converted to a valid Date instance'); + this.constructor(this.query, elements); } + }, { + key: "toggle", + value: function toggle(elements) { + var _this2 = this; - return expires; - }; + var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - Cookies._generateCookieString = function (key, value, options) { - key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent); - key = key.replace(/\(/g, '%28').replace(/\)/g, '%29'); - value = (value + '').replace(/[^!#$&-+\--:<-\[\]-~]/g, encodeURIComponent); - options = options || {}; - var cookieString = key + '=' + value; - cookieString += options.path ? ';path=' + options.path : ''; - cookieString += options.domain ? ';domain=' + options.domain : ''; - cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : ''; - cookieString += options.secure ? ';secure' : ''; - cookieString += options.sameSite ? ';SameSite=' + options.sameSite : ''; - return cookieString; - }; + if (typeof elements === 'string') { + elements = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")).find('[data-toggle="children"]'); + } - Cookies._getCacheFromString = function (documentCookie) { - var cookieCache = {}; - var cookiesArray = documentCookie ? documentCookie.split('; ') : []; + elements = external_jQuery_default()(elements || this.elements); + elements.each(function (index, element) { + element = external_jQuery_default()(element); - for (var i = 0; i < cookiesArray.length; i++) { - var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]); + var state = _this2.getState(element.closest('[data-toggle="children"]')); - if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) { - cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value; - } + _this2[state.isOpen ? 'collapse' : 'expand'](state.id, dontStore); + }); } + }, { + key: "collapse", + value: function collapse(elements) { + var _this3 = this; - return cookieCache; - }; - - Cookies._getKeyValuePairFromCookieString = function (cookieString) { - // "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')` - var separatorIndex = cookieString.indexOf('='); // IE omits the "=" when the cookie value is an empty string - - separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex; - var key = cookieString.substr(0, separatorIndex); - var decodedKey; + var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - try { - decodedKey = decodeURIComponent(key); - } catch (e) { - if (console && typeof console.error === 'function') { - console.error('Could not decode cookie with key "' + key + '"', e); + if (typeof elements === 'string') { + elements = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")).find('[data-toggle="children"]'); } - } - return { - key: decodedKey, - value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed + elements = external_jQuery_default()(elements || this.elements); + elements.each(function (index, element) { + element = external_jQuery_default()(element); - }; - }; + var state = _this3.getState(element); - Cookies._renewCache = function () { - Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie); - Cookies._cachedDocumentCookie = Cookies._document.cookie; - }; + if (state.isOpen) { + state.children.hide(); + state.icon.removeClass('children-open').addClass('children-closed'); - Cookies._areEnabled = function () { - var testKey = 'cookies.js'; - var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1'; - Cookies.expire(testKey); - return areEnabled; - }; + if (!dontStore) { + delete _this3.session[state.id]; + } + } + }); - Cookies.enabled = Cookies._areEnabled(); - return Cookies; -}; + if (!dontStore) { + this.save(); + } + } + }, { + key: "expand", + value: function expand(elements) { + var _this4 = this; -__webpack_require__.g.Cookies = __webpack_require__.g && cookies_typeof(__webpack_require__.g.document) === 'object' ? factory(__webpack_require__.g) : factory; -/* harmony default export */ const cookies = (__webpack_require__.g.Cookies); -// EXTERNAL MODULE: ./node_modules/dropzone/dist/dropzone.js -var dist_dropzone = __webpack_require__(32025); -var dropzone_default = /*#__PURE__*/__webpack_require__.n(dist_dropzone); -;// CONCATENATED MODULE: ./app/forms/fields/files.js -function files_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; -function files_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + if (typeof elements === 'string') { + var element = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")); + var parents = element.parents('[data-nav-id]'); // loop back through parents, we don't want to expand an hidden child -function files_createClass(Constructor, protoProps, staticProps) { if (protoProps) files_defineProperties(Constructor.prototype, protoProps); if (staticProps) files_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + if (parents.length) { + parents = parents.find('[data-toggle="children"]:first'); + parents = parents.add(element.find('[data-toggle="children"]:first')); + return this.expand(parents, dontStore); + } + elements = element.find('[data-toggle="children"]:first'); + } - // import EXIF from 'exif-js'; + elements = external_jQuery_default()(elements || this.elements); + elements.each(function (index, element) { + element = external_jQuery_default()(element); + var state = _this4.getState(element); - // translations + if (!state.isOpen) { + state.children.show(); + state.icon.removeClass('children-closed').addClass('children-open'); -var Dictionary = { - dictCancelUpload: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD, - dictCancelUploadConfirmation: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD_CONFIRMATION, - dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_DEFAULT_MESSAGE, - dictFallbackMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_MESSAGE, - dictFallbackText: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_TEXT, - dictFileTooBig: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FILE_TOO_BIG, - dictInvalidFileType: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_INVALID_FILE_TYPE, - dictMaxFilesExceeded: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_MAX_FILES_EXCEEDED, - dictRemoveFile: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_REMOVE_FILE, - dictResponseError: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_RESPONSE_ERROR -}; -(dropzone_default()).autoDiscover = false; -(dropzone_default()).options.gravPageDropzone = {}; - -(dropzone_default()).confirm = function (question, accepted, rejected) { - var doc = external_jQuery_default()(document); - var modalSelector = '[data-remodal-id="delete-media"]'; - - var removeEvents = function removeEvents() { - doc.off('confirmation', modalSelector, accept); - doc.off('cancellation', modalSelector, reject); - external_jQuery_default()(modalSelector).find('.remodal-confirm').removeClass('pointer-events-disabled'); - }; - - var accept = function accept() { - accepted && accepted(); - removeEvents(); - }; + if (!dontStore) { + _this4.session[state.id] = 1; + } + } + }); - var reject = function reject() { - rejected && rejected(); - removeEvents(); - }; + if (!dontStore) { + this.save(); + } + } + }, { + key: "restore", + value: function restore() { + var _this5 = this; - (external_jQuery_default()).remodal.lookup[external_jQuery_default()(modalSelector).data('remodal')].open(); - doc.on('confirmation', modalSelector, accept); - doc.on('cancellation', modalSelector, reject); -}; + this.collapse(null, true); + Object.keys(this.session).forEach(function (key) { + _this5.expand(key, 'no-store'); + }); + } + }, { + key: "save", + value: function save() { + return sessionStorage.setItem(sessionKey, JSON.stringify(this.session)); + } + }, { + key: "getState", + value: function getState(element) { + element = external_jQuery_default()(element); + return { + id: element.closest('[data-nav-id]').data('nav-id'), + children: element.closest('li.page-item').find('ul:first'), + icon: element.find('.page-icon'), -var DropzoneMediaConfig = { - timeout: 0, - thumbnailWidth: 200, - thumbnailHeight: 150, - addRemoveLinks: false, - dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROP_FILES_HERE_TO_UPLOAD.replace(/</g, '<').replace(/>/g, '>'), - dictRemoveFileConfirmation: '[placeholder]', - previewTemplate: "\n".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD, " {{fileName}}
\n").concat(response.message, "") + if (typeof value === 'string') { + data.query = value; + } + + if (typeof value === 'undefined') { + data.flags = this.filters.val(); + data.query = this.search.val(); + } + + if (!Object.keys(data).filter(function (key) { + return data[key] !== ''; + }).length) { + this.resetValues(); + return; + } + + data.flags = data.flags.replace(/(\s{1,})?,(\s{1,})?/g, ','); + this.setValues({ + flags: data.flags, + query: data.query + }, 'silent'); + utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/pages-filter.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "filterPages"), { + method: 'post', + body: data + }, function (response) { + _this2.refreshDOM(response); }); } }, { - key: "onDropzoneComplete", - value: function onDropzoneComplete(file) { - if (!file.accepted && !file.rejected) { - var data = { - status: 'error', - message: "".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_UNSUPPORTED, ": ").concat(file.name.match(/\..+/).join('')) - }; - return this.handleError({ - file: file, - data: data, - mode: 'removeFile', - msg: "
".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_ADD, " {{fileName}}
\n").concat(data.message, "") - }); - } + key: "refreshDOM", + value: function refreshDOM(response) { + var _this3 = this; - if (this.options.reloadPage) { - __webpack_require__.g.location.reload(); + var items = external_jQuery_default()('[data-nav-id]'); + + if (!response) { + items.removeClass('search-match').show(); + this.tree.restore(); + return; } + + items.removeClass('search-match').hide(); + response.results.forEach(function (page) { + var match = items.filter("[data-nav-id=\"".concat(page, "\"]")).addClass('search-match').show(); + match.parents('[data-nav-id]').addClass('search-match').show(); + + _this3.tree.expand(page, 'no-store'); + }); } }, { - key: "b64_to_utf8", - value: function b64_to_utf8(str) { - str = str.replace(/\s/g, ''); - return decodeURIComponent(escape(window.atob(str))); + key: "setValues", + value: function setValues(_ref, silent) { + var _ref$flags = _ref.flags, + flags = _ref$flags === void 0 ? '' : _ref$flags, + _ref$query = _ref.query, + query = _ref$query === void 0 ? '' : _ref$query; + var flagsArray = flags.replace(/(\s{1,})?,(\s{1,})?/g, ',').split(','); + + if (this.filters.val() !== flags) { + var selectize = this.filters.data('selectize'); + this.filters[selectize ? 'setValue' : 'val'](flagsArray, silent); + } + + if (this.search.val() !== query) { + this.search.val(query); + } + + localStorage.setItem('grav:admin:pages:filter', JSON.stringify({ + flags: flags, + query: query + })); } }, { - key: "onDropzoneAddedFile", - value: function onDropzoneAddedFile(file) { - return this.dropzone.options.addedfile(file); + key: "resetValues", + value: function resetValues() { + this.setValues('', 'silent'); + this.refreshDOM(); } }, { - key: "onDropzoneRemovedFile", - value: function onDropzoneRemovedFile(file) { - var _this5 = this; + key: "_initSelectize", + value: function _initSelectize() { + var _this4 = this; + + var extras = { + type: this.filters.data('filter-types') || {}, + access: this.filters.data('filter-access-levels') || {} + }; + Object.keys(extras).forEach(function (cat) { + Object.keys(extras[cat]).forEach(function (key) { + _this4.options.push({ + cat: cat, + key: key, + flag: extras[cat][key] + }); + }); + }); + this.filters.selectize({ + maxItems: null, + valueField: 'key', + labelField: 'flag', + searchField: ['flag', 'key'], + options: this.options, + optgroups: this.labels, + optgroupField: 'cat', + optgroupLabelField: 'name', + optgroupValueField: 'id', + optgroupOrder: this.labels.map(function (item) { + return item.id; + }), + plugins: ['optgroup_columns', 'required-fix'] + }); + } + }]); + + return PagesFilter; +}(); + + +var filter_Instance = new PagesFilter('input[name="page-filter"]', 'input[name="page-search"]'); + +// EXTERNAL MODULE: ./node_modules/speakingurl/index.js +var speakingurl = __webpack_require__(989); +var speakingurl_default = /*#__PURE__*/__webpack_require__.n(speakingurl); +;// CONCATENATED MODULE: ./app/utils/jquery-utils.js +var _this = undefined; + + + // jQuery no parents filter + +(external_jQuery_default()).expr[":"].noparents = external_jQuery_default().expr.createPseudo(function (text) { + return function (element) { + return external_jQuery_default()(element).parents(text).length < 1; + }; +}); // Slugify +// CommonJS and ES6 version of https://github.com/madflow/jquery-slugify + +(external_jQuery_default()).fn.slugify = function (source, options) { + return _this.each(function (element) { + var target = external_jQuery_default()(element); + var source = external_jQuery_default()(source); + target.on('keyup change', function () { + target.data('locked', target.val() !== '' && target.val() !== undefined); + }); + source.on('keyup change', function () { + if (target.data('locked') === true) { + return true; + } + + var isInput = target.is('input') || target.is('textarea'); + target[isInput ? 'val' : 'text'](external_jQuery_default().slugify(source.val(), options)); + }); + }); +}; // Static method. + + +(external_jQuery_default()).slugify = function (sourceString, options) { + options = external_jQuery_default().extend({}, (external_jQuery_default()).slugify.options, options); + options.lang = options.lang || external_jQuery_default()('html').prop('lang'); + + if (typeof options.preSlug === 'function') { + sourceString = options.preSlug(sourceString); + } + + sourceString = options.slugFunc(sourceString, options); + + if (typeof options.postSlug === 'function') { + sourceString = options.postSlug(sourceString); + } + + return sourceString; +}; // Default plugin options + + +(external_jQuery_default()).slugify.options = { + preSlug: null, + postSlug: null, + slugFunc: function slugFunc(input, opts) { + return speakingurl_default()(input, opts); + } +}; +;// CONCATENATED MODULE: ./app/pages/page/add.js + + + + +var custom = false; +var folder = external_jQuery_default()('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"], [data-remodal-id="modal-page-copy"] input[name="data[folder]"]'); +var title = external_jQuery_default()('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"], [data-remodal-id="modal-page-copy"] input[name="data[title]"]'); + +var getFields = function getFields(type, target) { + target = external_jQuery_default()(target); + var query = "[data-remodal-id=\"".concat(target.closest('[data-remodal-id]').data('remodal-id'), "\"]"); + return { + title: type === 'title' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[title]\"]")), + folder: type === 'folder' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[folder]\"]")) + }; +}; + +title.on('input focus blur', function (event) { + if (custom) { + return true; + } + + var elements = getFields('title', event.currentTarget); + var slug = external_jQuery_default().slugify(elements.title.val(), { + custom: { + "'": '', + '‘': '', + '’': '' + } + }); + elements.folder.val(slug); +}); +folder.on('input', function (event) { + var elements = getFields('folder', event.currentTarget); + var input = elements.folder.get(0); + var value = elements.folder.val(); + var selection = { + start: input.selectionStart, + end: input.selectionEnd + }; + value = value.toLowerCase().replace(/\s/g, '-').replace(/[^a-z0-9_\-]/g, ''); + elements.folder.val(value); + custom = !!value; // restore cursor position + + input.setSelectionRange(selection.start, selection.end); +}); +folder.on('focus blur', function (event) { + getFields('title').title.trigger('input'); +}); +external_jQuery_default()(document).on('change', '[name="data[route]"]', function (event) { + var rawroute = external_jQuery_default()(event.currentTarget).val(); + var pageTemplate = external_jQuery_default()('[name="data[name]"]'); + var URI = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/ajax.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getChildTypes"); + + if (pageTemplate.length === 0) { + return; + } + + utils_request(URI, { + method: 'post', + body: { + rawroute: rawroute + } + }, function (response) { + var type = response.child_type; + + if (type !== '' && type !== 'default') { + pageTemplate.val(type); + pageTemplate.data('selectize').setValue(type); + } + }); +}); +;// CONCATENATED MODULE: ./app/pages/page/move.js + +external_jQuery_default()(document).on('click', '[data-page-move] button[name="task"][value="save"]', function (event) { + /* let route = $('form#blueprints:first select[name="data[route]"]'); + let moveTo = $('[data-page-move] select').val(); + if (route.length && route.val() !== moveTo) { + let selectize = route.data('selectize'); + route.val(moveTo); + if (selectize) selectize.setValue(moveTo); + }*/ + var modal = external_jQuery_default()(event.currentTarget).closest('[data-remodal-id]'); + var parents = modal.data('parents') || {}; + var finder = parents.finder; + + if (!parents || !finder) { + return true; + } + + var field = parents.field; + var parentLabel = parents.parentLabel; + var parentName = parents.parentName; + var selection = finder.findLastActive().item[0]; + var value = selection._item[finder.config.valueKey]; + var name = selection._item[finder.config.labelKey]; + field.val(value); + parentLabel.text(value); + parentName.text(name); + finder.config.defaultPath = value; + external_jQuery_default()('').css({ + backgroundColor: 'rgba(255, 255, 255, 0.1)', + position: 'fixed', + top: 0, + left: 0, + width: '100vw', + height: '100vh', + zIndex: 15000 + }).appendTo(external_jQuery_default()('body')); +}); +/* +$(document).on('click', '[data-remodal-id="parents"] [data-parents-select]', (event) => { + const modal = $(event.currentTarget).closest('[data-remodal-id]'); + const parents = modal.data('parents'); + const finder = parents.finder; + const field = parents.field; + const parentLabel = parents.parentLabel; + const parentName = parents.parentName; + const selection = finder.findLastActive().item[0]; + const value = selection._item[finder.config.valueKey]; + const name = selection._item[finder.config.labelKey]; + + field.val(value); + parentLabel.text(value); + parentName.text(name); + finder.config.defaultPath = value; + + const remodal = $.remodal.lookup[$(`[data-remodal-id="${modal.data('remodalId')}"]`).data('remodal')]; + remodal.close(); +}); +*/ +;// CONCATENATED MODULE: ./app/pages/page/delete.js + +external_jQuery_default()(document).on('click', '[data-remodal-target="delete"]', function () { + var confirm = external_jQuery_default()('[data-remodal-id="delete"] [data-delete-action]'); + var link = external_jQuery_default()(this).data('delete-url'); + confirm.data('delete-action', link); +}); +external_jQuery_default()(document).on('click', '[data-delete-action]', function () { + var remodal = (external_jQuery_default()).remodal.lookup[external_jQuery_default()('[data-remodal-id="delete"]').data('remodal')]; + __webpack_require__.g.location.href = external_jQuery_default()(this).data('delete-action'); + remodal.close(); +}); +;// CONCATENATED MODULE: ./app/pages/page/unset.js + +external_jQuery_default()(document).on('click', '.dz-unset', function () { + var file_upload = external_jQuery_default()(this).closest('.files-upload'); + external_jQuery_default()(this).closest('.dz-image-preview').remove(); + var unset_image = external_jQuery_default()(this).closest('.dz-image-preview').find('[data-dz-name]').text().trim(); + var images = JSON.parse(file_upload.find('input[data-grav-field="hidden"]').val()) || {}; + var image_array = {}; + external_jQuery_default().each(images, function (ind, obj) { + if (!ind.endsWith(unset_image)) { + image_array[ind] = obj; + } + }); + file_upload.find('input[data-grav-field="hidden"]').val(JSON.stringify(image_array)); +}); +;// CONCATENATED MODULE: ./app/pages/page/disable-buttons.js + +external_jQuery_default()('.disable-after-click').on('click', function () { + external_jQuery_default()(this).addClass('pointer-events-disabled'); +}); +;// CONCATENATED MODULE: ./app/utils/cookies.js +function cookies_typeof(obj) { "@babel/helpers - typeof"; return cookies_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, cookies_typeof(obj); } + +/* + * Cookies.js - 1.2.3-grav + * https://github.com/ScottHamper/Cookies + * + * With SameSite support by Grav + * + * This is free and unencumbered software released into the public domain. + */ +var factory = function factory(window) { + var _arguments = arguments; - if (!file.accepted || file.rejected) { - return; - } + if (cookies_typeof(window.document) !== 'object') { + throw new Error('Cookies.js requires a `window` with a `document` object'); + } - var url = file.removeUrl || this.urls["delete"] || this.options.url; - var path = (url || '').match(/path:(.*)\//); - var body = { - filename: file.name, - uri: this.getURI() - }; + var Cookies = function Cookies(key, value, options) { + return _arguments.length === 1 ? Cookies.get(key) : Cookies.set(key, value, options); + }; // Allows for setter injection in unit tests - if (file.sessionParams) { - body.task = 'filessessionremove'; - body.session = file.sessionParams; - } - var customPost = this.container.data('filePostRemove') || {}; + Cookies._document = window.document; // Used to ensure cookie keys do not collide with + // built-in `Object` properties - if (Object.keys(customPost).length) { - body = {}; - Object.keys(customPost).forEach(function (key) { - body[key] = customPost[key]; - }); - } + Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :) - body['filename'] = file.name; - body['admin-nonce'] = external_GravAdmin_namespaceObject.config.admin_nonce; - utils_request(url, { - method: 'post', - body: body - }, function () { - if (!path) { - return; - } + Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC'); + Cookies.defaults = { + path: '/', + secure: false, + sameSite: 'Lax' + }; - path = _this5.b64_to_utf8(path[1]); + Cookies.get = function (key) { + if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) { + Cookies._renewCache(); + } - var input = _this5.container.find('[name][type="hidden"]'); + var value = Cookies._cache[Cookies._cacheKeyPrefix + key]; + return value === undefined ? undefined : decodeURIComponent(value); + }; - var data = JSON.parse(input.val() || '{}'); - delete data[path]; - input.val(JSON.stringify(data)); - }); - } - }, { - key: "onDropzoneError", - value: function onDropzoneError(file, response, xhr) { - var message = xhr ? response.error.message : response; - external_jQuery_default()(file.previewElement).find('[data-dz-errormessage]').html(message); - return this.handleError({ - file: file, - data: { - status: 'error' - }, - msg: "
".concat(message, "") - }); - } - }, { - key: "handleError", - value: function handleError(options) { - var file = options.file, - data = options.data, - mode = options.mode, - msg = options.msg; + Cookies.set = function (key, value, options) { + options = Cookies._getExtendedOptions(options); + options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires); + Cookies._document.cookie = Cookies._generateCookieString(key, value, options); + return Cookies; + }; - if (data.status !== 'error' && data.status !== 'unauthorized') { - return; - } + Cookies.expire = function (key, options) { + return Cookies.set(key, undefined, options); + }; - switch (mode) { - case 'addBack': - if (file instanceof File) { - this.dropzone.addFile.call(this.dropzone, file); - } else { - this.dropzone.files.push(file); - this.dropzone.options.addedfile.call(this.dropzone, file); - this.dropzone.options.thumbnail.call(this.dropzone, file, file.extras.url); - } + Cookies._getExtendedOptions = function (options) { + return { + path: options && options.path || Cookies.defaults.path, + domain: options && options.domain || Cookies.defaults.domain, + expires: options && options.expires || Cookies.defaults.expires, + secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure, + sameSite: options && options.sameSite || Cookies.defaults.sameSite + }; + }; - break; + Cookies._isValidDate = function (date) { + return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime()); + }; - case 'removeFile': - default: - if (~this.dropzone.files.indexOf(file)) { - file.rejected = true; - this.dropzone.removeFile.call(this.dropzone, file, { - silent: true - }); - } + Cookies._getExpiresDate = function (expires, now) { + now = now || new Date(); - break; - } + if (typeof expires === 'number') { + expires = expires === Infinity ? Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000); + } else if (typeof expires === 'string') { + expires = new Date(expires); + } - var modal = external_jQuery_default()('[data-remodal-id="generic"]'); - var cleanName = file.name.replace('<', '<').replace('>', '>'); - modal.find('.error-content').html(msg.replace('{{fileName}}', cleanName)); - (external_jQuery_default()).remodal.lookup[modal.data('remodal')].open(); + if (expires && !Cookies._isValidDate(expires)) { + throw new Error('`expires` parameter cannot be converted to a valid Date instance'); } - }]); - return FilesField; -}(); + return expires; + }; + Cookies._generateCookieString = function (key, value, options) { + key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent); + key = key.replace(/\(/g, '%28').replace(/\)/g, '%29'); + value = (value + '').replace(/[^!#$&-+\--:<-\[\]-~]/g, encodeURIComponent); + options = options || {}; + var cookieString = key + '=' + value; + cookieString += options.path ? ';path=' + options.path : ''; + cookieString += options.domain ? ';domain=' + options.domain : ''; + cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : ''; + cookieString += options.secure ? ';secure' : ''; + cookieString += options.sameSite ? ';SameSite=' + options.sameSite : ''; + return cookieString; + }; -function UriToMarkdown(uri) { - uri = uri.replace(/@3x|@2x|@1x/, ''); - uri = uri.replace(/\(/g, '%28'); - uri = uri.replace(/\)/g, '%29'); - var title = uri.split('.').slice(0, -1).join('.'); - return uri.match(/\.(jpe?g|png|gif|svg|webp|mp4|webm|ogv|mov)$/i) ? ".concat(uri, " \"").concat(title, "\")") : "[".concat(decodeURI(uri), "](").concat(uri, ")"); -} -var instances = []; -var cache = external_jQuery_default()(); + Cookies._getCacheFromString = function (documentCookie) { + var cookieCache = {}; + var cookiesArray = documentCookie ? documentCookie.split('; ') : []; -var onAddedNodes = function onAddedNodes(event, target -/* , record, instance */ -) { - var files = external_jQuery_default()(target).find('.dropzone.files-upload'); + for (var i = 0; i < cookiesArray.length; i++) { + var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]); - if (!files.length) { - return; - } + if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) { + cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value; + } + } - files.each(function (index, file) { - file = external_jQuery_default()(file); + return cookieCache; + }; - if (!~cache.index(file)) { - addNode(file); + Cookies._getKeyValuePairFromCookieString = function (cookieString) { + // "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')` + var separatorIndex = cookieString.indexOf('='); // IE omits the "=" when the cookie value is an empty string + + separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex; + var key = cookieString.substr(0, separatorIndex); + var decodedKey; + + try { + decodedKey = decodeURIComponent(key); + } catch (e) { + if (console && typeof console.error === 'function') { + console.error('Could not decode cookie with key "' + key + '"', e); + } } - }); -}; -var addNode = function addNode(container) { - container = external_jQuery_default()(container); - var input = container.find('input[type="file"]'); - var settings = container.data('grav-file-settings') || {}; + return { + key: decodedKey, + value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed - if (settings.accept && ~settings.accept.indexOf('*')) { - settings.accept = ['']; - } + }; + }; - var options = { - url: container.data('file-url-add') || (container.closest('form').attr('action') || external_GravAdmin_namespaceObject.config.current_url) + '.json', - paramName: settings.paramName || 'file', - dotNotation: settings.name || 'file', - acceptedFiles: settings.accept ? settings.accept.join(',') : input.attr('accept') || container.data('media-types'), - maxFilesize: typeof settings.filesize !== 'undefined' ? settings.filesize : 256, - maxFiles: settings.limit || null, - resizeWidth: settings.resizeWidth || null, - resizeHeight: settings.resizeHeight || null, - resizeQuality: settings.resizeQuality || null, - resolution: settings.resolution || null, - accept: function accept(file, done) { - ACCEPT_FUNC(file, done, settings); - } + Cookies._renewCache = function () { + Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie); + Cookies._cachedDocumentCookie = Cookies._document.cookie; }; - cache = cache.add(container); - container = container[0]; - instances.push(new FilesField({ - container: container, - options: options - })); + + Cookies._areEnabled = function () { + var testKey = 'cookies.js'; + var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1'; + Cookies.expire(testKey); + return areEnabled; + }; + + Cookies.enabled = Cookies._areEnabled(); + return Cookies; }; -var files_Instance = function () { - external_jQuery_default()('.dropzone.files-upload').each(function (i, container) { - return addNode(container); - }); - external_jQuery_default()('body').on('mutation._grav', onAddedNodes); - return instances; -}(); +__webpack_require__.g.Cookies = __webpack_require__.g && cookies_typeof(__webpack_require__.g.document) === 'object' ? factory(__webpack_require__.g) : factory; +/* harmony default export */ const cookies = (__webpack_require__.g.Cookies); ;// CONCATENATED MODULE: ./app/forms/fields/editor/buttons.js @@ -9751,7 +9751,7 @@ external_jQuery_default()('[data-grav-elements] select').trigger('change'); }, FilesField: { FilesField: FilesField, - Instance: files_Instance + Instance: Instance }, FolderField: { Regenerate: fields_folder @@ -10119,7 +10119,7 @@ var Packages = /*#__PURE__*/function () { var current_version = ''; var available_version = ''; var _name = ''; - var resources = Instance.payload.payload.resources; + var resources = gpm_Instance.payload.payload.resources; if (resources.plugins[slug]) { available_version = resources.plugins[slug].available; @@ -10314,7 +10314,7 @@ var Packages = /*#__PURE__*/function () { var current_version = ''; var available_version = ''; var _name2 = ''; - var resources = Instance.payload.payload.resources; + var resources = gpm_Instance.payload.payload.resources; if (resources.plugins[slug]) { available_version = resources.plugins[slug].available; @@ -11799,6 +11799,7 @@ var sidebar_Instance = new Sidebar(); + // bootstrap jQuery extensions @@ -11823,7 +11824,7 @@ external_jQuery_default()(__webpack_require__.g).on('sidebar_state._grav', funct /* harmony default export */ const main = ({ GPM: { GPM: GPM, - Instance: Instance + Instance: gpm_Instance }, KeepAlive: keepalive, Dashboard: dashboard, @@ -11854,7 +11855,8 @@ external_jQuery_default()(__webpack_require__.g).on('sidebar_state._grav', funct Utils: { request: utils_request, toastr: utils_toastr, - Cookies: cookies + Cookies: cookies, + UriToMarkdown: UriToMarkdown } }); diff --git a/themes/grav/templates/partials/dashboard-pages.html.twig b/themes/grav/templates/partials/dashboard-pages.html.twig index 7f3b4927f..501e21191 100644 --- a/themes/grav/templates/partials/dashboard-pages.html.twig +++ b/themes/grav/templates/partials/dashboard-pages.html.twig @@ -1,4 +1,4 @@ -{% if authorize(['admin.pages', 'admin.super']) %} +{% if authorize(['admin.pages.list', 'admin.pages', 'admin.super']) %}