[
  {
    "path": ".gitignore",
    "content": "vendor/\n_connector/\npublic/\ncomposer.lock\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Software License Agreement\n==========================\n\nCopyright (c) 2023, CKSource Holding sp. z o.o. All rights reserved.\n\nCKFinder package for Laravel is licensed under the terms of the MIT license (see Appendix A).\n\nTrademarks\n----------\n\nCKFinder is a trademark of CKSource Holding sp. z o.o. All other brand\nand product names are trademarks, registered trademarks or service\nmarks of their respective holders.\n\nSources of Intellectual Property required by package\n----------------------------------------------------\n\nThe installation instruction requires user to run the following command to download\nCKFinder separately (the file manager itself):\n\n```bash\nartisan ckfinder:download\n```\n\nThe downloaded CKFinder distribution is licensed under a separate CKFinder License.\n\n---\n\nAppendix A: The MIT License\n---------------------------\n\nThe MIT License (MIT)\n\nCopyright (c) 2023, CKSource Holding sp. z o.o. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<h3 align=\"center\"><img src=\"https://user-images.githubusercontent.com/803299/42567830-6b6d3ad6-850b-11e8-9151-43021c92d8b7.png\"></h3>\n\n# CKFinder 3 Package for Laravel 9+ [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Check%20out%20CKFinder%20package%20for%20Laravel%20&url=https://github.com/ckfinder/ckfinder-laravel-package)\n\n[![Laravel version](https://img.shields.io/badge/Laravel-9+-green.svg)]()\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Packagist](https://img.shields.io/packagist/v/ckfinder/ckfinder-laravel-package.svg)](https://packagist.org/packages/ckfinder/ckfinder-laravel-package)\n[![Packagist](https://img.shields.io/packagist/dt/ckfinder/ckfinder-laravel-package.svg)](https://packagist.org/packages/ckfinder/ckfinder-laravel-package)\n[![Join newsletter](https://img.shields.io/badge/join-newsletter-00cc99.svg)](http://eepurl.com/c3zRPr)\n[![Follow twitter](https://img.shields.io/badge/follow-twitter-00cc99.svg)](https://twitter.com/ckeditor)\n\nThis repository contains the CKFinder 3 Package for Laravel 9+. If you are looking for a package for older version of Laravel, please use [version 3](https://github.com/ckfinder/ckfinder-laravel-package/tree/v3.x.x).\n\n<h3 align=\"center\"><a href=\"https://ckeditor.com/docs/ckfinder/demo/ckfinder3/samples/widget.html\"><img src=\"https://user-images.githubusercontent.com/803299/42693315-18717aae-86af-11e8-863a-74070edb3912.png\"></a></h3>\n\n## Installation\n\n1. Add a Composer dependency and install the package.\n\n    ```bash\n    composer require ckfinder/ckfinder-laravel-package\n    ```\n\n2. Run the command to download the CKFinder code.\n\n    After installing the Laravel package you need to download CKFinder code. It is not shipped with the package due to different license terms. To install it, run the following `artisan` command:\n\n    ```bash\n    php artisan ckfinder:download\n    ```\n\n    It will download the required code and place it inside an appropriate directory of the package (`vendor/ckfinder/ckfinder-laravel-package/`).\n\n3. Publish the CKFinder connector configuration and assets.\n\n    ```bash\n    php artisan vendor:publish --tag=ckfinder-assets --tag=ckfinder-config\n    ```\n\n    This will publish CKFinder assets to `public/js/ckfinder`, and the CKFinder connector configuration to `config/ckfinder.php`.\n    \n    You can also publish the views used by this package in case you need custom route names, different assets location, file browser customization etc.\n    \n    ```bash\n    php artisan vendor:publish --tag=ckfinder-views\n    ```\n    \n    Finally, you can publish package's configuration, assets and views using only one command.\n    \n    ```bash\n    php artisan vendor:publish --tag=ckfinder\n    ```\n\n4. Create a directory for CKFinder files and allow for write access to it. By default CKFinder expects the files to be placed in `public/userfiles` (this can be altered in the configuration).\n\n    ```bash\n    mkdir -m 777 public/userfiles\n    ```\n\n    **NOTE:** Since usually setting permissions to `0777` is insecure, it is advisable to change the group ownership of the directory to the same user as Apache and add group write permissions instead. Please contact your system administrator in case of any doubts.\n\n\n5. CKFinder by default uses a CSRF protection mechanism based on [double submit cookies](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie). On some configurations it may be required to configure Laravel not to encrypt the cookie set by CKFinder. To do that:\n\n    **For Laravel <= 10:**\n\n    Please add the cookie name `ckCsrfToken` to the `$except` property of `EncryptCookies` middleware:\n\n    ```php\n    // app/Http/Middleware/EncryptCookies.php\n\n    namespace App\\Http\\Middleware;\n\n    use Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\n    class EncryptCookies extends Middleware\n    {\n        /**\n         * The names of the cookies that should not be encrypted.\n         *\n         * @var array\n         */\n        protected $except = [\n            'ckCsrfToken',\n            // ...\n        ];\n    }\n    ```\n\n    You should also disable Laravel's CSRF protection for CKFinder's path, as CKFinder uses its own CSRF protection mechanism. This can be done by adding `ckfinder/*` pattern to the `$except` property of `VerifyCsrfToken` middleware:\n\n    ```php\n    // app/Http/Middleware/VerifyCsrfToken.php\n\n    namespace App\\Http\\Middleware;\n\n    use Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\n    class VerifyCsrfToken extends Middleware\n    {\n        /**\n         * The URIs that should be excluded from CSRF verification.\n         *\n         * @var array\n         */\n        protected $except = [\n            'ckfinder/*',\n            // ...\n        ];\n    }\n    ```\n\n    **For Laravel >= 11:**\n\n    Two calls must be added, which introduce exceptions in CSRF protection mechanism.\n\n    First one configure Laravel not to encrypt the cookie set by CKFinder:\n\n    ```php\n    $middleware->encryptCookies(except: [\n        'ckCsrfToken',\n    ]);\n    ```\n\n    Second one disables Laravel's CSRF protection for CKFinder's path:\n\n    ```php\n    $middleware->validateCsrfTokens(except: [\n        'ckfinder/*'\n    ]);\n    ```\n\n    File `bootstrap/app.php` should look like this:\n\n    ```php\n    // bootstrap/app.php\n    use Illuminate\\Foundation\\Application;\n    use Illuminate\\Foundation\\Configuration\\Exceptions;\n    use Illuminate\\Foundation\\Configuration\\Middleware;\n\n    return Application::configure(basePath: dirname(__DIR__))\n        ->withRouting(\n            web: __DIR__.'/../routes/web.php',\n            commands: __DIR__.'/../routes/console.php',\n            health: '/up',\n        )\n        ->withMiddleware(function (Middleware $middleware): void {\n            $middleware->validateCsrfTokens(except: [\n                'ckfinder/*'\n            ]);\n            $middleware->encryptCookies(except: [\n                'ckCsrfToken',\n            ]);\n        })\n        ->withExceptions(function (Exceptions $exceptions): void {\n        })->create();\n    ```\n\nAt this point you should see the connector JSON response after navigating to the `<APP BASE URL>/ckfinder/connector?command=Init` address.\nAuthentication for CKFinder is not configured yet, so you will see an error response saying that CKFinder is not enabled.\n\n## Configuring Authentication\n\nCKFinder connector authentication is handled by [middleware](https://laravel.com/docs/5.8/middleware) class or alias. To create the custom middleware class, use the artisan command:\n\n```bash\nphp artisan make:middleware CustomCKFinderAuth\n```\n\nThe new middleware class will appear in `app/Http/Middleware/CustomCKFinderAuth.php`. Change the `authentication` option in `config/ckfinder.php`:\n\n```php\n$config['authentication'] = '\\App\\Http\\Middleware\\CustomCKFinderAuth';\n```\n\nThe `handle` method in `CustomCKFinderAuth` class allows to authenticate CKFinder users. A basic implementation that returns `true` from the `authentication` callable (which is obviously **not secure**) can look like below:\n\n```php\npublic function handle($request, Closure $next)\n{\n    config(['ckfinder.authentication' => function() {\n        return true;\n    }]);\n    return $next($request);\n}\n```\n\nPlease have a look at the [CKFinder for PHP connector documentation](https://ckeditor.com/docs/ckfinder/ckfinder3-php/configuration.html#configuration_options_authentication) to find out\nmore about this option.\n\n**Note**:\nAlternatively, you can set the configuration option `$config['loadRoutes'] = false;` in `config/ckfinder.php`. Then you copy the routes from `vendor/ckfinder/ckfinder-laravel-package/src/routes.php` to your application routes such as ```routes/web.php``` to protect them with your Laravel auth middleware. \n\n```php\nRoute::any('/ckfinder/connector', '\\CKSource\\CKFinderBridge\\Controller\\CKFinderController@requestAction')\n    ->name('ckfinder_connector');\n\nRoute::any('/ckfinder/browser', '\\CKSource\\CKFinderBridge\\Controller\\CKFinderController@browserAction')\n    ->name('ckfinder_browser');\n```\n\n## Configuration Options\n\nThe CKFinder connector configuration is taken from the `config/ckfinder.php` file.\n\nTo find out more about possible connector configuration options please refer to the [CKFinder for PHP connector documentation](https://ckeditor.com/docs/ckfinder/ckfinder3-php/configuration.html).\n\n## Usage\n\nThe package code contains a couple of usage examples that you may find useful. To enable them, uncomment the `ckfinder_examples`\nroute in `vendor/ckfinder/ckfinder-laravel-package/src/routes.php`:\n\n```php\n// vendor/ckfinder/ckfinder-laravel-package/src/routes.php\n\nRoute::any('/ckfinder/examples/{example?}', 'CKSource\\CKFinderBridge\\Controller\\CKFinderController@examplesAction')\n    ->name('ckfinder_examples');\n```\n\nAfter that you can navigate to the `<APP BASE URL>/ckfinder/examples` path and have a look at the list of available examples.\nTo find out about the code behind them, check the `views/samples` directory in the package (`vendor/ckfinder/ckfinder-laravel-package/views/samples/`).\n\n### Including the Main CKFinder JavaScript File in Templates\n\nTo be able to use CKFinder on a web page you have to include the main CKFinder JavaScript file.\nThe preferred way to do that is to include the CKFinder setup template, as shown below:\n\n```blade\n@include('ckfinder::setup')\n```\n\nThe included template renders the required `script` tags and configures a valid connector path.\n\n```html\n<script type=\"text/javascript\" src=\"/js/ckfinder/ckfinder.js\"></script>\n<script>CKFinder.config( { connectorPath: '/ckfinder/connector' } );</script>\n```\n\n---\n\n## Useful Links\n\n * [CKFinder 3 usage examples](https://ckeditor.com/docs/ckfinder/demo/ckfinder3/samples/widget.html)\n * [CKFinder 3 for PHP connector documentation](https://ckeditor.com/docs/ckfinder/ckfinder3-php/)\n * [CKFinder 3 Developer's Guide](https://ckeditor.com/docs/ckfinder/ckfinder3/)\n * [CKFinder 3 issue tracker](https://github.com/ckfinder/ckfinder)\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"ckfinder/ckfinder-laravel-package\",\n    \"description\": \"CKFinder 3 package for Laravel\",\n    \"type\": \"library\",\n    \"license\": \"MIT\",\n    \"require\": {\n        \"php\": \">=8.1.0\",\n        \"laravel/framework\": \"^9.0|^10.0|^11.0|^12.0\",\n        \"pimple/pimple\": \"~3.0\",\n        \"league/flysystem\": \"^3.0\",\n        \"league/flysystem-aws-s3-v3\": \"^3.0\",\n        \"league/flysystem-azure-blob-storage\": \"^3.0\",\n        \"league/flysystem-ftp\": \"^3.0\",\n        \"spatie/flysystem-dropbox\": \"^2.0|^3.0\",\n        \"ext-json\": \"*\",\n        \"ext-gd\": \"*\",\n        \"ext-zip\": \"*\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"CKSource\\\\CKFinderBridge\\\\\": \"src/\",\n            \"CKSource\\\\CKFinder\\\\\": \"_connector/\"\n        }\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"providers\": [\n                \"CKSource\\\\CKFinderBridge\\\\CKFinderServiceProvider\"\n            ]\n        }\n    }\n}\n"
  },
  {
    "path": "src/CKFinderMiddleware.php",
    "content": "<?php\n\nnamespace CKSource\\CKFinderBridge;\n\nuse Closure;\n\nclass CKFinderMiddleware\n{\n    public function handle($request, Closure $next)\n    {\n        config(['ckfinder.authentication' => function() use ($request) {\n\n            return false;\n        }] );\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "src/CKFinderServiceProvider.php",
    "content": "<?php\n\nnamespace CKSource\\CKFinderBridge;\n\nuse CKSource\\CKFinderBridge\\Command\\CKFinderDownloadCommand;\nuse Illuminate\\Support\\ServiceProvider;\nuse Symfony\\Component\\HttpKernel\\HttpKernel;\nuse Symfony\\Component\\HttpKernel\\Kernel;\n\nclass CKFinderServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap.\n     */\n    public function boot()\n    {\n        if (config('ckfinder.loadRoutes')) {\n            $this->loadRoutesFrom(__DIR__.'/routes.php');\n        }\n        $this->loadViewsFrom(__DIR__.'/../views', 'ckfinder');\n\n        if ($this->app->runningInConsole()) {\n            $this->commands([CKFinderDownloadCommand::class]);\n\n            $this->publishes([\n                __DIR__.'/config.php' => config_path('ckfinder.php')\n            ], ['ckfinder-config']);\n\n            $this->publishes([\n                __DIR__.'/../public' => public_path('js')\n            ], ['ckfinder-assets']);\n\n            $this->publishes([\n                __DIR__.'/../views/setup.blade.php' => resource_path('views/vendor/ckfinder/setup.blade.php'),\n                __DIR__.'/../views/browser.blade.php' => resource_path('views/vendor/ckfinder/browser.blade.php')\n            ], ['ckfinder-views']);\n\n            return;\n        }\n\n        $this->app->bind('ckfinder.connector', function() {\n            if (!class_exists('\\CKSource\\CKFinder\\CKFinder')) {\n                throw new \\Exception(\n                    \"Couldn't find CKFinder conector code. \".\n                    \"Please run `artisan ckfinder:download` command first.\"\n                );\n            }\n\n            $ckfinderConfig = config('ckfinder');\n\n            if (is_null($ckfinderConfig)) {\n                throw new \\Exception(\n                    \"Couldn't load CKFinder configuration file. \".\n                    \"Please run `artisan vendor:publish --tag=ckfinder` command first.\"\n                );\n            }\n\n            $ckfinder = new \\CKSource\\CKFinder\\CKFinder($ckfinderConfig);\n\n            return $ckfinder;\n        });\n    }\n}\n"
  },
  {
    "path": "src/Command/CKFinderDownloadCommand.php",
    "content": "<?php\n\nnamespace CKSource\\CKFinderBridge\\Command;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Filesystem\\Filesystem;\nuse Symfony\\Component\\HttpKernel\\Kernel;\n\nclass CKFinderDownloadCommand extends Command\n{\n    const LATEST_VERSION = '3.7.1';\n\n    protected $name = 'ckfinder:download';\n\n    protected $description = 'Downloads the CKFinder distribution package and extracts assets.';\n\n    /**\n     * Creates URL to CKFinder distribution package.\n     *\n     * @return string\n     */\n    protected function buildPackageUrl()\n    {\n        return \"http://download.cksource.com/CKFinder/CKFinder%20for%20PHP/\" . self::LATEST_VERSION . \"/ckfinder_php_\" . self::LATEST_VERSION . \".zip\";\n    }\n\n    /**\n     * Handles command execution.\n     */\n    public function handle()\n    {\n        $targetPublicPath = realpath(__DIR__ . '/../../public/');\n\n        if (!is_writable($targetPublicPath)) {\n            $this->error('The target public directory is not writable (used path: ' . $targetPublicPath . ').');\n\n            return;\n        }\n\n        $targetConnectorPath = realpath(__DIR__ . '/../../_connector');\n\n        if (!is_writable($targetConnectorPath)) {\n            $this->error('The the connector directory is not writable (used path: ' . $targetConnectorPath . ').');\n\n            return;\n        }\n\n        if (file_exists($targetPublicPath.'/ckfinder/ckfinder.js')) {\n            $questionText =\n                'It looks like the CKFinder distribution package has already been installed. ' .\n                \"This command will overwrite the existing files.\\nDo you want to proceed? [y/n]: \";\n\n            if (!$this->confirm($questionText)) {\n                return;\n            }\n        }\n\n        /** @var \\Symfony\\Component\\Console\\Helper\\ProgressBar $progressBar */\n        $progressBar = null;\n\n        $maxBytes = 0;\n        $ctx = stream_context_create([], [\n            'notification' =>\n                function ($notificationCode, $severity, $message, $messageCode, $bytesTransferred, $bytesMax) use (&$maxBytes, &$progressBar) {\n                    switch ($notificationCode) {\n                        case STREAM_NOTIFY_FILE_SIZE_IS:\n                            $maxBytes = $bytesMax;\n                            $progressBar = $this->output->createProgressBar($bytesMax);\n                            break;\n                        case STREAM_NOTIFY_PROGRESS:\n                            $progressBar->setProgress($bytesTransferred);\n                            break;\n                    }\n                }\n        ]);\n\n        $this->info('Downloading the CKFinder 3 distribution package.');\n\n        $zipContents = @file_get_contents($this->buildPackageUrl(), false, $ctx);\n\n        if ($zipContents === false) {\n            $this->error('Could not download the distribution package of CKFinder.');\n\n            return;\n        }\n\n        if ($progressBar) {\n            $progressBar->finish();\n        }\n\n        $this->line(\"\\n\" . 'Extracting CKFinder to the ' . $targetPublicPath . ' directory.');\n\n        $tempZipFile = tempnam(sys_get_temp_dir(), 'tmp');\n        file_put_contents($tempZipFile, $zipContents);\n        $zip = new \\ZipArchive();\n        $zip->open($tempZipFile);\n\n        $zipEntries = [];\n\n        // These files won't be overwritten if already exists\n        $filesToKeep = [\n            'ckfinder/config.js',\n            'ckfinder/ckfinder.html'\n        ];\n\n        for ($i = 0; $i < $zip->numFiles; $i++) {\n            $entry = $zip->getNameIndex($i);\n\n            if (in_array($entry, $filesToKeep) && file_exists($targetPublicPath . '/' . $entry)) {\n                continue;\n            }\n\n            $zipEntries[] = $entry;\n        }\n\n        $zip->extractTo($targetPublicPath, $zipEntries);\n\n        $fs = new Filesystem();\n\n        $this->line('Moving the CKFinder connector to the ' . $targetConnectorPath . ' directory.');\n        $fs->moveDirectory(\n            $targetPublicPath . '/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder',\n            $targetConnectorPath,\n            true\n        );\n\n        $this->line('Cleaning up.');\n\n        $fs->delete([\n            $tempZipFile,\n            $targetPublicPath . '/ckfinder/config.php',\n            $targetPublicPath . '/ckfinder/README.md',\n            $targetConnectorPath . '/README.md'\n        ]);\n\n        $fs->deleteDirectory($targetPublicPath . '/ckfinder/core');\n        $fs->deleteDirectory($targetPublicPath . '/ckfinder/userfiles');\n\n\n        $this->info('Done. Happy coding!');\n    }\n}\n"
  },
  {
    "path": "src/Controller/CKFinderController.php",
    "content": "<?php\n\nnamespace CKSource\\CKFinderBridge\\Controller;\n\nuse CKSource\\CKFinder\\CKFinder;\nuse \\Illuminate\\Routing\\Controller;\nuse Psr\\Container\\ContainerInterface;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpKernel\\HttpKernelInterface;\n\n/**\n * Controller for handling requests to CKFinder connector.\n */\nclass CKFinderController extends Controller\n{\n    /**\n     * Use custom middleware to handle custom authentication and redirects.\n     */\n    public function __construct()\n    {\n        $authenticationMiddleware = config('ckfinder.authentication');\n\n        if(!is_callable($authenticationMiddleware)) {\n            if(isset($authenticationMiddleware) && is_string($authenticationMiddleware)) {\n                $this->middleware($authenticationMiddleware);\n            } else {\n                $this->middleware(\\CKSource\\CKFinderBridge\\CKFinderMiddleware::class);\n            }\n        }\n    }\n\n    /**\n     * Action that handles all CKFinder requests.\n     *\n     * @param ContainerInterface $container\n     * @param Request $request\n     *\n     * @return \\Symfony\\Component\\HttpFoundation\\Response\n     */\n    public function requestAction(ContainerInterface $container, Request $request)\n    {\n        /** @var CKFinder $connector */\n        $connector = $container->get('ckfinder.connector');\n\n        // If debug mode is enabled then do not catch exceptions and pass them directly to Laravel.\n        $enableDebugMode = config('ckfinder.debug');\n\n        return $connector->handle($request, HttpKernelInterface::MAIN_REQUEST, !$enableDebugMode);\n    }\n\n    /**\n     * Action that displays CKFinder browser.\n     *\n     * @return string\n     */\n    public function browserAction(ContainerInterface $container, Request $request)\n    {\n        return view('ckfinder::browser');\n    }\n\n    /**\n     * Action for CKFinder usage examples.\n     *\n     * To browse examples, please uncomment ckfinder_examples route in\n     * vendor/ckfinder/ckfinder-laravel-package/src/routes.php\n     *\n     * @param string|null $example\n     */\n    public function examplesAction($example = null)\n    {\n        $example = strtolower($example);\n\n        $knownExamples = [\n            'integration'     => ['widget', 'popups', 'modals', 'full-page', 'full-page-open'],\n            'ckeditor'        => ['ckeditor'],\n            'skins'           => ['skins-moono', 'skins-jquery-mobile'],\n            'user-interface'  => ['user-interface-default', 'user-interface-compact', 'user-interface-mobile', 'user-interface-listview'],\n            'localization'    => ['localization'],\n            'other'           => ['other-read-only', 'other-custom-configuration'],\n            'plugin-examples' => ['plugin-examples'],\n        ];\n\n        $navInfo = ['section' => null, 'sample' => null];\n\n        foreach ($knownExamples as $section => $examples) {\n            if (in_array($example, $examples)) {\n                $navInfo['section'] = $section;\n                $navInfo['sample'] = $example;\n\n                return view('ckfinder::samples/'.$example, $navInfo);\n            }\n        }\n\n        return view('ckfinder::samples/index', $navInfo);\n    }\n}\n"
  },
  {
    "path": "src/config.php",
    "content": "<?php\n\n/*\n * CKFinder Configuration File\n *\n * For the official documentation visit http://docs.cksource.com/ckfinder3-php/\n */\n\n/*============================ PHP Error Reporting ====================================*/\n// http://docs.cksource.com/ckfinder3-php/debugging.html\n\n// Production\n//error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);\n//ini_set('display_errors', 0);\n\n// Development\n// error_reporting(E_ALL);\n// ini_set('display_errors', 1);\n\n/*============================ General Settings =======================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html\n\n$config = array();\n\n$config['loadRoutes'] = true;\n\n$config['authentication'] = '\\CKSource\\CKFinderBridge\\CKFinderMiddleware';\n\n/*============================ License Key ============================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_licenseKey\n\n$config['licenseName'] = '';\n$config['licenseKey']  = '';\n\n/*============================ CKFinder Internal Directory ============================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_privateDir\n\n$config['privateDir'] = array(\n    'backend' => 'laravel_cache',\n    'tags'    => 'ckfinder/tags',\n    'cache'   => 'ckfinder/cache',\n    'thumbs'  => 'ckfinder/cache/thumbs',\n    'logs'    => array(\n        'backend' => 'laravel_logs',\n        'path'    => 'ckfinder/logs'\n    )\n);\n\n/*============================ Images and Thumbnails ==================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_images\n\n$config['images'] = array(\n    'maxWidth'  => 1600,\n    'maxHeight' => 1200,\n    'quality'   => 80,\n    'sizes' => array(\n        'small'  => array('width' => 480, 'height' => 320, 'quality' => 80),\n        'medium' => array('width' => 600, 'height' => 480, 'quality' => 80),\n        'large'  => array('width' => 800, 'height' => 600, 'quality' => 80)\n    )\n);\n\n/*=================================== Backends ========================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_backends\n\n// The two backends defined below are internal CKFinder backends for cache and logs.\n// Plase do not change these, unless you really want it.\n$config['backends']['laravel_cache'] = array(\n    'name'         => 'laravel_cache',\n    'adapter'      => 'local',\n    'root'         => storage_path('framework/cache')\n);\n\n$config['backends']['laravel_logs'] = array(\n    'name'         => 'laravel_logs',\n    'adapter'      => 'local',\n    'root'         => storage_path('logs')\n);\n\n// Backends\n\n$config['backends']['default'] = array(\n    'name'         => 'default',\n    'adapter'      => 'local',\n    'baseUrl'      => config('app.url').'/userfiles/',\n    'root'         => public_path('/userfiles/'),\n    'chmodFiles'   => 0777,\n    'chmodFolders' => 0755,\n    'filesystemEncoding' => 'UTF-8'\n);\n\n/*================================ Resource Types =====================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_resourceTypes\n\n$config['defaultResourceTypes'] = '';\n\n$config['resourceTypes'][] = array(\n    'name'              => 'Files', // Single quotes not allowed.\n    'directory'         => 'files',\n    'maxSize'           => 0,\n    'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,webp,wma,wmv,xls,xlsx,zip',\n    'deniedExtensions'  => '',\n    'backend'           => 'default'\n);\n\n$config['resourceTypes'][] = array(\n    'name'              => 'Images',\n    'directory'         => 'images',\n    'maxSize'           => 0,\n    'allowedExtensions' => 'bmp,gif,jpeg,jpg,png,webp',\n    'deniedExtensions'  => '',\n    'backend'           => 'default'\n);\n\n/*================================ Access Control =====================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_roleSessionVar\n\n$config['roleSessionVar'] = 'CKFinder_UserRole';\n\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_accessControl\n$config['accessControl'][] = array(\n    'role'                => '*',\n    'resourceType'        => '*',\n    'folder'              => '/',\n\n    'FOLDER_VIEW'         => true,\n    'FOLDER_CREATE'       => true,\n    'FOLDER_RENAME'       => true,\n    'FOLDER_DELETE'       => true,\n\n    'FILE_VIEW'           => true,\n    'FILE_UPLOAD'         => true,\n    'FILE_RENAME'         => true,\n    'FILE_DELETE'         => true,\n\n    'IMAGE_RESIZE'        => true,\n    'IMAGE_RESIZE_CUSTOM' => true\n);\n\n\n/*================================ Other Settings =====================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html\n\n$config['overwriteOnUpload'] = false;\n$config['checkDoubleExtension'] = true;\n$config['disallowUnsafeCharacters'] = false;\n$config['secureImageUploads'] = true;\n$config['checkSizeAfterScaling'] = true;\n$config['htmlExtensions'] = array('html', 'htm', 'xml', 'js');\n$config['hideFolders'] = array('.*', 'CVS', '__thumbs');\n$config['hideFiles'] = array('.*');\n$config['forceAscii'] = false;\n$config['xSendfile'] = false;\n\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_debug\n$config['debug'] = false;\n\n/*==================================== Plugins ========================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_plugins\n\n$config['plugins'] = array();\n\n/*================================ Cache settings =====================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_cache\n\n$config['cache'] = array(\n    'imagePreview' => 24 * 3600,\n    'thumbnails'   => 24 * 3600 * 365\n);\n\n/*============================ Temp Directory settings ================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_tempDirectory\n\n$config['tempDirectory'] = sys_get_temp_dir();\n\n/*============================ Session Cause Performance Issues =======================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_sessionWriteClose\n\n$config['sessionWriteClose'] = true;\n\n/*================================= CSRF protection ===================================*/\n// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_csrfProtection\n\n$config['csrfProtection'] = true;\n\n/*============================== End of Configuration =================================*/\n\n/**\n * Config must be returned - do not change it.\n */\nreturn $config;\n"
  },
  {
    "path": "src/routes.php",
    "content": "<?php\n\nRoute::any('/ckfinder/connector', '\\CKSource\\CKFinderBridge\\Controller\\CKFinderController@requestAction')\n    ->name('ckfinder_connector');\n\nRoute::any('/ckfinder/browser', '\\CKSource\\CKFinderBridge\\Controller\\CKFinderController@browserAction')\n    ->name('ckfinder_browser');\n\n//Route::any('/ckfinder/examples/{example?}', '\\CKSource\\CKFinderBridge\\Controller\\CKFinderController@examplesAction')\n//    ->name('ckfinder_examples');\n"
  },
  {
    "path": "views/browser.blade.php",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2007-2018, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.html or https://ckeditor.com/sales/license/ckfinder\n-->\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,user-scalable=no\">\n    <title>CKFinder 3 - File Browser</title>\n</head>\n<body>\n\n@include('ckfinder::setup')\n\n<script>\n\tCKFinder.start();\n</script>\n\n</body>\n</html>\n\n"
  },
  {
    "path": "views/samples/ckeditor.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n    <h1>CKEditor Integration</h1>\n\n    <h2>CKEditor 5</h2>\n    <p>To integrate CKFinder with CKEditor 5\n        all you have to do is pass some additional configuration options to CKEditor:</p>\n    <pre class=\"prettyprint\"><code>ClassicEditor\n\t.create( document.querySelector( '#editor2' ), {\n\t\tckfinder: {\n            // Use named route for CKFinder connector entry point\n\t\t\tuploadUrl: '@{{ route('ckfinder_connector') }}?command=QuickUpload&type=Files'\n\t\t}\n\t} )\n\t.catch( error => {\n\t\tconsole.error( error );\n\t} );\n</code></pre>\n    <p>The sample below presents the result of the integration. Try <strong>pasting images from clipboard</strong> directly into the editing area as well as <strong>dropping images</strong> &mdash; the files will be saved on the fly by CKFinder.</p>\n    <div id=\"editor2\"></div>\n\n    <h2>CKEditor 4</h2>\n    <p>To <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/guide/dev_ckeditor\">integrate CKFinder with CKEditor</a>\n        all you have to do is pass some additional configuration options to CKEditor:</p>\n    <pre class=\"prettyprint\"><code>CKEDITOR.replace( 'editor1', {\n\t// Use named CKFinder browser route\n\tfilebrowserBrowseUrl: '@{{ route('ckfinder_browser') }}',\n\t// Use named CKFinder connector route\n\tfilebrowserUploadUrl: '@{{ route('ckfinder_connector') }}?command=QuickUpload&type=Files'\n} );</code></pre>\n    <p>It is also possible to use <code>CKFinder.setupCKEditor()</code> as shown below, to automatically setup integration between CKEditor and CKFinder:</p>\n    <pre class=\"prettyprint\"><code>var editor = CKEDITOR.replace( 'ckfinder' );\nCKFinder.setupCKEditor( editor );</code></pre>\n    <p>The sample below presents the result of the integration. You can manage and select files from your server when creating links or embedding images in CKEditor 4 content. In modern browsers you may also try <strong>pasting images from clipboard</strong> directly into the editing area as well as <strong>dropping images</strong> &mdash; the files will be saved on the fly by CKFinder.</p>\n    <div id=\"editor1\"></div>\n@stop\n\n@section('scripts')\n    <style>\n        .ck-editor__editable {\n            min-height: 200px;\n        }\n    </style>\n    <script src=\"https://cdn.ckeditor.com/4.20.0/standard-all/ckeditor.js\"></script>\n    <script src=\"https://cdn.ckeditor.com/ckeditor5/35.3.0/classic/ckeditor.js\"></script>\n    <script>\n\t\t// Note: in this sample we use CKEditor with two extra plugins:\n\t\t// - uploadimage to support pasting and dragging images,\n\t\t// - image2 (instead of image) to provide images with captions.\n\t\t// Additionally, the CSS style for the editing area has been slightly modified to provide responsive images during editing.\n\t\t// All these modifications are not required by CKFinder, they just provide better user experience.\n\t\tif ( typeof CKEDITOR !== 'undefined' ) {\n\t\t\tCKEDITOR.disableAutoInline = true;\n\t\t\tCKEDITOR.addCss( 'img {max-width:100%; height: auto;}' );\n\t\t\tvar editor = CKEDITOR.replace( 'editor1', {\n\t\t\t\textraPlugins: 'uploadimage,image2',\n\t\t\t\tremovePlugins: 'image',\n\t\t\t\theight:250\n\t\t\t} );\n\t\t\tCKFinder.setupCKEditor( editor );\n\t\t} else {\n\t\t\tdocument.getElementById( 'editor1' ).innerHTML =\n\t\t\t\t'<div class=\"tip-a tip-a-alert\">This sample requires working Internet connection to load CKEditor 4 from CDN.</div>'\n\t\t}\n\n\t\tif ( typeof ClassicEditor !== 'undefined' ) {\n\t\t\tClassicEditor\n\t\t\t\t.create( document.querySelector( '#editor2' ), {\n\t\t\t\t\tckfinder: {\n\t\t\t\t\t\t// To avoid issues, set it to an absolute path that does not start with dots, e.g. '/ckfinder/core/php/(...)'\n\t\t\t\t\t\tuploadUrl: '{{ route('ckfinder_connector') }}?command=QuickUpload&type=Files&responseType=json'\n\t\t\t\t\t},\n\t\t\t\t\ttoolbar: [ 'ckfinder', 'imageUpload', '|', 'heading', '|', 'bold', 'italic', '|', 'undo', 'redo' ]\n\t\t\t\t} )\n\t\t\t\t.then( function( editor ) {\n\t\t\t\t\t// console.log( editor );\n\t\t\t\t} )\n\t\t\t\t.catch( function( error ) {\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t} );\n\t\t} else {\n\t\t\tdocument.getElementById( 'editor2' ).innerHTML =\n\t\t\t\t'<div class=\"tip-a tip-a-alert\">This sample requires working Internet connection to load CKEditor 5 from CDN.</div>'\n\t\t}\n\n    </script>\n    <script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/full-page-open.blade.php",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,user-scalable=no\">\n\n    <title>CKFinder 3 - Full Page Sample</title>\n</head>\n<body>\n@include('ckfinder::setup')\n<script>\n\tvar finder;\n\n\tCKFinder.start( {\n\t\tonInit: function( instance ) {\n\t\t\tfinder = instance;\n\t\t}\n\t} );\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "views/samples/full-page.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Full Page Mode</h1>\n\n\t<p>The <strong>full page</strong> mode opens CKFinder using the entire page as the working area.</p>\n\t<pre class=\"prettyprint\"><code>CKFinder.start();</code></pre>\n\t<p>Click the button below to open CKFinder in full page mode.</p>\n\n\t<a href=\"{{ route('ckfinder_examples', ['example' => 'full-page-open']) }}\" class=\"button-a button-a-background\" target=\"_blank\">Open CKFinder</a>\n@stop\n\n@section('scripts')\n    <script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/index.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n    <h1>CKFinder Samples</h1>\n    <p>This page presents a few samples of CKFinder 3 features. Use the navigation menu on the left side to browse all samples.</p>\n    <p>For more detailed information about CKFinder and its features please refer to documentation pages:</p>\n    <ul>\n        <li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/\">CKFinder 3 documentation</a></li>\n        <li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3-php/\">CKFinder 3 PHP connector documentation</a></li>\n    </ul>\n    <p>In case of any issues or suggestions please feel free to <a href=\"http://cksource.com/contact\">contact us</a>.</p>\n@stop\n"
  },
  {
    "path": "views/samples/layout.blade.php",
    "content": "<!DOCTYPE html>\n<!--\nCopyright (c) 2007-2018, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.html or https://ckeditor.com/sales/license/ckfinder\n-->\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>CKFinder 3 Samples</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!--[if lt IE 9]>\n    <script src=\"{{ asset('js/ckfinder/samples/js/html5shiv.min.js') }}\"></script>\n    <![endif]-->\n    <link href=\"{{ asset('js/ckfinder/samples/css/sample.css') }}\" rel=\"stylesheet\">\n<body>\n<header class=\"header-a\">\n    <div class=\"grid-container\">\n        <h1 class=\"header-a-logo grid-width-30\">\n            <a href=\"{{ route('ckfinder_examples') }}\"><img src=\"{{ asset('js/ckfinder/samples/img/logo.png') }}\" alt=\"CKFinder Logo\"></a>\n        </h1>\n        <nav class=\"navigation-b grid-width-70\">\n            <ul>\n                <li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/\" class=\"button-a\">Documentation</a></li>\n            </ul>\n        </nav>\n    </div>\n</header>\n<main class=\"grid-container\">\n    <nav class=\"tree-a tree-a-layout grid-width-30\">\n        <h1>CKFinder Samples</h1>\n        <h2 @if($section === 'integration')class=\"tree-a-active\"@endif>Website Integration</h2>\n        <ul>\n            <li @if($sample === 'widget')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'widget']) }}\">Widget</a></li>\n            <li @if($sample === 'popups')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'popups']) }}\">Popup</a></li>\n            <li @if($sample === 'modals')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'modals']) }}\">Modal</a></li>\n            <li @if($sample === 'full-page')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'full-page']) }}\">Full Page</a></li>\n        </ul>\n        <h2 class=\"tree-a-no-sub @if($section === 'ckeditor') tree-a-active @endif\"><a href=\"{{ route('ckfinder_examples', ['example' => 'ckeditor']) }}\">CKEditor Integration</a></h2>\n        <h2 @if($section === 'skins')class=\"tree-a-active\"@endif>Skins</h2>\n        <ul>\n            <li @if($sample === 'skins-moono')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'skins-moono']) }}\">Moono</a></li>\n            <li @if($sample === 'skins-jquery-mobile')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'skins-jquery-mobile']) }}\">jQuery Mobile</a></li>\n        </ul>\n        <h2 @if($section === 'user-interface')class=\"tree-a-active\"@endif>User Interface</h2>\n        <ul>\n            <li @if($sample === 'user-interface-default')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'user-interface-default']) }}\">Default</a></li>\n            <li @if($sample === 'user-interface-compact')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'user-interface-compact']) }}\">Compact</a></li>\n            <li @if($sample === 'user-interface-mobile')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'user-interface-mobile']) }}\">Mobile</a></li>\n            <li @if($sample === 'user-interface-listview')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'user-interface-listview']) }}\">List View</a></li>\n        </ul>\n        <h2 class=\"tree-a-no-sub @if($section === 'localization') tree-a-active @endif\"><a href=\"{{ route('ckfinder_examples', ['example' => 'localization']) }}\">Localization</a></h2>\n        <h2 @if($section === 'other')class=\"tree-a-active\"@endif>Other</h2>\n        <ul>\n            <li @if($sample === 'other-read-only')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'other-read-only']) }}\">Read-only Mode</a></li>\n            <li @if($sample === 'other-custom-configuration')class=\"tree-a-active\"@endif><a href=\"{{ route('ckfinder_examples', ['example' => 'other-custom-configuration']) }}\">Custom Configuration</a></li>\n        </ul>\n        <h2 class=\"tree-a-no-sub @if($section === 'plugin-examples') tree-a-active @endif\"><a href=\"{{ route('ckfinder_examples', ['example' => 'plugin-examples']) }}\">Plugin Examples</a></h2>\n    </nav>\n    <section class=\"content grid-width-70\">\n        @yield('content')\n    </section>\n</main>\n<footer class=\"footer-a grid-container\">\n    <div class=\"grid-container\">\n        <p class=\"grid-width-100\">\n            CKFinder 3 for PHP &ndash; <a href=\"https://ckeditor.com/ckeditor-4/ckfinder/\">https://ckeditor.com/ckeditor-4/ckfinder/</a>\n        </p>\n        <p class=\"grid-width-100\">\n            Copyright &copy; 2003-2018, <a class=\"samples\" href=\"http://cksource.com/\">CKSource</a> &ndash; Frederico\n            Knabben. <a href=\"https://ckeditor.com/sales/license/ckfinder\">All rights reserved</a>.\n        </p>\n    </div>\n</footer>\n<nav class=\"navigation-a\">\n    <div class=\"grid-container\">\n        <ul class=\"navigation-a-left grid-width-70\">\n            <li><a href=\"https://ckeditor.com/ckfinder/\">Project Homepage</a></li>\n            <li class=\"global-is-mobile-hidden\"><a href=\"https://github.com/ckfinder/ckfinder/issues\">I found a bug in CKFinder</a></li>\n            <li class=\"global-is-mobile-hidden\"><a class=\"icon-pos-right icon-navigation-a-github\" href=\"https://github.com/ckfinder/ckfinder-docs-samples\">Sample Plugins on GitHub</a></li>\n        </ul>\n    </div>\n</nav>\n\n<script src=\"{{ asset('js/ckfinder/samples/js/sf.js') }}\"></script>\n<script src=\"{{ asset('js/ckfinder/samples/js/tree-a.js') }}\"></script>\n@include('ckfinder::setup')\n@yield('scripts')\n\n</body>\n</html>\n"
  },
  {
    "path": "views/samples/localization.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Localization</h1>\n\n\t<p>CKFinder interface is automatically displayed in the user's language (as set in the browser or operating system settings).</p>\n\t<p>The language of the CKFinder UI can also be set manually by using the <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-language\"><code>language</code></a> configuration option.</p>\n\n\t<div class=\"tip-a\" style=\"padding-top:0.5em;padding-bottom:0.5em\">\n\t\t<h4>Translations Needed!</h4>\n\t\t<p>At the moment many localizations are incomplete. Please feel free to <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/guide/dev_translations\">provide translations for your native language</a>. Your help will be much appreciated!</p>\n\t</div>\n\n\t<p>In the example below CKFinder is started in Brazilian Portuguese.</p>\n\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\tlanguage: 'pt-br',\n\twidth: '100%',\n\theight: 500\n} );</code></pre>\n\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\tlanguage: 'pt-br',\n\t\t\twidth: '100%',\n\t\t\theight: 500\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/modals.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n    <h1>Modal Mode</h1>\n\n    <p>The modal mode is similar to <a href=\"{{ route('ckfinder_examples', ['example' => 'popups']) }}\">popup</a>. The difference is that popups are opened using a separate browser window while in modal mode CKFinder is opened inside a modal container that is appended to current page document.</p>\n\n    <div class=\"modal-example\">\n        <button id=\"ckfinder-modal\" class=\"button-a button-a-background\" style=\"float: left\">Open Modal</button>\n        <div id=\"output\" style=\"float: left;font-size: 0.8em;line-height: 1.4em;margin: 3px 7px;\">\n\t\t\t<span id=\"file-name\"></span>\n\t\t\t<br>\n\t\t\t<span id=\"file-url\"></span>\n\t\t</div>\n    </div>\n    <div style=\"clear: both\"></div>\n\n    <h2>Multiple Modals</h2>\n\n    <p>In some cases you may need more than one modal to handle multiple places that require selecting a file.\n        Below you can find an example that fills each of the inputs with the URL of the selected file.</p>\n\n    <input id=\"ckfinder-input-1\" type=\"text\" style=\"width:60%\">\n    <button id=\"ckfinder-modal-1\" class=\"button-a button-a-background\">Browse Server</button>\n\n    <div style=\"height: 5px\"></div>\n\n    <input id=\"ckfinder-input-2\" type=\"text\" style=\"width:60%\">\n    <button id=\"ckfinder-modal-2\" class=\"button-a button-a-background\">Browse Server</button>\n\n    <pre class=\"prettyprint\"><code>var button1 = document.getElementById( 'ckfinder-popup-1' );\nvar button2 = document.getElementById( 'ckfinder-popup-2' );\n\nbutton1.onclick = function() {\n\tselectFileWithCKFinder( 'ckfinder-input-1' );\n};\nbutton2.onclick = function() {\n\tselectFileWithCKFinder( 'ckfinder-input-2' );\n};\n\nfunction selectFileWithCKFinder( elementId ) {\n\tCKFinder.modal( {\n\t\tchooseFiles: true,\n\t\twidth: 800,\n\t\theight: 600,\n\t\tonInit: function( finder ) {\n\t\t\tfinder.on( 'files:choose', function( evt ) {\n\t\t\t\tvar file = evt.data.files.first();\n\t\t\t\tvar output = document.getElementById( elementId );\n\t\t\t\toutput.value = file.getUrl();\n\t\t\t} );\n\n\t\t\tfinder.on( 'file:choose:resizedImage', function( evt ) {\n\t\t\t\tvar output = document.getElementById( elementId );\n\t\t\t\toutput.value = evt.data.resizedUrl;\n\t\t\t} );\n\t\t}\n\t} );\n}\n</code></pre>\n@stop\n\n@section('scripts')\n    <script>\n\t\tvar button = document.getElementById( 'ckfinder-modal' );\n\n\t\tbutton.onclick = function() {\n\t\t\tCKFinder.modal( {\n\t\t\t\tchooseFiles: true,\n\t\t\t\twidth: 800,\n\t\t\t\theight: 600,\n\t\t\t\tonInit: function( finder ) {\n\t\t\t\t\tfinder.on( 'files:choose', function( evt ) {\n\t\t\t\t\t\tvar file = evt.data.files.first();\n\t\t\t\t\t\tvar outputFileName = document.getElementById( 'file-name' );\n\t\t\t\t\t\tvar outputFileUrl = document.getElementById( 'file-url' );\n\t\t\t\t\t\toutputFileName.innerText = 'Selected: ' + file.get( 'name' );\n\t\t\t\t\t\toutputFileUrl.innerText = 'URL: ' + file.getUrl();\n\t\t\t\t\t} );\n\n\t\t\t\t\tfinder.on( 'file:choose:resizedImage', function( evt ) {\n\t\t\t\t\t\tvar outputFileName = document.getElementById( 'file-name' );\n\t\t\t\t\t\tvar outputFileUrl = document.getElementById( 'file-url' );\n\t\t\t\t\t\toutputFileName.innerText = 'Selected resized image: ' + evt.data.file.get( 'name' );\n\t\t\t\t\t\toutputFileUrl.innerText = 'URL: ' + evt.data.resizedUrl;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\tvar button1 = document.getElementById( 'ckfinder-modal-1' );\n\t\tvar button2 = document.getElementById( 'ckfinder-modal-2' );\n\n\t\tbutton1.onclick = function() {\n\t\t\tselectFileWithCKFinder( 'ckfinder-input-1' );\n\t\t};\n\t\tbutton2.onclick = function() {\n\t\t\tselectFileWithCKFinder( 'ckfinder-input-2' );\n\t\t};\n\n\t\tfunction selectFileWithCKFinder( elementId ) {\n\t\t\tCKFinder.modal( {\n\t\t\t\tchooseFiles: true,\n\t\t\t\twidth: 800,\n\t\t\t\theight: 600,\n\t\t\t\tonInit: function( finder ) {\n\t\t\t\t\tfinder.on( 'files:choose', function( evt ) {\n\t\t\t\t\t\tvar file = evt.data.files.first();\n\t\t\t\t\t\tvar output = document.getElementById( elementId );\n\t\t\t\t\t\toutput.value = file.getUrl();\n\t\t\t\t\t} );\n\n\t\t\t\t\tfinder.on( 'file:choose:resizedImage', function( evt ) {\n\t\t\t\t\t\tvar output = document.getElementById( elementId );\n\t\t\t\t\t\toutput.value = evt.data.resizedUrl;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n    </script>\n    <script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/other-custom-configuration.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Custom Configuration</h1>\n\t<p>CKFinder provides many configuration options that can be changed to customize the application.\n\t\tFor details please check the <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config\">documentation</a>.</p>\n\t<p>In the example below the following options are set:</p>\n\t<ul>\n\t\t<li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-id\"><code>id</code></a> sets the instance ID to <code>custom-instance-id</code>,</li>\n\t\t<li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-thumbnailDefaultSize\"><code>thumbnailDefaultSize</code></a> sets the default thumbnail size to 400px after CKFinder is started,</li>\n\t\t<li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-width\"><code>width</code></a> sets the widget width to 100% to use all available space,</li>\n\t\t<li><a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-height\"><code>height</code></a> sets the widget height to 500 pixels.</li>\n\t</ul>\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\tid: 'custom-instance-id',\n\tthumbnailDefaultSize: 400,\n\twidth: '100%',\n\theight: 500\n} );</code></pre>\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\tid: 'custom-instance-id',\n\t\t\tthumbnailDefaultSize: 400,\n\t\t\twidth: '100%',\n\t\t\theight: 500\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/other-read-only.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Read-only Mode</h1>\n\t<p>Read-only mode can be enabled in CKFinder with the <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-readOnly\"><code>readOnly</code></a>\n\t\tconfiguration option. The user will be able to browse the files but will not be able to introduce any changes. Thanks to this setting you will be able to use\n\t\tCKFinder as an online gallery.</p>\n\t<p>Note: This will only disable certain UI elements. In order to successfully block file uploads and modifications, or to set read-only permissions for particular\n\t\tfolders, you will need to adjust <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3-php/configuration.html#configuration_options_accessControl\">ACL settings</a>\n\t\taccordingly in the server-side configuration file.</p>\n\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\treadOnly: true,\n\twidth: '100%',\n\theight: 500\n} );</code></pre>\n\n\t<div id=\"ckfinder-widget\"></div>\n\t<h2>Simple Gallery</h2>\n\t<p>With a little bit of imagination it is possible to turn CKFinder into a very simple gallery. Here CKFinder is configured to\n\t\topen a file on double click, run without a toolbar and without the folders panel.</p>\n\t<div id=\"ckfinder-widget2\"></div>\n\t<p>The code behind this setup is quite simple:</p>\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget2', {\n\tdisplayFoldersPanel: false,\n\theight: 500,\n\tid: 'gallery',\n\treadOnly: true,\n\treadOnlyExclude: 'Toolbars',\n\tthumbnailDefaultSize: 143,\n\twidth: '100%'\n} );\n\t\t</code></pre>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget2', {\n\t\t\tdisplayFoldersPanel: false,\n\t\t\theight: 500,\n\t\t\t// The main reason why ID is set here is \"thumbnailDefaultSize\" specified below.\n\t\t\t// Without setting the ID, CKFinder would use remembered user setting from previously used instance.\n\t\t\tid: 'gallery',\n\t\t\treadOnly: true,\n\t\t\treadOnlyExclude: 'Toolbars',\n\t\t\tthumbnailDefaultSize: 143,\n\t\t\twidth: '100%'\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/plugin-examples.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Plugin Examples</h1>\n\t<p>The example below shows the <code>StatusBarInfo</code> plugin that displays basic information about the selected file in the application status bar.\n\t\tYou can find more plugin examples in the  <a href=\"https://github.com/ckfinder/ckfinder-docs-samples\">CKFinder sample plugins repository</a>.\n\t\tPlease have a look at <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/guide/dev_plugins\">plugin documentation</a>, too.</p>\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\twidth: '100%',\n\theight: 500,\n\tplugins: [\n\t\t// The path must be relative to the location of the ckfinder.js file.\n\t\t'../samples/plugins/StatusBarInfo/StatusBarInfo'\n\t]\n} );</code></pre>\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\twidth: '100%',\n\t\t\theight: 500,\n\t\t\tplugins: [\n\t\t\t\t// Path must be relative to the location of ckfinder.js file\n\t\t\t\t'samples/plugins/StatusBarInfo/StatusBarInfo'\n\t\t\t]\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/popups.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n    <h1>Popup Mode</h1>\n\n    <p>The <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/guide/dev_installation-section-using-ckfinder-in-a-popup-window\">popup mode</a> is most suitable for selecting files that are stored on a server.<br />\n        Click the button below to open the popup and choose any file. After that you will see basic information\n        about the file that was selected, including the URL.</p>\n\n    <div class=\"popup-example\">\n        <button id=\"ckfinder-popup\" class=\"button-a button-a-background\" style=\"float: left\">Open Popup</button>\n        <div id=\"output\" style=\"float: left;font-size: 0.8em;line-height: 1.4em;margin: 3px 7px;\">\n            <span id=\"file-name\"></span>\n            <br>\n            <span id=\"file-url\"></span>\n        </div>\n    </div>\n    <div style=\"clear: both\"></div>\n\n    <p>Additionally, CKFinder supports a special file selection mode for images called <strong>Choose Resized</strong>. This feature\n        allows you to resize the selected image to any size that is suitable for you. The CKFinder connector will automatically create\n        a resized version of the image and return its URL.</p>\n\n    <h2>Multiple Popups</h2>\n    <p>In some cases you may need more than one popup to handle multiple places that require selecting a file.\n        Below you can find an example that fills each of the inputs with the URL of the selected file.</p>\n\n    <input id=\"ckfinder-input-1\" type=\"text\" style=\"width:60%\">\n    <button id=\"ckfinder-popup-1\" class=\"button-a button-a-background\">Browse Server</button>\n\n    <div style=\"height: 5px\"></div>\n\n    <input id=\"ckfinder-input-2\" type=\"text\" style=\"width:60%\">\n    <button id=\"ckfinder-popup-2\" class=\"button-a button-a-background\">Browse Server</button>\n\n    <pre class=\"prettyprint\"><code>var button1 = document.getElementById( 'ckfinder-popup-1' );\nvar button2 = document.getElementById( 'ckfinder-popup-2' );\n\nbutton1.onclick = function() {\n\tselectFileWithCKFinder( 'ckfinder-input-1' );\n};\nbutton2.onclick = function() {\n\tselectFileWithCKFinder( 'ckfinder-input-2' );\n};\n\nfunction selectFileWithCKFinder( elementId ) {\n\tCKFinder.popup( {\n\t\tchooseFiles: true,\n\t\twidth: 800,\n\t\theight: 600,\n\t\tonInit: function( finder ) {\n\t\t\tfinder.on( 'files:choose', function( evt ) {\n\t\t\t\tvar file = evt.data.files.first();\n\t\t\t\tvar output = document.getElementById( elementId );\n\t\t\t\toutput.value = file.getUrl();\n\t\t\t} );\n\n\t\t\tfinder.on( 'file:choose:resizedImage', function( evt ) {\n\t\t\t\tvar output = document.getElementById( elementId );\n\t\t\t\toutput.value = evt.data.resizedUrl;\n\t\t\t} );\n\t\t}\n\t} );\n}\n</code></pre>\n@stop\n\n@section('scripts')\n<script>\n    var button = document.getElementById( 'ckfinder-popup' );\n\n    button.onclick = function() {\n        CKFinder.popup( {\n            chooseFiles: true,\n            width: 800,\n            height: 600,\n            onInit: function( finder ) {\n                finder.on( 'files:choose', function( evt ) {\n                    var file = evt.data.files.first();\n\t\t\t\t\tvar outputFileName = document.getElementById( 'file-name' );\n\t\t\t\t\tvar outputFileUrl = document.getElementById( 'file-url' );\n                    outputFileName.innerText = 'Selected: ' + file.get( 'name' );\n                    outputFileUrl.innerText = 'URL: ' + file.getUrl();\n                } );\n\n                finder.on( 'file:choose:resizedImage', function( evt ) {\n\t\t\t\t\tvar outputFileName = document.getElementById( 'file-name' );\n\t\t\t\t\tvar outputFileUrl = document.getElementById( 'file-url' );\n\t\t\t\t\toutputFileName.innerText = 'Selected resized image: ' + evt.data.file.get( 'name' );\n\t\t\t\t\toutputFileUrl.innerText = 'URL: ' + evt.data.resizedUrl;\n                } );\n            }\n        } );\n    };\n\n    var button1 = document.getElementById( 'ckfinder-popup-1' );\n    var button2 = document.getElementById( 'ckfinder-popup-2' );\n\n    button1.onclick = function() {\n        selectFileWithCKFinder( 'ckfinder-input-1' );\n    };\n    button2.onclick = function() {\n        selectFileWithCKFinder( 'ckfinder-input-2' );\n    };\n\n    function selectFileWithCKFinder( elementId ) {\n        CKFinder.popup( {\n            chooseFiles: true,\n            width: 800,\n            height: 600,\n            onInit: function( finder ) {\n                finder.on( 'files:choose', function( evt ) {\n                    var file = evt.data.files.first();\n                    var output = document.getElementById( elementId );\n                    output.value = file.getUrl();\n                } );\n\n                finder.on( 'file:choose:resizedImage', function( evt ) {\n                    var output = document.getElementById( elementId );\n                    output.value = evt.data.resizedUrl;\n                } );\n            }\n        } );\n    }\n</script>\n<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/skins-jquery-mobile.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>jQuery Mobile Skin</h1>\n\n\t<p>CKFinder UI is based on <a href=\"http://jquerymobile.com/\">jQuery Mobile</a> so its look &amp; feel can be changed using the <a href=\"http://themeroller.jquerymobile.com/\">jQuery Mobile Theme Roller</a>.\n\t\tFor more information about custom skins and Theme Roller please refer to <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/guide/dev_themeroller\">CKFinder documentation</a>.</p>\n\n\t<h3>jQuery Mobile Swatch \"a\" Skin </h3>\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\twidth: '100%',\n\theight: 600,\n\tskin: 'jquery-mobile',\n\tswatch: 'a'\n} );</code></pre>\n\t<div id=\"ckfinder-widget-a\"></div>\n\n\t<h3>jQuery Mobile Swatch \"b\" Skin </h3>\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\twidth: '100%',\n\theight: 600,\n\tskin: 'jquery-mobile',\n\tswatch: 'b'\n} );</code></pre>\n\t<div id=\"ckfinder-widget-b\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget-a', {\n\t\t\twidth: '100%',\n\t\t\theight: 600,\n\t\t\tskin: 'jquery-mobile',\n\t\t\tswatch: 'a'\n\t\t} );\n\n\t\tCKFinder.widget( 'ckfinder-widget-b', {\n\t\t\twidth: '100%',\n\t\t\theight: 600,\n\t\t\tskin: 'jquery-mobile',\n\t\t\tswatch: 'b'\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/skins-moono.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Moono Skin</h1>\n\n\t<p>Moono is a default skin used in CKFinder that provides visual integration with CKEditor.</p>\n\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\twidth: '100%',\n\t\t\theight: 700\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/user-interface-compact.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Compact User Interface</h1>\n\t<p>It is possible to disable the folders panel and have folders displayed as icons in the main area of the application.\n\t\tIn the example below this mode is initialized inside a widget, but it also works in all standalone modes.</p>\n\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\tdisplayFoldersPanel: false,\n\twidth: '100%',\n\theight: 700\n} );</code></pre>\n\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\tdisplayFoldersPanel: false,\n\t\t\twidth: '100%',\n\t\t\theight: 700\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/user-interface-default.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Default User Interface</h1>\n\t<p>By default folders are displayed in CKFinder in a folder tree panel, like in the example below.</p>\n\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\twidth: '100%',\n\t\t\theight: 700\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/user-interface-listview.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>List View</h1>\n\t<p>By default files are displayed in CKFinder as thumbnails. With list view enabled all files will be displayed as a list, one bellow the other. No image previews are available in this mode.</p>\n\t<p>The list view can be enabled regardless of the selected user interface (Default/Compact/Mobile).</p>\n\n\t<pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\tdefaultViewType: 'list',\n\twidth: '100%',\n\theight: 700\n} );</code></pre>\n\n\t<div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\tdefaultViewType: 'list',\n\t\t\twidth: '100%',\n\t\t\theight: 700,\n\t\t\t// Specifying ID is not needed when setting defaultViewType.\n\t\t\t// It is set here just to make sure this CKFinder instance will not share user settings with other instances.\n\t\t\tid: 'custom-listview'\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/user-interface-mobile.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n\t<h1>Mobile User Interface</h1>\n\t<p>Mobile user interface is enabled automatically when the width of the working area of the application gets below the value\n\t\tdefined in the <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/api/CKFinder.Config-cfg-uiModeThreshold\"><code>uiModeThreshold</code></a>\n\t\tconfiguration option.</p>\n\t<p>Note: This mode works best on mobile devices, as touch and swipe events are not enabled for desktop browsers.</p>\n\n\t<div id=\"ckfinder-widget\" style=\"width: 500px; margin: 30px auto 0;\"></div>\n@stop\n\n@section('scripts')\n\t<script>\n\t\tCKFinder.widget( 'ckfinder-widget', {\n\t\t\tdisplayFoldersPanel: false,\n\t\t\twidth: 500,\n\t\t\theight: 700\n\t\t} );\n\t</script>\n\t<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\" type=\"text/javascript\"></script>\n@stop\n"
  },
  {
    "path": "views/samples/widget.blade.php",
    "content": "@extends('ckfinder::samples/layout')\n\n@section('content')\n    <h1>Widget Mode</h1>\n\n    <p>Using the <a href=\"https://docs.ckeditor.com/ckfinder/ckfinder3/#!/guide/dev_installation-section-embedding-as-widget\">widget mode</a> you can embed CKFinder directly on a page, as shown below.</p>\n    <pre class=\"prettyprint\"><code>CKFinder.widget( 'ckfinder-widget', {\n\twidth: '100%',\n\theight: 700\n} );</code></pre>\n\n    <div id=\"ckfinder-widget\"></div>\n@stop\n\n@section('scripts')\n<script>\n    CKFinder.widget( 'ckfinder-widget', {\n        width: '100%',\n        height: 700\n    } );\n</script>\n<script src=\"//cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\"></script>\n@stop\n"
  },
  {
    "path": "views/setup.blade.php",
    "content": "<script type=\"text/javascript\" src=\"{{ asset('js/ckfinder/ckfinder.js') }}\"></script>\n<script>CKFinder.config( { connectorPath: @json(route('ckfinder_connector')) } );</script>\n"
  }
]